도커 컨테이너 관리 명령어

도커 컨테이너 관리 명령어

이 글에서는 Docker Commands에서 자주 사용되는
Container 명령어의 사용법을 설명한다.


컨테이너 생성하기

create 명령어로 컨테이너를 생성할 수 있다. 명령어의 인자에는 컨테이너의 베이스가 될 이미지를 지정한다.
이미지의 태그를 생략하면 자동으로 latest태그가 붙게된다.

$ docker create <Image Name>:<Tag> # docker create ubuntu : latest 태그가 붙게된다. # docker create ubuntu:18.04 : 18.04 라는 태그가 붙었다.

컨테이너는 생성될 때 자동으로 이름이 지정되는데, --name옵션을
지정하면 생성하는 컨테이너에 이름을 지정할 수 있다.

$ docker create --name <Container Name> <Image Name>:<Tag> # docker create --name my_first_container ubuntu # my_first_container 라는 이름의 ubuntu 컨테이너를 생성한다.

Docker Create Command


컨테이너 목록보기

ps 명령어로 생성되어있는 컨테이너의 목록을 볼수 있다.
옵션을 지정하지않으면 현재 가동중인 컨테이너의 정보만 출력된다.

$ docker ps

-a 옵션을 지정하면 종료된 컨테이너들의 정보까지 출력된다.

$ docker ps -a

Docker Ps Command

-q 옵션을 지정하면 컨테이너들의 아이디만 출력된다. 이 옵션은 다른 명령어들과 함께 사용된다.

$ docker ps -q # 가동중인 컨테이너의 아이디만 보기 $ docker ps -a -q # 종료된 컨테이너의 아이디도 함께 보기

Docker Ps -q Command

ps 명령어로 컨테이너의 목록을 출력하면
여러 항목들이 나타내는데 각 항목들의 의미는 아래의 표와 같다. | Column | Description | | :-: | :- | | CONTAINER ID | 컨테이너의 아이디 (보여지는 아이디는 전체아이디가 아닌 아이디의 일부분이다.) | | IMAGE | 해당 컨테이너에 베이스로 지정된 이미지 | | COMMAND | 컨테이너 실행시 지정되는 프로세스의 이름 | | CREATED | 컨테이너 생성 후 경과 시간 | | STATUS | 현재 컨테이너의 상태 (Created: 생성후 실행되지않음, Up: 실행중, Pause: 중지, Existed: 종료)| | PORTS | 호스트 특정 포트와 연결된 컨테이너의 포트 관계 | | NAMES | 컨테이너의 이름 |


컨테이너 삭제하기

rm 명령어로 컨테이너를 삭제할 수 있다. 명령어의 인자에는 삭제할 컨테이너의 아이디나 이름을 지정한다.

$ docker rm <Container Id || Container Name>

Docker Rm Command

ps명령어와 함께 사용하면 여러 컨테이너를 한번에 삭제할 수 있다.

$ docker rm $(docker ps -a -q)

컨테이너 실행하기

start 명령어로 컨테이너를 실행할 수 있다.
명령어의 인자에는 삭제할 컨테이너의 아이디나 이름을 지정한다.

$ docker start <Container Id || Container Name>

Docker Start Command

생성직후 별도의 옵션이 지정되지않은 컨테이너는 바로 종료된다.
Dockerfile에서 더 자세히 설명하겠지만, 도커는 컨테이너를
하나의 프로세스로 관리하기 때문에 컨테이너의 작업이 끝나면 종료된다.
my_first_container 컨테이너는 "bin/bash" 를 실행하는데 bash는 리눅스의 기본 shell 프로그램으로 표준 입력을 받을 수 없는 상태가 되면 프로그램이 종료된다.
따라서 키보드를 통해 표준 입력을 받지 못하는 컨테이너 에서는 bash가 바로 종료되기 때문에 컨테이너의 작업이 끝난다.
이 내용은 운영체제에서 프로세스의 라이프 사이클에 대해 알아보면된다.


컨테이너 생성과 동시에 실행하기

run명령어로 한번에 컨테이너를 생성하고 실행할 수 있다.

$ docker run <Image Name>:<Tag> <Command> <Options>

Docker Run Command

Command 인자에 대해서는 Dockerfile에서 CMD를 참고하면된다.

별도의 옵션이 지정되지 않으면 start명령어와 마찬가지로 실행시 바로 종료된다.

run 명령어에서 사용할 수 있는 옵션 목록 |Option|Description| | :-: | :- | | -i | 컨테이너 입력을 열어놓는 옵션 | | -t | 컨테이너에 가상 터미널을 할당하는 옵션 | | --name | 컨테이너 이름을 지정하는 옵션 | | -d | 컨테이너를 백그라운드로 실행하는 옵션 | | --rm | 컨테이너 종료시 컨테이너를 자동 삭제하는 옵션 | | -p | 호스트와 컨테이너의 포트를 연결하는 옵션 | | -v | 호스트의 경로를 컨테이너의 디렉토리에 연결하는 옵션 | | --link | 컨테이너와 컨테이너를 연결하는 옵션 |

컨테이너 실행시 컨테이너가 종료되지않게 하려면 -i-t 옵션을
사용하여 표준입력을 할수 있도록 해주어야된다.
-i는 컨테이너의 표준 입력을 열어놓는 옵션이고,
-t는 키보드의 입력을 pseudo tty를 통해 컨테이너에 전달하는 옵션이다.
이 두 옵션은 보통 함께 사용되며, -it처럼 붙여서 사용할 수도 있다.

하지만 -it 옵션을 붙여 컨테이너를 생성 및 실행시키면
터미널이 컨테이너에 들어가기 때문에 도커에 명령을 할 수 없다.
그렇다고 컨테이너에 연결된 터미널을 종료하면 컨테이너는 종료된다.

Docker Run -it Command

이를 해결하려면 -d옵션을 붙여 터미널을 백그라운드로 실행시키면된다.
터미널은 도커에 명령을 내릴 수 있고, 컨테이너는 실행중이다.

Docker Run -d Command

--rm옵션을 붙이면 컨테이너 종료시 컨테이너가 삭제되도록 할수 있다.
보통 테스트용 컨테이너에 사용된다.

Docker Run --rm Command

-p, -v, --link옵션은 이 글에서 설명하기는 무리가 있다.
이 옵션들은 도커 APM서버 만들기를 참고하면된다.


컨테이너 종료하기

stop 명령어로 컨테이너를 종료할 수 있다.
이 명령어는 현재 진행중인 작업을 끝낸뒤 컨테이너를 종료한다.

$ docker stop <Container Id || Container Name>

Docker Stop Command

kill명령어를 사용하면 컨테이너를 강제로 종료시킬 수 있다.

$ docker kill <Container Id || Container Name>

컨테이너를 종료하는 명령어들 또한 명령어를 조합하여 사용할 수 있다.

$ docker stop $(docker ps -q) $ docker kill $(docker ps -q)

컨테이너에 명령어 사용하기

exec명령어로 실행중인 컨테이너 내에 명령을 내릴 수 있다.

$ docker exec <Options> <Container Id || Container Name> <Command> <Args>

컨테이너 접속하기

attach명령어로 백그라운드에서 실행중인 컨테이너에 접속할 수 있다.

$ docker attach <Container Id || Container Name>

Docker Attach Command

접속한 컨테이너에서 나가려면 ctrl + D를 누르거나
exit를 입력하면되며, 이때 컨테이너는 종료되지 않는다.

컨테이너를 이미지로 변환하기

commit명령어를 사용하면 컨테이너를 이미지로 변환할 수 있다.

$ docker commit <Options> <Container Id || Container Name> <Image Name>:<Tag>

컨테이너를 사용하다보면 베이스 이미지에서 추가되거나 삭제되는 등의
변경사항이 있는데 이것들을 이미지변환하여 사용할 수 있다.

아래의 사진을 보면 기본 ubuntu 이미지는 nano에디터가 설치되어있지 않다.
Docker Commit Command

따라서 nano 에디터를 설치해주면 my_container 컨테이너에는
베이스 이미지에는 없는 nano 에디터가 설치되어있다.

Docker Commit Command Nano

컨테이너에서 나온뒤 commit 명령어로 원하는 이미지의 이름으로 이미지를
생성한뒤 생성한 이미지로 컨테이너를 생성하면 아래 사진처럼 nano에디터가
설치된 이미지로 컨테이너를 실행할 수 있다.

Docker Commit Command Nano Image


컨테이너의 파일 가져오기

cp 명령어를 사용하면 컨테이너의 특정경로에 있는 파일을
호스트 PC로 가져올 수 있고, 반대로 가져다 놓을 수도 있다.

$ docker cp <Container Name>:<Container Path> <Host Path> # 가져오기 $ docker cp <Host Path> <Container Name>:<Container Path> # 가져다 놓기

아래 사진은 컨테이너의 파일을 호스트 PC로 가져온다.
Docker Cp Command

아래의 사진에서는 반대로 호스트 PC의 파일을 컨테이너 안으로 복사한다.
Docker Cp reverse Command

이 명령어는 보통 컨테이너의 특정파일을 확인하는 용도로 사용된다.