
docker create [docker image]
하나의 이미지로 여러 컨테이너를 생성 가능하다.
도커 이미지를 변경해도 이미 실행 중인 컨테이너는 영향을 받지 않는다.
각 이미지는 컨테이너로 만들어줘야 실행 가능한 상태가 된다.
이미지와 컨테이너는 각각 관리한다.
별도의 명령 없이 컨테이너 생성시, Docker에서 이름이 자동으로 부여된다.
현재 실행 중인 컨테이너 확인
docker ps
실행 여부와 상관 없이 모든 컨테이너 확인
docker ps -a
CONTAINER ID
: 컨테이너 아이디
IMAGE
: 이미지 이름
COMMAND
: 컨테이너 실행시 실행되는 프로세스 이름
CREATED
: 컨테이너 생성 후 경과 시간
STATUS
: 컨테이너 실행 상태 (Created : 생성, Up : 실행 중, Exited : 종료)
PORTS
: 호스트와 컨테이너 포트 사이 연결 관계
NAMES
: 컨테이너 이름
실행 여부와 상관 없이 모든 컨테이너의 ID만 출력하기
docker ps -a -q
docker rm [삭제할 컨테이너 NAMES / CONTAINER ID (앞 몇 자만으로도 가능) ]
docer create --name [생성할 컨테이너 이름] [이미지 이름]
docker start [컨테이너 NAMES]
하지만 위 명령으로 실행시킬시 표준 입력이 bash에 붙어있지 않기 때문에 bash 쉘이 바로 종료되어 컨테이너가 실행되자마자 종료가 된다.
도커 이미지로부터 새로운 컨테이너에서 실행 시키는 명령어이다. 즉, 도커 이미지를 다운 받고 (pull), 컨테이너를 생성하고 (create), 실행하는 (start) 명령을 한번에 실행해주는 명령어이다.
또한 컨테이너의 입력을 가상 터미널에 할당해주어, 결과적으로 pc 상의 입력이 컨테이너 입력에 들어갈 수 있도록 해준다. 이를 통해 컨테이너의 bash 쉘은 입력을 받을 수 있는 상태로 종료되지 않고, 실행 중인 상태가 된다.
- docer run [options] [이미지 이름]
- docker run -it ubuntu
: 컨테이너 실행시 해당 컨테이너 내로 진입후 바로 터미널을 통해 명령 입력 가능
- docker run -it --name myubuntu ubuntu
: 원하는 컨테이너 이름으로 실행
- docker run -it --rm [컨테이너 이름] [이미지 이름]
: 컨테이 종료시 자동으로 컨테이너 삭제하는 옵션
- docker run -it -d --rm [컨테이너 이름] [이미지 이름]
: 컨테이너를 백그라운드로 실행하기 (실행중인 상태이지만, 터미널로 입력은 받고 있지 않는 상태)
- docker attach [컨테이너 이름/컨테이너 ID]
: 백그라운드 실행 중인 컨테이너로 진입하기
컨테이너 내부 터미널에서 exit 명령어 입력시 컨테이너에서 나오게 되고 컨테이너는 중지된다.
- 주요 옵션
- -i : 컨테이너 입력(STDIN)을 열어놓는 옵션(주로 -it로 -i옵션과 -t 옵션을 함께 사용)
- -t : 가상 터미널(tty)을 할당하는 옵션
- --name : 컨테이너 이름을 설정하는 옵션
- -d : 컨테이너를 백그라운드에서 실행하는 옵션
- --rm : 컨테이너 종료시 컨테이너를 자동으로 삭제하는 옵션
- -p : 호스트와 컨테이너 포트를 연결하는 옵션
- -v : 호스트와 컨테이너 디렉토리를 연결하는 옵션 (호스트의 디렉토리로 컨테이너 디렉토리는 대체된다. -> 기존 컨테이너 파일들은 사라진다. )
cf. -it의 의미
도커 컨테이너에 표준 입력을 열어놓고(-i), pseudo tty를 할당하여(-t) 해당 표준 입력을 pseudo tty 에 연결해놓는다. 따라서 키보드 입력을 pseudo tty를 통해 컨테이너의 표준 입력으로 전달할 수 있도록 하는 것이다. 해당 명령어를 통해 컨테이너의 실행과 키보드를 통해 동시에 명령을 입력을 받을 수 있는 상태가 된다.
cf. pseudo tty (가상 터미널)
tty는 teletypewriter의 약자로, 리눅스(유닉스 계열)에서는 콘솔 또는 터미널을 의미한다.
tty를 통해 리눅스에 키보드 입력을 전달할 수 있고, 하나의 tty 이외에 다양한 터미널에서 접속을 지원하기 위해, 두번째 tty부터 가상(pseudo)이라는 말이 붙어 pseudo tty라고 명명한다.
- docker stop [컨테이너 이름/컨테이너 ID]
: 컨테이너 종료
- docker start [컨테이너 이름/컨테이너 ID]
: 컨테이너 실행
- docker pause [컨테이너 이름/컨테이너 ID]
: 실행 중인 컨테이너를 일시 중지
- docker unpause [컨테이너 이름/컨테이너 ID]
: 일시 중지 중인 컨테이너를 다시 실행
cf. docker restart [컨테이너 이름/컨테이너 ID]
: 실행 중인 컨테이너 재실행