이전글
Docker 컨테이너
도커 컨테이너란 mysql, wordpress, 리눅스 배포판등의 도커 이미지를 가지고 생성한 격리 공간입니다. 이러한 컨테이너는 각각의 독립적인 자원(메모리, 저장공간, 네트워크, 디렉터리)을 할당받습니다. 도커 이미지와 컨테이너에 대한 자세한 개념은 이전글을 참조합니다.
도커 컨테이너 생성 및 실행
docker run 명령어를 사용하면 컨테이너를 생성함과 동시에 실행할 수 있습니다. 앞에서 말했지만 컨테이너는 도커 이미지를 바탕으로 생성되는데 run 명령어는 이미지가 없을 경우에 자동으로 다운로드 받은 후 실행합니다.
예를들어 Ubuntu 배포판을 컨테이너로 생성하고 싶은 경우에는 다음과 같이 사용합니다.
root@server:~# docker run -i -t ubuntu:14.04 |
cs |
-i와 -t 옵션을 사용했는데, i 옵션은 컨테이너와 상호(interactive) 입출력을 t 옵션은 tty를 활성화하여 배시 셸을 이용 가능하게 하는 옵션입니다. 명령어를 입력하고 잠시 기다리면 도커 허브로부터 이미지를 다운받고 컨테이너를 생성합니다.
root@server:~# docker run -i -t ubuntu:14.04
Unable to find image 'ubuntu:14.04' locally
14.04: Pulling from library/ubuntu
c2c80a08aa8c: Pull complete
6ace04d7a4a2: Pull complete
f03114bcfb25: Pull complete
99df43987812: Pull complete
9c646cd4d155: Pull complete
Digest: sha256:b92dc7814b2656da61a52a50020443223445fdc2caf1ea0c51fa38381d5608ad
Status: Downloaded newer image for ubuntu:14.04 |
cs |
컨테이너가 생성된 직후에는 자동으로 컨테이너 내부에 접속하게 되는데, # 앞에 사용자 이름과 해쉬값을 보고 알 수 있습니다. 컨테이너에서 기본 사용자는 root이고 호스트명은 무작위의 16진수 해쉬값입니다.
root@41030cc6b280:/# |
cs |
ls 명령어를 입력해 보면 호스트 운영체제와 격리된 파일시스템을 확인할 수 있습니다.
root@41030cc6b280:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr |
cs |
도커 컨테이너 생성만 하기
컨테이너를 생성할 때는 run명령어가 아닌 docker create 명령어를 사용할 수도 있습니다. create 명령어는 컨테이너를 생성만 하고 접속하지는 않습니다.
docker create <옵션> <--name 컨테이너명> <이미지명> |
cs |
create 명령어를 사용할때에는 도커 이미지명 또는 이미지 ID가 필요합니다. docker images 명령어로 현재 가지고 있는 이미지를 확인합니다. 현재 리눅스 배포판 이미지가 두개 존재합니다. 만약 create 명령어에 이미지명을 명시했는데 가지고 있지 않은 이미지인 경우에는 내부적으로 이미지를 다운로드한 이후 생성합니다.
root@server:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 14.04 3b853789146f 2 weeks ago 223MB
centos 7 e934aafc2206 2 weeks ago 199MB |
cs |
컨테이너를 생성합니다. create 명령어를 사용하면 무작위 16진수 해쉬값으로 된 컨테이너 ID가 출력되는데, 너무 길어서 12자리만 사용하고 docker inspect 명령어로 ID를 다시 확인 가능합니다.
root@server:~# docker create -i -t --name mycentos centos:7
8d79120cfdffc95c1f8a284fb012025125e44dc37742cf439509e7f33134e69e |
cs |
컨테이너 접근하기
docker run 명령어를 실행하면 컨테이너 생성 직후 자동으로 컨테이너에 접근하지만 이후 도커를 관리하면서 원하는 컨테이너에 접근하고 싶은 경우가 있습니다. 컨테이너에 접근할 때에는 docker attach <컨테이너명 또는 ID> 명령어를 사용합니다.
root@server:~# docker attach quirky_knuth
[root@8d79120cfdff /]# |
cs |
컨테이너에 접근하기 위해서는 컨테이너 ID 또는 컨테이너 명을 알아야 합니다. docker ps 명령어를 통해 접근하고 싶은 컨테이너 이름을 알아낼 수 있습니다. 컨테이너 ID값은 다른 컨테이너와 겹치지 않는 선에서 앞의 몇글자만 입력하여 접근할 수 있습니다.
root@server:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8d79120cfdff ubuntu:14.04 "/bin/bash" 11 minutes ago Up 10 seconds quirky_knuth |
cs |
컨테이너 빠져 나오기
컨테이너에서 빠져나오는 방법은 두 가지가 있습니다. 첫번째로는 컨테이너를 종료하면서 빠져나오는 방법입니다.
# exit 또는 Ctrl + D |
cs |
두번째로는 컨테이너는 가동되는 상태에서 접속만 종료하는 방법입니다.
# Ctrl + P 입력 후 Ctrl + Q 입력 |
cs |
첫번째 방법의 경우 배시셸을 종료함으로써 컨테이너가 정지되면서 빠져나오게 되지만, Ctrl + P, Q를 사용하면 셸에서만 빠져나오므로 컨테이너는 정지되지 않은 상태에서 접속만 종료합니다.
docker run 내부 동작
지금까지의 내용을 종합하면 docker run은 내부적으로 여러 명령어를 실행한다는 것을 알 수 있습니다.
run 명령어는 이미지가 없을때를 기준으로는 docker pull > docker create > docker start > (-i -t 를 사용한 경우에는) docker attach와 같습니다. 즉 이미지를 땡겨서 내려받고, 이미지로 컨테이너를 만들고, 컨테이너를 시작하고, 컨테이너에 접근까지 되는것입니다.
create 명령어는 이미지가 없을때 기준으로 docker pull > docker create 와 같습니다. 또한 docker attach는 직접 실행해야 합니다.
'시스템 인프라' 카테고리의 다른 글
[Docker] 컨테이너 목록 확인하기 - docker ps 명령어 (0) | 2018.06.19 |
---|---|
[ubuntu] 우분투 그놈(Gnome) 다운로드 및 설치 방법 (0) | 2018.06.18 |
[Docker] Docker 이미지 검색 및 다운로드 받기 (1) | 2018.06.17 |
[Docker] Linux 환경에 Docker 설치하기 (Ubuntu, REHL, CentOS) (0) | 2018.05.25 |
[Docker] Windows 환경에 Docker 설치하기 - Docker for Windows (0) | 2018.05.25 |