디지털 양피지/Docker2017. 6. 27. 11:09

* 이미지 실행


#docker run 


* 컨테이너 실행 프로세스 이해


#docker run centos cat /etc/os-release 명령 실행시

 - 이미지 검색

  . 로컬 시스템에서 이미지 검색

  . 레지스트리 이미지 다운로드

- Run 명령 실행

  . 

- -d 옵션으로 background로 동작한다. 포그라운드는 거의 실행하지 않는다.

- -i (interactive), -t(tty) 를 사용하여 포그라운드로 실행한다. (-ti)


* 실행

docker run: 새로운 컨테이너 실행

docker start : 기존 컨테이너 실행 (stop 된 컨테이너가 있어야 한다. 컨테이넌의 이름이나 아이디로 실행 가능)



*레이어

 - 이미지는 연결된 여러 이미지로 구성된다.

 - AUFS라는 레이어 파일 시스템을 이용

 - 레이이는 읽기 전용이며 이미지 다운로드시 기존 레이어를 재활용하며 변경 부분만 다운로드->네트워크 대역폭, 디스크 저장 크기, 이미지 처리 시간 단축

 - 


* 컨테이너

- export 를 통해 컨테이너의 이미지의 레이어를 하나로 만들 수 있다.

- import 를 통해 이미지를 만든다.

- history로 확인해보면 레이어가 하나가 된 것을 확인할 수 있다.

 . 컨테이너는 이미지를 인스턴스로 실행한 것.

 . 읽기 전용 이미지 상단에 읽기/쓰기 파일 시스템을 추가 + 네트워크 설정 + 리소스 설정 ...컨테이너 실행 명령

 . 이미지를 사용하여 컨테이너 실행 : docker run

 . 특정 이미지의 레이어 목록 보기: docker history

- docker commit을 통해 변경된 부분을 반영한다.

- 기존의 이미지를 실행하면 컨테이너가 실행되고 rw 부분에 변경된 부분이 저장된다.

- commit 이 되면 변경된 부분이 read-only 로 바뀌고 layer가 된다.


#docker rm -v $(docker ps -q -f status=exited) 


* image id가 같을 수 있다. 앞에 부분만 표시되는 것으로 전체 길이가 아니다.

 . --digests가 실제로 식별자이다.



* Commit

- 이미지를 실행하면 rw 영역이 생긴다.

- docker 를 실행하고 디렉토리를 만들어보자


- 수정된 부분을 컨테이너를 통해 image로 만들 수 있다.

#docker commit {source container id} { target name: tag }

 - running 중에도 할 수있으나 가급적이면 shutdown 하고 실행하는 것이 좋다.

 - 


* 런타임 모드 - detached 와 foreground


컨테이너를 실행할 때 이를 백그라운드와 포그라운드로 모드로 실행할 수 있다.

- 백그라운드 모드: detached

 . docker run 명령에 -d 옵션을 사용

 . 컨테이너를 시작시킨 루트 프로세스(pid = 1) 가 종료되면 컨테이너도 종료

 . 컨테이너 표준 출력 결과 보기 : docker log

- 포그라운드 모드

 . 컨테이너 실행 시 기본 모드

 . 일반적으로 -t와 -i 옵션을 사용 


- 1번을 죽이기 실으면...죽지 않는 명령을 한다.

 . #docker run -d image tail -f /dev/null


- docker attach (실행 중인 컨테이너에 붙을 수만 있다)

  . shell 모드로 실행 되어 있을때 attach 로 붙어서 나가면 pid 1번이 종료되어 죽는다.

  . 이럴때는 exit로 빠져나가지 않고 ctrl+p 또는 ctrn+q 로 종료하고 나오면 죽지 않는다.


- docker exec (다른 명령을 실행할 때 사용한다. shell을 실행할 때는 -ti 옵션 필요)


* PID와 UTS 네임스페이스

- 프로세스 격리를 깰 수 있다.

- 다른 컨테이너나 호스트와 프로세스를 같이 관리하고 싶을 경우 사용

- 아래와 같이 공유 할 수 있다.

--pid=host => host 와 pid 공유

--pid=container ==> 특정 container와 공유



- uts 네임스페이스


* 컨테이너 이미지를 인터렉티브하게 실행하기

#docker run -it centos /bin/bash 

역시 최소한의 package만 설치되어 있다.

- 필요한 툴을 설치

- commit

 : -a 는 작성자(auth) 옵션이다.


* 컨테이너로 웹 서버 실행하기

- 컨테이너 라이즈 앱


- container를 stateless 하게 사용하기 위해서 설정 파일 또는 변경되는 부분들을 밖으로 빼주는 것이 좋다.

- web server의 html page를 밖으로 빼주자.


#docker run -d -p 80:80 -p 443:443 --name=MyWebServer -v /var/www/:/var/www testrun /usr/sbin/httpd -DFOREGROUND

-d 

Detached: 백그라운드로 컨테이너를 실행하는 옵션 

 -p 80:80

 -p 443:443

 포트게시: 컨테이너 포트를 호스트 포트에 게시

호스트포트:컨테이너포트(host port가 없으면 random 이다) 

 --name=MyWebServer

컨테이너 이름: 컨테이너에 이름을 할당하는 것이 좋다. 

 -v /var/www/:/var/www/ 

Bind mount volume: 호스트 디렉터리를 컨테이너 디렉터리에 마운트 하는 옵션

호스트_디렉터리:컨테이너_디렉터리

 testrun 

이미지: 베이스 이미지 이름 

 /usr/bin/httpd -DFOREGROUND

명령: httpd 데몬을 -DFOREGROUND 옵션으로 실행 



* attach

- /bin/bash 로 실행 했을 때는 Ctrl+P 와 Ctrl+Q로 빠져나온다.

- attach를 통하여 다시 접속할 수 있다.

* 변경이력 추적

 - container에 home 폴더에 아래와 같이 3개의 파일을 추가했다. 


 - diff 명령을 사용하여 변경 이력을 볼 수 있다.

 : C 는 변경을 나타내며 A는 추가를 나타낸다.

 * Commands


'디지털 양피지 > Docker' 카테고리의 다른 글

4. Dockerfile 실습  (0) 2017.06.28
3. 이미지 태그 관리와 Dockerfile  (0) 2017.06.27
3. Docker Private Registry 구성  (0) 2017.06.27
3.Docker 보안  (0) 2017.06.27
Docker 정리  (0) 2017.06.26
Posted by 빨간 양말