이전글




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는 직접 실행해야 합니다.
블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

댓글을 달아 주세요! 질문 환영합니다!