* 이미지 실행
#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 |