티스토리 뷰

728x90
반응형

도커 엔진

도커 이미지와 컨테이너

도커 엔진에서 사용하는 기본 단위는 이미지와 컨테이너임.

도커 이미지

이미지는 컨테이너를 생성할 때 필요한 요소이며, 가상 머신을 생성할 때 사용하는 iso 파일과 비슷한 개념이다. 이미지는 여러 개의 계층으로 된 바이너리 파일로 존재하고, 컨테이너를 생성하고 실행할 때 읽기 전용으로 사용된다. 도커 명령어로 내려받을 수 있다.

도커 컨테이너

이미지로 컨테이너를 생성하면 해당 이미지의 목적에 맞는 파일이 들어 있는 파일시스템과 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간이 생성되고, 이것이 바로 도커 컨테이너가 된다.

생성된 각 컨테이너는 각기 독립된 파일시스템을 제공받으며 호스트와 분리돼 있으므로 특정 컨테이너에서 어떤 애플리케이션을 설치하거나 삭제해도 다른 컨테이너와 호스트는 변화가 없다.



도커 컨테이너 다루기

컨테이너 생성

$ docker -v
Docker version ...

$ docker run -i -t ubuntu:14.04

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

이미지가 로컬 도커 엔진에 존재하지 않으면 도커 중앙 이미지 저장소인 도커 허브에서 자동으로 이미지를 내려받음.

root@bff498040cde:/#

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

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

컨테이너 내부에서 빠져나오는 방법은 exit, Ctrl + D. exit나 Ctrl + D는 배시 셸을 종료함으로써 컨테이너를 정지시킴과 동시에 컨테이너에서 빠져나오지만 Ctrl + P 누른상태에서 Q는 단순히 컨테이너의 셸에서만 빠져나오기 때문에 애플리케이션 개발하는 목적으로 컨테이너를 사용할 때는 이 방법을 많이씀.

$ docker pull centos:7
7: Pulling from ...
...
...

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

$ docker images

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

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

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

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

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

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

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

$ docker start mycentos
mycentos

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

여기서 이젠 Ctrl + P + Q로 나오게 되면 exit와는 다르게 컨테이너를 정지시키지 않고 컨테이너에서 빠져나옴.

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



컨테이너 목록 확인

$ 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



컨테이너 삭제

$ docker rm 컨테이너 이름

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

$ docker rm -f mycentos

모든 컨테이너 삭제

$ docker container prune

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





출처
시작하세요! 도커/쿠버네티스(용찬호 저, 위키북스)
example

728x90
반응형
댓글
반응형
250x250
글 보관함
최근에 달린 댓글
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Total
Today
Yesterday
링크