린아저씨의 잡학사전

▶ 버전 확인
# docker -v
 
▶ 이미지 내려 받기
# docker pull [이미지 이름]
ex) docker pull centos:7
 
 
▶ 이미지 목록 확인
# docker images
 
▶ 이미지 삭제
# docker rmi [이미지 이름]
 
▶ 컨테이너 생성
# docker create -i -t --name mycentos centos:7
 
▶ 컨테이너 실행
# docker start mycentos
 
▶ 컨테이너 내부 접근
# docker attach mycentos
 
▶ 컨테이너 생성 및 내부접근
# docker run -i -t --name centos7 centos:7
 
▶ 컨테이너 정지
# docker stop centos7
 
▶ 컨테이너 정지 후 빠져나오기
# exit
or
Ctrl + D
 
▶ 컨테이너 정지하지 않고 빠져나오기
Ctrl + P, Q
 
▶ 컨테이너 실행 중인 목록 확인
# docker ps
 
▶ 컨테이너 모든 목록 확인
# docker ps -a
 
▶ 컨테이너 이름 변경
# docker rename [변경 전 컨테이너 이름] [변경 후 컨테이너 이름]
 
▶ 컨테이너 삭제
# docker rm [컨테이너 이름]
 
▶ 컨테이너 포트 설정
# docker run -i -t --name mywebserver -p 80:80 ubuntu:14.04
 
* -p 옵션을 이용한 포트 바인딩 [호스트의 포트]:[컨테이너의 포트]
-p 옵션을 여러번 사용하여 여러개의 포트를 바인딩 하는 것도 가능
ex) docker run -i -t -p 3306:3306 -p 192.168.0.100:7777:80 ubuntu:14.04
 
but. -p 80 과 같이 입력하면 컨테이너의 80번 포트를 호스트의 사용 가능한 포트 중 하나와 임의로 연결합니다.
따라서 이와 같이 입력한 경우에는 docker ps 명령어를 입력해 PORTS를 확인해야 합니다.  
 
▶ 컨테이너 백그라운드 실행
# docker run -d --name detach_test wordpress
*-d : -i -t가 컨테이너 내부로 진입하도록 attach 가능한 상태로 설정한다면 -d는 detached 모드로 컨테이너를 실행.
Detached 모드는 컨테이너를 백그라운드에서 동작하는 애플리케이션으로써 실행하도록 설정.
 
*-i, -t 옵션으로 run을 실행하면 표준 입출력이 활성화된, 상호작용이 가능한 쉘 환경 사용가능.
 -d 옵션으로 run을 실행하면 입출력이 없는 상태로 컨테이너를 실행. 
 컨테이너 내부에서 프로그램이 터미널을 차지하는 포그라운드(foreground)로 실행돼 사용자의 입력을 받지 않음. 
 Detached 모드인 컨테이너는 반드시 컨테이너에서 프로그램이 실행돼야 하며, 포그라운드 프로그램이 실행되지 않으면 
 컨테이너가 종료됨.
 
*컨테이너는 각기 하나의 터미널만을 갖기 때문에 한 컨테이너에 동시에 여러 터미널로 접근해도 모두 같은 화면을 공유하게 됨.
 
*-d 옵션을 사용하여 컨테이너를 백그라운드 실행 했을 경우 attach 명령어를 쓰는 것은 의미가 없다. 
 attach를 쓰면 컨테이너에서 실행 중인 프로그램의 로그 출력을 보게 될 뿐이다.
 그러나 exec 명령어를 이용하면 컨테이너 내부의 셸을 사용할 수 있다.
 
▶ exec 명령어사용을 통한 백그라운드 실행 컨테이너 내부 접속
# docker exec -i -t wordpressdb /bin/bash
*옵션을 추가하지 않고 exec 명령어를 사용하면 컨테이너 내부에서 명령어를 실행한 명령어에 대한 결과값을 반환받을 수 있다.
  그러나 위 예제와 같이 -i -t 옵션을 추가해 /bin/bash를 상호 입출력이 가능한 형태로 exec 명령어를 사용하는 것도 가능하다.  
 
*exec로 백그라운드 동작중인 컨테이너(예를들면 mysql, wordpress)에 들어왔을 때는 exit를 써도 컨테이너가 종료되지 않는데, 
이는 프로세스(mysql or wordpress)가 컨테이너 안에서 여전히 포그라운드 모드로 동작하고 있기 때문이다.
 
▶ 컨테이너 환경변수 설정
# docker run -i -t --name wordpressdb \
-e MYSQL_ROOT_PASSWORD=password \
-e MYSQL_DATABASE=wordpress \
mysql:5.7
 
*-e : -e 옵션은 컨테이너 내부의 환경변수를 설정한다. 컨테이너화된 애플리케이션은 환경변수에서 값을 가져와 쓰는 경우가 
많으므로 자주 사용하는 옵션 중 하나이다.
 
▶ 별명(alias)를 이용한 A컨테이너에서 B컨테이너로 접근
# docker run -d \
-e WORDPRESS_DB_PASSWORD=password \
--name wordpress
--link wordpressdb:mysql \
-p 80 \
wordpress
*--link : --link 옵션은 내부 IP를 알 필요 없이 항상 컨테이너 별명(alias)으로 접근하도록 설정합니다. 
위의 예제(워드프레스 웹 서버 컨테이너)에서는 --link 옵션의 값에서 wordpressdb 컨테이너를 mysql이라는 이름으로 설정했습니다.
즉, 워드프레스 웹 서버 컨테이너에서 mysql이라는호스트 이름으로 ping을 전송하면 wordpressdb의 내부 IP로 접근하는 것을 
확인할 수 있습니다.
 
*--link 옵션을 사용할 때 유의할 점은 --link에 입력된 컨테이너가 실행 중이지 않거나 존재하지 않는다면 --link를 적용한 컨테이너 
또한 실행할 수 없다는 것입니다.

 

공유하기

facebook twitter kakaoTalk kakaostory naver band