본문 바로가기

컨테이너/Docker

[도커 강의] (2)도커 사용법을 알아보자

 

1.컨테이너 생성

 

 

❤️1.1 Docker run

$ docker -v
Docker version ...

$ docker run -i -t ubuntu:14.04

 

 

 

하지만 다음 옵션 -i -t 로 컨테이너를 만들경우 들어갔다가 exit를 하는 순간 Docker 컨테이너는 종료된다.

# docker run -itd --name kpkim ubuntu:14.04
단한줄의 명령어로 컨테이너를 생성 / 실행과 동시에 컨테이너 내부로 들어가는 명령어

-i 옵션 (상호 입출력)
-t tty를 활성화(bash) 사용
-d background 실행 , exit시 컨테이너 종료 안됨

--name 컨테이너의 Name을 정함

 

$ docker exec -it kpkim /bin/bash

root@bff498040cde:/#

컨테이너에서 기본 사용자는 root이고 호스트 이름은 무작위의 16진수 해시값. 이건 컨테이너의 고유한 ID의 앞 일부분임.

 

docker run 명령어로 컨테이너를 생성할 때 -i 옵션으로 상호 입출력을, -t 옵션으로 tty를 활성화해서 bash shell을 사용하도록 컨테이너를 설정했다. 이 2개의 옵션을 사용하지 않으면 셸을 정상적으로 사용할 수 없다.

 

컨테이너 내부에서 빠져나오는 방법은 exit, Ctrl + D. exit나 Ctrl + D는 배시 셸을 종료함으로써 컨테이너를 정지시킴과 동시에 컨테이너에서 빠져나오지만

 

Ctrl + P 누른상태에서 Q는 단순히 컨테이너의 셸에서만 빠져나오기 때문에 애플리케이션 개발하는 목적으로 컨테이너를 사용할 때는 이 방법을 많이씀

 

❤️1.2. Docker pull

$ docker images

# ubuntu가 생성되었다.
$ docker pull centos:7
7: Pulling from ...
...
...

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

$ docker images

docker images 명령어는 도커 엔진에 존재하는 이미지의 목록을 출력.

 

 

 

 

❤️1.3. Docker create

컨테이너를 생성할 때는 run 명령어가 아닌 create 명령어도 가능.

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

--name 옵션에는 컨테이너의 이름을 설정한다.

docker inspect 명령어로 컨테이너의 ID를 다시 확인할 수도 있다.

$ docker inspect mycentos | grep Id
      "Id":"~~~",

create 명령어는 컨터에너를 생성만 할 뿐 컨테이너로 들어가지 않음. 그래서 docker start와 docker attach 명령어를 써서 컨테이너를 시작하고 내부로 들어간다.

$ docker start mycentos
mycentos

$ docker attach mycentos
[root@dd06...      /]

 

정리하면 run 명령어는 pull, create, start 명령어를 일괄적으로 실행한 후 attach가 가능한 컨테이너라면 컨테이너 내부로 들어간다. 그러나 create 명령어는 도커 이미지를 pull한 뒤에 컨테이너를 생성만 할 뿐 start, attach를 실행하지 않는다. run을 더 많이 쓴다.



2. 컨테이너 목록 확인

$ docker ps

정지되지 않은 컨테이너만 출력한다. exit를 사용해 빠져나온 컨테이너는 정지 상태이기 때문에 컨테이너 목록에 출력되지 않지만 Ctrl + P + Q를 입력해 빠져나온 컨테이너는 실행 중이기 때문에 컨테이너 목록에 출력된다.

-a 옵션을 추가하면 정지된거 까지 다 보임.

docker ps -a 했을 때 COMMAND는 컨테이너가 시작될 때 실행될 명령어. 커맨드는 대부분의 이미지에 미리 내장돼있기 때문에 별도로 설정할 필요는 없음. centos나 ubuntu는 /bin/bash라는 커맨드가 내장돼 있기 때문에 컨테이너를 생성할 때 별도의 커맨드를 설정하지 않았다. 컨테이너가 시작될 때 /bin/bash 명령어가 실행됐으므로 상호 입출력이 가능한 셸 환경을 사용할 수 있었음.

이미지에 내장된 커맨드는 docker run이나 create 명령어의 맨 끝에 입력해서 컨테이너를 생성할 때 덮어쓸 수 있다. 예를 들어, 아래의 docker run 명령어로 생성되는 컨테이너는 실행될 때마다 "echo hello world!"를 실행하고 /bin/bash 커맨드가 없어서 상호 입출력이 가능한 셸이 실행되지 않아 바로 종료된다.

$ docker run -i -t ubuntu:14.04 echo hello world!

NAMES는 컨테이너의 고유한 이름임. 컨테이너를 생성할 때 --name 옵션으로 이름을 설정하지 않으면 도커 엔진이 임의로 형용사와 명사를 부작위로 조합해 이름을 설정하기 때문에 엉뚱한 이름이 설정돼있음. 그때는 docker rename '엉뚱한이름' '짓고픈이름'로 컨테이너의 이름을 변경할수 있음.

 

셸의 화면이 작아서 ps 명령어의 출력 결과가 줄바꿈되어 알아보기 힘들 때는 --format 옵션에 Go 템플릿을 입력해서 원하는 정보만 출력 가능

$ docker ps --format "table {{.ID}}\t{{.Status}}"
CONTAINERID    STATUS
xxxxx          xxxxx



3. 컨테이너 삭제

$ docker rm 컨테이너 이름

실행 중인 컨테이너 강제 삭제

$ docker rm -f mycentos

모든 컨테이너 삭제

$ docker container prune

# -q는 아이디를 출력하는 옵션
$ docker stop $(docker ps -a -q)
$ docker rm $(docker ps -a -q)