본문 바로가기

개발/Docker

기본적인 docker 명령어 (1) - 실행과 종료

컨테이너 생성

docker run 명령어는 컨테이너를 생성하고 실행하는 역할을 합니다.

docker run -i -t ubuntu:14.04

-i, -t 옵션은 컨테이너와 상호 입출력을 가능하게 합니다. 

-i 옵션으로 상호 입출력을, -t 옵션으로 bash 쉘을 사용하도록 컨테이너를 설정합니다. 

ubuntu:14.04 이미지가 로컬 도커 엔진에 존재하지 않으면, 도커 허브에서 자동으로 이미지를 내려받습니다.

 

컨테이너 내부에서 빠져나오는 방법은 컨테이너 쉘에서 exit를 입력하거나, Ctrl + D ( MacOS control + D ) 를 동시에 입력하는 방법이 있습니다. 하지만 이 방법은 컨테이너 내부에서 빠져나오면서 동시에 컨테이너를 정지시킵니다. 

 

하지만, Ctrl + P, Q를 입력하면 단순히 컨테이너의 쉘에서만 빠져나오기 때문에 정지되지 않습니다.

 

docker pull centos:7

docker pull 명령어는 이미지를 내려받을 때 사용합니다.

 

docker images

docker images 는 도커 엔진에 존재하는 이미지의 목록을 출력합니다.

 

컨테이너를 생성할 때는 run이 아닌 create 명령어를 사용할 수도 있습니다. 

docker create -i -t --name mycentos centos:7

docker create를 이용한 컨테이너 생성

컨테이너의 이름을 지정할 수도 있습니다. 아래의 16진수 해시값은 컨테이너의 고유ID입니다. 

run 과 달리, 컨테이너 내부로 들어가지 않습니다.

 

이때, docker start와 docker attach 명령어를 써서 컨테이너를 시작하고 내부로 들어갈 수 있습니다.

docker start mycentos
docker attach mycentos

여기서 알 수 있는 점은 아래와 같습니다.

 

run 명령어 : docker pull ( 이미지가 없을 때 ) -> docker create -> docker start -> docker attach

create 명령어 : docker pull ( 이미지가 없을 때 ) -> docker create

 

보통은 컨테이너를 생성함과 동시에 시작하기 때문에 run 명령어를 더 많이 사용합니다.

 

또 하나의 팁은, 컨테이너를 대상으로 하는 모든 명령어는 컨테이너의 이름 대신 ID를 쓸 수 있습니다. 앞의 2~3자만 입력해도 됩니다.

docker start dd0
# ID의 앞 3글자

하지만, 앞 글자는 중복이 있을 수 있으므로 적절히 3~4자를 입력하는 것이 좋습니다.

 

 

컨테이너 목록 확인

 

지금까지 생성한 컨테이너의 목록을 확인합니다.

docker ps

docker ps는 정지되지 않은 컨테이너만 출력합니다. exit를 사용해 나온 컨테이너는 표시 되지 않습니다. 

모든 컨테이너를 출력하는 명령어는 아래와 같습니다.

docker ps -a

docker ps -a

위에서 COMMAND는 뒤에서 자세히 다룹니다. 컨테이너가 시작될 때 실행될 명령어라고 이해하면됩니다.

docker rename stoic_margulis my_container

위의 명령어로 컨테이너의 이름을 바꿀 수 있습니다.

 

 

 

컨테이너 삭제

한 번 삭제한 컨테이너는 복구할 수 없으므로 삭제할 때는 신중을 기해야 합니다.

docker rm stoic_margulis

위의 컨테이너는 종료된 컨테이너라 바로 삭제가 됩니다.

하지만, 실행중인 컨테이너를 docker rm mycentos 로 종료하게 되면 아래와 같은 에러가 발생합니다.

docker rm 실행중인 컨테이너에 대한 오류 메시지

이럴때는 먼저 stop 후에 삭제해야 합니다.

docker stop mycentos
docker rm mycentos

혹은 force remove가 가능합니다.

docker rm -f mycentos

 

연습하다보면 컨테이너가 너무 많아져서 일일이 삭제하기 귀찮을 수 있습니다. 그럴때는 아래와 같이 prune 명령어를 입력해서 모든 컨테이너를 삭제할 수 있습니다.

docker container prune

 

혹은 docker ps 명령어에 -a -q를 조합해서 컨테이너를 삭제할 수도 있습니다. 

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

ID만을 가져올 수 있다

docker ps -a -q를 통하여 ID만을 가져오고, 이 값을 $를 통해서 감싸서 인수로 전달할 수 있습니다.