Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Introduce Docker
1. Introduce Docker
Made by Yongbok Kim (ruo91)
# 001
- Blog
https://yongbok.net/blog/
- Twitter
https://twitter.com/yongbok_net
- Facebook
https://facebook.com/ruo91Language: Korean https://docs.docker.com/
2015.09.03
2. 1. Docker 소개
1.1 Docker 설치 방법
1.2 Docker 기본 사용법
2. Dockerfile 소개
2.1 Dockerfile 작성법
2.2 미리 알고 있으면 좋은 것들
3. 실습
3.1 웹서버 구축 해보기
# 002
목차
18. 현실에 빗대어 보겠습니다.
* 서버
냉장고
* Docker
락앤락(보관 용기)
* 응용프로그램
반찬 및 물 등등
# 018
1. Docker 소개
19. 현실에 빗대어 보겠습니다.
* 서버
냉장고
* Docker
락앤락(보관 용기)
* 응용프로그램
반찬 및 물 등등
# 019
1. Docker 소개
20. 현실에 빗대어 보겠습니다.
* 서버
냉장고
* Docker
락앤락(보관 용기)
* 응용프로그램
반찬 및 물 등등
# 020
1. Docker 소개
매장에서 냉장고를 구입하고
보관 용기에 반찬을 넣는다.
밥 먹을 때 꺼내 먹는다.
21. 현실에 빗대어 보겠습니다.
* 서버
냉장고
* Docker
락앤락(보관 용기)
* 응용프로그램
반찬 및 물 등등
# 021
1. Docker 소개
매장에서 냉장고를 구입하고
보관 용기에 반찬을 넣는다.
밥 먹을 때 꺼내 먹는다.
22. 현실에 빗대어 보겠습니다.
* 서버
냉장고
* Docker
락앤락(보관 용기)
* 응용프로그램
반찬 및 물 등등
# 022
1. Docker 소개
매장에서 냉장고를 구입하고
보관 용기에 반찬을 넣는다.
밥 먹을 때 꺼내 먹는다.
GCE, AWS, Softlayer, 서버를
구입하고, Docker를 사용하여
23. 현실에 빗대어 보겠습니다.
* 서버
냉장고
* Docker
락앤락(보관 용기)
* 응용프로그램
반찬 및 물 등등
# 023
1. Docker 소개
매장에서 냉장고를 구입하고
보관 용기에 반찬을 넣는다.
밥 먹을 때 꺼내 먹는다.
GCE, AWS, Softlayer, 서버를
구입하고, Docker를 사용하여
Redis, Nginx를
이미지 형태로 만든다.
24. 현실에 빗대어 보겠습니다.
* 서버
냉장고
* Docker
락앤락(보관 용기)
* 응용프로그램
반찬 및 물 등등
# 024
1. Docker 소개
매장에서 냉장고를 구입하고
보관 용기에 반찬을 넣는다.
밥 먹을 때 꺼내 먹는다.
GCE, AWS, Softlayer, 서버를
구입하고, Docker를 사용하여
Redis, Nginx를
이미지 형태로 만든다.
필요한 이미지를 가져 사용한다.
25. 그럼 흔히 알고 있는
가상화 머신과 Docker의 차이점은요?
# 025
1. Docker 소개
26. 그럼 흔히 알고 있는
가상화 머신과 Docker의 차이점은요?
저도 허접 해서 자세히 알진 못합니다만,
간단히 말씀 드리지요.
# 026
1. Docker 소개
29. Hypervisor Type 2
# 029
1. Docker 소개
1. 하드웨어 가상화
2. Guest OS 생성
3. 응용 프로그램 설치
4. 사용
30. Hypervisor Type 2
# 030
1. Docker 소개
1. 하드웨어 가상화
2. Guest OS 생성
3. 응용 프로그램 설치
4. 사용
31. Hypervisor Type 2
# 031
1. Docker 소개
1. 하드웨어 가상화
2. Guest OS 생성
3. 응용 프로그램 설치
4. 사용
Slow
32. Hypervisor Type 2
# 032
1. Docker 소개
1. 하드웨어 가상화
2. Guest OS 생성
3. 응용 프로그램 설치
4. 사용
Slow
33. Hypervisor Type 2
# 033
1. Docker 소개
Docker
1. 하드웨어 가상화
2. Guest OS 생성
3. 응용 프로그램 설치
4. 사용
Slow
34. Hypervisor Type 2
# 034
1. Docker 소개
Docker
1. 하드웨어 가상화
2. Guest OS 생성
3. 응용 프로그램 설치
4. 사용
1. HostOS 커널 자원 할당
2. 이미지 생성 또는 다운로드
3. Container 실행
4. 사용
Slow
35. Hypervisor Type 2
# 035
1. Docker 소개
Docker
1. 하드웨어 가상화
2. Guest OS 생성
3. 응용 프로그램 설치
4. 사용
1. HostOS 커널 자원 할당
2. 이미지 생성 또는 다운로드
3. Container 실행
4. 사용
Slow
36. Hypervisor Type 2
# 036
1. Docker 소개
Docker
1. 하드웨어 가상화
2. Guest OS 생성
3. 응용 프로그램 설치
4. 사용
1. HostOS 커널 자원 할당
2. 이미지 생성 또는 다운로드
3. Container 실행
4. 사용
Slow
Fast
37. Hypervisor Type 2
# 037
1. Docker 소개
Docker
1. 하드웨어 가상화
2. Guest OS 생성
3. 응용 프로그램 설치
4. 사용
1. HostOS 커널 자원 할당
2. 이미지 생성 또는 다운로드
3. Container 실행
4. 사용
Slow
Fast
39. # 039
1.2 Docker 기본 사용법
Docker 설정 파일 수정
Debian, Ubuntu
[root@ruo91 ~]# nano /etc/default/docker
DOCKER_OPTS=”
-s overlay
--dns 8.8.8.8
--dns 8.8.4.4
-H tcp://127.0.0.1:4243
-H unix:///var/run/docker.sock
--dns-search google-public-dns-a.google.com”
# service docker restart
AUFS가 기본이며 커널과 충돌이 잦기 때문에,
OverlayFS를 권장 함.
만일, HostOS에 XFS 파일 시스템을 사용 중이라면
Container 이미지 빌드시 문제가 발생 할 수 있음.
따라서, EXT4 + OverlayFS가 가장 최적의 환경이라 생각함.
RHEL, CentOS
[root@ruo91 ~]# nano /etc/sysconfig/docker
OPTIONS=’
-s overlay
--dns 8.8.8.8
--dns 8.8.4.4
-H tcp://127.0.0.1:4243
-H unix:///var/run/docker.sock
--dns-search google-public-dns-a.google.com’
# systemctl restart docker
DeviceMapper가 기본이며, 개발 버전 Docker-dev를
사용 할 경우 Docker 이미지에 손상이 갈 수 있음.
Stable 버전을 사용한다면, 굳이 OverlayFS로 갈 필요 없음.
만일, HostOS에 XFS 파일 시스템을 사용 중이라면
Container 이미지 빌드시 문제가 발생 할 수 있음.
40. # 040
1.2 Docker 기본 사용법
pull 명령어
이 명령어는 Docker HUB의 저장소에서 원하는 이미지를 받아올 경우에 사용합니다.
* 사용법
[root@ruo91 ~]# docker pull [image-name]:[tag]
ex1) 예를 들어 ubuntu의 공식 기본 이미지를 모두 받고자 할 경우에는 아래와 같이 사용하면 됩니다.
[root@ruo91 ~]# docker pull ubuntu
위 처럼 사용 했을때 버전별로 모두 받아 오므로 디스크의 용량이 부족 해질 수 있습니다.
ex2) 다른 방법으로는 tag 지정하여 특정 버전만 받아 올 수 있도록 지정 할 수 있습니다.
[root@ruo91 ~]# docker pull ubuntu:15.04
41. # 041
1.2 Docker 기본 사용법
pull 명령어
이 명령어는 Docker HUB의 저장소에서 원하는 이미지를 받아올 경우에 사용합니다.
* 사용법
[root@ruo91 ~]# docker pull [image-name]:[tag]
ex1) 예를 들어 ubuntu의 공식 기본 이미지를 모두 받고자 할 경우에는 아래와 같이 사용하면 됩니다.
[root@ruo91 ~]# docker pull ubuntu
위 처럼 사용 했을때 버전별로 모두 받아 오므로 디스크의 용량이 부족 해질 수 있습니다.
ex2) 다른 방법으로는 tag 지정하여 특정 버전만 받아 올 수 있도록 지정 할 수 있습니다.
[root@ruo91 ~]# docker pull ubuntu:15.04
원리는 다음과 같습니다.
42. # 042
1.2 Docker 기본 사용법
pull 명령어
이 명령어는 Docker HUB의 저장소에서 원하는 이미지를 받아올 경우에 사용합니다.
* 사용법
[root@ruo91 ~]# docker pull [image-name]:[tag]
ex1) 예를 들어 ubuntu의 공식 기본 이미지를 모두 받고자 할 경우에는 아래와 같이 사용하면 됩니다.
[root@ruo91 ~]# docker pull ubuntu
위 처럼 사용 했을때 버전별로 모두 받아 오므로 디스크의 용량이 부족 해질 수 있습니다.
ex2) 다른 방법으로는 tag 지정하여 특정 버전만 받아 올 수 있도록 지정 할 수 있습니다.
[root@ruo91 ~]# docker pull ubuntu:15.04
Docker Client
①
이미지 다운로드 요청원리는 다음과 같습니다.
43. # 043
1.2 Docker 기본 사용법
pull 명령어
이 명령어는 Docker HUB의 저장소에서 원하는 이미지를 받아올 경우에 사용합니다.
* 사용법
[root@ruo91 ~]# docker pull [image-name]:[tag]
ex1) 예를 들어 ubuntu의 공식 기본 이미지를 모두 받고자 할 경우에는 아래와 같이 사용하면 됩니다.
[root@ruo91 ~]# docker pull ubuntu
위 처럼 사용 했을때 버전별로 모두 받아 오므로 디스크의 용량이 부족 해질 수 있습니다.
ex2) 다른 방법으로는 tag 지정하여 특정 버전만 받아 올 수 있도록 지정 할 수 있습니다.
[root@ruo91 ~]# docker pull ubuntu:15.04
Docker Client
①
이미지 다운로드 요청원리는 다음과 같습니다.
44. # 044
1.2 Docker 기본 사용법
pull 명령어
이 명령어는 Docker HUB의 저장소에서 원하는 이미지를 받아올 경우에 사용합니다.
* 사용법
[root@ruo91 ~]# docker pull [image-name]:[tag]
ex1) 예를 들어 ubuntu의 공식 기본 이미지를 모두 받고자 할 경우에는 아래와 같이 사용하면 됩니다.
[root@ruo91 ~]# docker pull ubuntu
위 처럼 사용 했을때 버전별로 모두 받아 오므로 디스크의 용량이 부족 해질 수 있습니다.
ex2) 다른 방법으로는 tag 지정하여 특정 버전만 받아 올 수 있도록 지정 할 수 있습니다.
[root@ruo91 ~]# docker pull ubuntu:15.04
Docker Client Index
①
이미지 다운로드 요청원리는 다음과 같습니다.
45. # 045
1.2 Docker 기본 사용법
pull 명령어
이 명령어는 Docker HUB의 저장소에서 원하는 이미지를 받아올 경우에 사용합니다.
* 사용법
[root@ruo91 ~]# docker pull [image-name]:[tag]
ex1) 예를 들어 ubuntu의 공식 기본 이미지를 모두 받고자 할 경우에는 아래와 같이 사용하면 됩니다.
[root@ruo91 ~]# docker pull ubuntu
위 처럼 사용 했을때 버전별로 모두 받아 오므로 디스크의 용량이 부족 해질 수 있습니다.
ex2) 다른 방법으로는 tag 지정하여 특정 버전만 받아 올 수 있도록 지정 할 수 있습니다.
[root@ruo91 ~]# docker pull ubuntu:15.04
Docker Client Index
①
이미지 다운로드 요청
②
Registry 위치 및 token 응답원리는 다음과 같습니다.
46. # 046
1.2 Docker 기본 사용법
pull 명령어
이 명령어는 Docker HUB의 저장소에서 원하는 이미지를 받아올 경우에 사용합니다.
* 사용법
[root@ruo91 ~]# docker pull [image-name]:[tag]
ex1) 예를 들어 ubuntu의 공식 기본 이미지를 모두 받고자 할 경우에는 아래와 같이 사용하면 됩니다.
[root@ruo91 ~]# docker pull ubuntu
위 처럼 사용 했을때 버전별로 모두 받아 오므로 디스크의 용량이 부족 해질 수 있습니다.
ex2) 다른 방법으로는 tag 지정하여 특정 버전만 받아 올 수 있도록 지정 할 수 있습니다.
[root@ruo91 ~]# docker pull ubuntu:15.04
Docker Client Index
①
이미지 다운로드 요청
②
Registry 위치 및 token 응답원리는 다음과 같습니다.
47. # 047
1.2 Docker 기본 사용법
pull 명령어
이 명령어는 Docker HUB의 저장소에서 원하는 이미지를 받아올 경우에 사용합니다.
* 사용법
[root@ruo91 ~]# docker pull [image-name]:[tag]
ex1) 예를 들어 ubuntu의 공식 기본 이미지를 모두 받고자 할 경우에는 아래와 같이 사용하면 됩니다.
[root@ruo91 ~]# docker pull ubuntu
위 처럼 사용 했을때 버전별로 모두 받아 오므로 디스크의 용량이 부족 해질 수 있습니다.
ex2) 다른 방법으로는 tag 지정하여 특정 버전만 받아 올 수 있도록 지정 할 수 있습니다.
[root@ruo91 ~]# docker pull ubuntu:15.04
Docker Client
Registry
Index
①
이미지 다운로드 요청
②
Registry 위치 및 token 응답원리는 다음과 같습니다.
48. # 048
1.2 Docker 기본 사용법
pull 명령어
이 명령어는 Docker HUB의 저장소에서 원하는 이미지를 받아올 경우에 사용합니다.
* 사용법
[root@ruo91 ~]# docker pull [image-name]:[tag]
ex1) 예를 들어 ubuntu의 공식 기본 이미지를 모두 받고자 할 경우에는 아래와 같이 사용하면 됩니다.
[root@ruo91 ~]# docker pull ubuntu
위 처럼 사용 했을때 버전별로 모두 받아 오므로 디스크의 용량이 부족 해질 수 있습니다.
ex2) 다른 방법으로는 tag 지정하여 특정 버전만 받아 올 수 있도록 지정 할 수 있습니다.
[root@ruo91 ~]# docker pull ubuntu:15.04
Docker Client
Registry
Index
①
이미지 다운로드 요청
②
Registry 위치 및 token 응답원리는 다음과 같습니다.
49. # 049
1.2 Docker 기본 사용법
pull 명령어
이 명령어는 Docker HUB의 저장소에서 원하는 이미지를 받아올 경우에 사용합니다.
* 사용법
[root@ruo91 ~]# docker pull [image-name]:[tag]
ex1) 예를 들어 ubuntu의 공식 기본 이미지를 모두 받고자 할 경우에는 아래와 같이 사용하면 됩니다.
[root@ruo91 ~]# docker pull ubuntu
위 처럼 사용 했을때 버전별로 모두 받아 오므로 디스크의 용량이 부족 해질 수 있습니다.
ex2) 다른 방법으로는 tag 지정하여 특정 버전만 받아 올 수 있도록 지정 할 수 있습니다.
[root@ruo91 ~]# docker pull ubuntu:15.04
Docker Client
Registry
Index
①
이미지 다운로드 요청
②
Registry 위치 및 token 응답
③
Index token 응답
원리는 다음과 같습니다.
50. # 050
1.2 Docker 기본 사용법
pull 명령어
이 명령어는 Docker HUB의 저장소에서 원하는 이미지를 받아올 경우에 사용합니다.
* 사용법
[root@ruo91 ~]# docker pull [image-name]:[tag]
ex1) 예를 들어 ubuntu의 공식 기본 이미지를 모두 받고자 할 경우에는 아래와 같이 사용하면 됩니다.
[root@ruo91 ~]# docker pull ubuntu
위 처럼 사용 했을때 버전별로 모두 받아 오므로 디스크의 용량이 부족 해질 수 있습니다.
ex2) 다른 방법으로는 tag 지정하여 특정 버전만 받아 올 수 있도록 지정 할 수 있습니다.
[root@ruo91 ~]# docker pull ubuntu:15.04
Docker Client
Registry
Index
①
이미지 다운로드 요청
②
Registry 위치 및 token 응답
③
Index token 응답
원리는 다음과 같습니다.
51. # 051
1.2 Docker 기본 사용법
pull 명령어
이 명령어는 Docker HUB의 저장소에서 원하는 이미지를 받아올 경우에 사용합니다.
* 사용법
[root@ruo91 ~]# docker pull [image-name]:[tag]
ex1) 예를 들어 ubuntu의 공식 기본 이미지를 모두 받고자 할 경우에는 아래와 같이 사용하면 됩니다.
[root@ruo91 ~]# docker pull ubuntu
위 처럼 사용 했을때 버전별로 모두 받아 오므로 디스크의 용량이 부족 해질 수 있습니다.
ex2) 다른 방법으로는 tag 지정하여 특정 버전만 받아 올 수 있도록 지정 할 수 있습니다.
[root@ruo91 ~]# docker pull ubuntu:15.04
Docker Client
Registry
Index
①
이미지 다운로드 요청
②
Registry 위치 및 token 응답
③
Index token 응답
④
이미지 다운로드 승인
원리는 다음과 같습니다.
52. # 052
1.2 Docker 기본 사용법
search 명령어
여러 이미지를 찾아 볼 수 있는 명령어 입니다.
공식 저장소 https://hub.docker.com/ 에서도 찾아 볼 수 있습니다.
* 사용법
[root@ruo91 ~]# docker search [options] [image name]
ex) nginx에 관련 된 이미지를 찾고자 하는 경우
[root@ruo91 ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
Nginx Official build of Nginx. 1220 [OK]
jwilder/nginx-proxy Automated Nginx reverse... 310 [OK]
richarvey/nginx-php-fpm Container running Nginx... 61 [OK]
maxexcloo/nginx-php Docker framework conta... 43 [OK]
marvambass/nginx-registry-proxy Docker Registry Reverse... 21 [OK]
million12/nginx-php Nginx + PHP-FPM 5.5, 5... 16 [OK]
h3nrik/nginx-ldap NGINX web server with L... 8 [OK]
maxexcloo/nginx Docker framework contai... 6 [OK]
zenithar/nano-nginx Nano NGiNX Container, c... 5 [OK]
bitnami/nginx Bitnami nginx Docker Image 5 [OK]
devries/nginx A standard ubuntu nginx in... 4 [OK]
simplyintricate/nginx-php Automated weekly recurrin... 2 [OK]
53. # 053
1.2 Docker 기본 사용법
images 명령어
pull 명령어로 이미지를 받아 온 것과 Build, commit 한 이미지를 확인 해보고 싶을 때 사용합니다.
* 사용법
[root@ruo91 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
Mesos marathon 82ef3b457e40 2 days ago 1.741 GB
Mesos master 730986e18f78 2 days ago 526.6 MB
Mesos slave a8b46f60fee3 2 days ago 526.6 MB
K8sm minion-slave 7cdf0ffadc2c 10 days ago 1.204 GB
K8sm framework b5f9a5ff62bd 10 days ago 1.157 GB
Kube-build build-19035793d4 5862f1953764 10 days ago 1.211 GB
Kube-build cross 27ccc3052b35 10 days ago 1.081 GB
K8sm mesos-master dd550165164b 10 days ago 525.9 MB
K8sm etcd 64fd7ef70648 10 days ago 689.7 MB
Ubuntu 14.04 8251da35e7a7 10 days ago 188.3 MB
Ubuntu 15.04 23635bbeb7c5 13 days ago 131.3 MB
Golang 1.4 124e2127157f 5 weeks ago 517.2 MB
Centos centos6 a005304e4e74 8 weeks ago 203.1 MB
Centos centos7 7322fbe74aa5 8 weeks ago 172.2 MB
Busybox latest 8c2e06607696 4 months ago 2.43 MB
ruo91/nginx latest e247a2d686c0 4 months ago 277.9 MB
54. # 054
1.2 Docker 기본 사용법
run 명령어
받아온 이미지를 Container 형태로 생성 하는 명령어 입니다.
* 사용법
[root@ruo91 ~]# docker run [options] [image name]:[tag]
ex1) 생성할 Container의 이름을 'ubuntu-vivid'라 정하고, 호스트 이름은 'vivid',
이미지는 ubuntu:15.04 이미지를 사용하며, 대화형으로 bash를 사용할 수 있도록 할 경우.
[root@ruo91 ~]# docker run -it --name "ubuntu-vivid" -h "vivid" ubuntu:15.04 /bin/bash
root@vivid:/# exit
위와 같이 실행하면 Container가 바로 생성 되고 대화형으로 Bash를 사용할 수 있게 됩니다.
(SSH로 접속한 것 처럼 말이죠.)
위에 사용 된 옵션을 살펴 보자면 아래와 같습니다.
-i : 대화형식으로 실행 하겠다는 옵션이며, 사용자가 exit 명령을 사용하기 전까지 계속 붙어 있습니다.
-t : pseudo-TTY 즉, 텍스트 입출력 환경을 제공 해준다고 생각하면 됩니다.
--name : Container의 고유 이름을 지정시 사용합니다.
-h : Container의 호스트 이름을 지정시 사용합니다.
55. # 055
1.2 Docker 기본 사용법
ps 명령어
Container의 상태를 확인 하고자 할 때 사용 합니다.
* 사용법
[root@ruo91 ~]# docker ps [options]
ex1) 현재 실행 중인 Container만 확인 할 경우.
[root@ruo91 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f4e500746420 redis "/usr/bin/supervisor 5 days ago Up 5 days 6379/tcp redis-3
49239e2d3d50 redis "/usr/bin/supervisor 5 days ago Up 5 days 6379/tcp redis-2
5ca4754b20c9 redis "/usr/bin/supervisor 5 days ago Up 5 days 6379/tcp redis-1
a7a3ae4520d2 redis "/usr/bin/supervisor 5 days ago Up 5 days 6379/tcp redis-0
ex2) 모든 Container를 확인 할 경우.
[root@ruo91 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e10880efe9a0 redis "/bin/bash" 5 days ago Exited (0) 5 days ago stlman
f4e500746420 redis "/usr/bin/supervisor 5 days ago Up 5 days 6379/tcp redis-3
49239e2d3d50 redis "/usr/bin/supervisor 5 days ago Up 5 days 6379/tcp redis-2
5ca4754b20c9 redis "/usr/bin/supervisor 5 days ago Up 5 days 6379/tcp redis-1
a7a3ae4520d2 redis "/usr/bin/supervisor 5 days ago Up 5 days 6379/tcp redis-0
56. # 056
1.2 Docker 기본 사용법
start 명령어
run 명령어에서 실행한 Container에서 exit 명령을 통해 쉘을 나올 경우 Container는 stop 된 상태가 됩니다.
이 명령어는 stop 상태의 Container를 다시 실행 될 수 있도록 할때 사용하는 명령어 입니다.
* 사용법
[root@ruo91 ~]# docker start [container name]
ex) 'ubuntu-vivid'이라는 이름의 Container를 실행 합니다.
[root@ruo91 ~]# docker start ubuntu-vivid
Ubuntu-vivid
ps 명령어를 통해 확인 해보면 실행이 되어 있는 것을 확인 할 수 있습니다.
[root@ruo91 ~]# docker ps | grep vivid
a8f1879834e3 ubuntu:15.04 "/bin/bash" 21 minutes ago Up 46 seconds ubuntu-vivid
57. # 057
1.2 Docker 기본 사용법
attach 명령어
실행 중인 Container에 접속하기 위해 사용하는 명령어 입니다.
(이 명령어의 경우 반드시 Container가 실행 되어 있어야 사용 가능 합니다.)
* 사용법
[root@ruo91 ~]# docker attach [container name or container id]
ex) 현재 실행 중인 'ubuntu-vivid'이라는 이름의 Container에 접속 하고자 할 경우, 아래와 같이 입력 합니다.
(아무 반응 없을 경우 Enter를 1~2번 누르면 됩니다.)
[root@ruo91 ~]# docker attach ubuntu-trusty
root@vivid:/# apt-get install -y nano
root@vivid:/# exit
58. # 058
1.2 Docker 기본 사용법
commit 명령어
실행한 Container에서 변경 사항에 대한 것을 적용 및 이미지를 생성 하기 위한 명령어 입니다.
* 사용법
[root@ruo91 ~]# docker commit [options] [container name] [repository[:tag]]
ex) "ubuntu-vivid"라는 이름의 Container에 변경 사항을 반영하고,
이미지 이름을 저장소 이름인 "ruo91/ubuntu-vivid:nano"로 지정.
[root@ruo91 ~]# docker commit
-m "add nano editer"
-a "Yongbok Kim <ruo91@yongbok.net>"
ubuntu-vivid ruo91/ubuntu-vivid:nano
59. # 059
1.2 Docker 기본 사용법
diff 명령어
해당 Container에 추가 및 변경 사항이 있을 경우 확인 하기 위해 사용합니다.
* 사용법
# docker diff [container name]
ex) "ubuntu-vivid"라는 이름의 Container에 특정 경로에 디렉토리를 만든 후 파일을 생성 또는 추가 하거나 변경 된 사항을 확인.
[root@ruo91 ~]# docker start ubuntu-vivid
[root@ruo91 ~]# docker attach ubuntu-vivid
root@vivid:/# mkdir -p /docker-test/ruo91
root@vivid:/# echo 'Hello, World!' > /docker-test/ruo91/test
root@vivid:/# exit
[root@ruo91 ~]# docker diff ubuntu-vivid
C /dev
A /docker-test
A /docker-test/ruo91
A /docker-test/ruo91/test
C /etc
C /root
A /root/.bash_history
60. # 060
1.2 Docker 기본 사용법
login 명령어
변경 사항이 적용 된 Container를 저장소로 업로드시 계정 등록 명령어 입니다.
이것을 사용하려면 https://hub.docker.com/에서 가입 해야 합니다.
Github의 저장소 계정을 가지고 있다면, 연동해서 사용할 수 있으므로 Github 계정으로 가입을 추천 합니다.
가입을 하였으면 아래 명령어를 통해 사용자ID, 비밀번호, 이메일을 입력 후 로그인 성공이라는 메세지가 나와야 정상 등록 된 것입니다.
이후 해당 사용자 홈 디렉토리 아래 '.docker/config.json'라는 파일이 생성 됩니다.
[root@ruo91 ~]# cat $HOME/.docker/config.json
{
"auths": {
"https://index.docker.io/v1/": {
"auth": "cnVvOTE6MTIzNDU2Nzg5ISFAQA==",
“email": "ruo91@yongbok.net"
}
}
}
* 사용법
[root@ruo91 ~]# docker login
Username: ruo91
Password:
Email: ruo91@yongbok.net
WARNING: login credentials saved in /root/.docker/config.json
Login Succeeded
61. # 061
1.2 Docker 기본 사용법
push 명령어
commit 한 Container를 Docker HUB의 저장소로 업로드 하는 명령어 입니다.
* 사용법
[root@ruo91 ~]# docker push [image name]
ex) 'ruo91/ubuntu-vivid:nano'라는 이름의 이미지를 Docker HUB 저장소로 업로드 해보도록 하겠습니다.
[root@ruo91 ~]# docker push ruo91/ubuntu-vivid:nano
The push refers to a repository [docker.io/ruo91/ubuntu-vivid] (len: 1)
bf2492c55514: Image successfully pushed
23635bbeb7c5: Image successfully pushed
865d57395879: Image successfully pushed
73d159958fc6: Image successfully pushed
56fedc896e71: Image successfully pushed
nano: digest: sha256:538a3db673 size: 9260
62. # 062
1.2 Docker 기본 사용법
push 명령어
commit 한 Container를 Docker HUB의 저장소로 업로드 하는 명령어 입니다.
* 사용법
[root@ruo91 ~]# docker push [image name]
ex) 'ruo91/ubuntu-vivid:nano'라는 이름의 이미지를 Docker HUB 저장소로 업로드 해보도록 하겠습니다.
[root@ruo91 ~]# docker push ruo91/ubuntu-vivid:nano
The push refers to a repository [docker.io/ruo91/ubuntu-vivid] (len: 1)
bf2492c55514: Image successfully pushed
23635bbeb7c5: Image successfully pushed
865d57395879: Image successfully pushed
73d159958fc6: Image successfully pushed
56fedc896e71: Image successfully pushed
nano: digest: sha256:538a3db673 size: 9260
원리는 다음과 같습니다.
63. # 063
1.2 Docker 기본 사용법
push 명령어
commit 한 Container를 Docker HUB의 저장소로 업로드 하는 명령어 입니다.
* 사용법
[root@ruo91 ~]# docker push [image name]
ex) 'ruo91/ubuntu-vivid:nano'라는 이름의 이미지를 Docker HUB 저장소로 업로드 해보도록 하겠습니다.
[root@ruo91 ~]# docker push ruo91/ubuntu-vivid:nano
The push refers to a repository [docker.io/ruo91/ubuntu-vivid] (len: 1)
bf2492c55514: Image successfully pushed
23635bbeb7c5: Image successfully pushed
865d57395879: Image successfully pushed
73d159958fc6: Image successfully pushed
56fedc896e71: Image successfully pushed
nano: digest: sha256:538a3db673 size: 9260
Docker Client
①
이미지 업로드 요청
원리는 다음과 같습니다.
64. # 064
1.2 Docker 기본 사용법
push 명령어
commit 한 Container를 Docker HUB의 저장소로 업로드 하는 명령어 입니다.
* 사용법
[root@ruo91 ~]# docker push [image name]
ex) 'ruo91/ubuntu-vivid:nano'라는 이름의 이미지를 Docker HUB 저장소로 업로드 해보도록 하겠습니다.
[root@ruo91 ~]# docker push ruo91/ubuntu-vivid:nano
The push refers to a repository [docker.io/ruo91/ubuntu-vivid] (len: 1)
bf2492c55514: Image successfully pushed
23635bbeb7c5: Image successfully pushed
865d57395879: Image successfully pushed
73d159958fc6: Image successfully pushed
56fedc896e71: Image successfully pushed
nano: digest: sha256:538a3db673 size: 9260
Docker Client
①
이미지 업로드 요청
원리는 다음과 같습니다.
65. # 065
1.2 Docker 기본 사용법
push 명령어
commit 한 Container를 Docker HUB의 저장소로 업로드 하는 명령어 입니다.
* 사용법
[root@ruo91 ~]# docker push [image name]
ex) 'ruo91/ubuntu-vivid:nano'라는 이름의 이미지를 Docker HUB 저장소로 업로드 해보도록 하겠습니다.
[root@ruo91 ~]# docker push ruo91/ubuntu-vivid:nano
The push refers to a repository [docker.io/ruo91/ubuntu-vivid] (len: 1)
bf2492c55514: Image successfully pushed
23635bbeb7c5: Image successfully pushed
865d57395879: Image successfully pushed
73d159958fc6: Image successfully pushed
56fedc896e71: Image successfully pushed
nano: digest: sha256:538a3db673 size: 9260
Docker Client Index
①
이미지 업로드 요청
원리는 다음과 같습니다.
66. # 066
1.2 Docker 기본 사용법
push 명령어
commit 한 Container를 Docker HUB의 저장소로 업로드 하는 명령어 입니다.
* 사용법
[root@ruo91 ~]# docker push [image name]
ex) 'ruo91/ubuntu-vivid:nano'라는 이름의 이미지를 Docker HUB 저장소로 업로드 해보도록 하겠습니다.
[root@ruo91 ~]# docker push ruo91/ubuntu-vivid:nano
The push refers to a repository [docker.io/ruo91/ubuntu-vivid] (len: 1)
bf2492c55514: Image successfully pushed
23635bbeb7c5: Image successfully pushed
865d57395879: Image successfully pushed
73d159958fc6: Image successfully pushed
56fedc896e71: Image successfully pushed
nano: digest: sha256:538a3db673 size: 9260
Docker Client Index
①
이미지 업로드 요청
②
Registry 위치 및 임시 token 응답
원리는 다음과 같습니다.
67. # 067
1.2 Docker 기본 사용법
push 명령어
commit 한 Container를 Docker HUB의 저장소로 업로드 하는 명령어 입니다.
* 사용법
[root@ruo91 ~]# docker push [image name]
ex) 'ruo91/ubuntu-vivid:nano'라는 이름의 이미지를 Docker HUB 저장소로 업로드 해보도록 하겠습니다.
[root@ruo91 ~]# docker push ruo91/ubuntu-vivid:nano
The push refers to a repository [docker.io/ruo91/ubuntu-vivid] (len: 1)
bf2492c55514: Image successfully pushed
23635bbeb7c5: Image successfully pushed
865d57395879: Image successfully pushed
73d159958fc6: Image successfully pushed
56fedc896e71: Image successfully pushed
nano: digest: sha256:538a3db673 size: 9260
Docker Client Index
①
이미지 업로드 요청
원리는 다음과 같습니다.
②
Registry 위치 및 임시 token 응답
68. # 068
1.2 Docker 기본 사용법
push 명령어
commit 한 Container를 Docker HUB의 저장소로 업로드 하는 명령어 입니다.
* 사용법
[root@ruo91 ~]# docker push [image name]
ex) 'ruo91/ubuntu-vivid:nano'라는 이름의 이미지를 Docker HUB 저장소로 업로드 해보도록 하겠습니다.
[root@ruo91 ~]# docker push ruo91/ubuntu-vivid:nano
The push refers to a repository [docker.io/ruo91/ubuntu-vivid] (len: 1)
bf2492c55514: Image successfully pushed
23635bbeb7c5: Image successfully pushed
865d57395879: Image successfully pushed
73d159958fc6: Image successfully pushed
56fedc896e71: Image successfully pushed
nano: digest: sha256:538a3db673 size: 9260
Docker Client
Registry
Index
①
이미지 업로드 요청
원리는 다음과 같습니다.
②
Registry 위치 및 임시 token 응답
69. # 069
1.2 Docker 기본 사용법
push 명령어
commit 한 Container를 Docker HUB의 저장소로 업로드 하는 명령어 입니다.
* 사용법
[root@ruo91 ~]# docker push [image name]
ex) 'ruo91/ubuntu-vivid:nano'라는 이름의 이미지를 Docker HUB 저장소로 업로드 해보도록 하겠습니다.
[root@ruo91 ~]# docker push ruo91/ubuntu-vivid:nano
The push refers to a repository [docker.io/ruo91/ubuntu-vivid] (len: 1)
bf2492c55514: Image successfully pushed
23635bbeb7c5: Image successfully pushed
865d57395879: Image successfully pushed
73d159958fc6: Image successfully pushed
56fedc896e71: Image successfully pushed
nano: digest: sha256:538a3db673 size: 9260
Docker Client
Registry
Index
①
이미지 업로드 요청
③
token 검증
원리는 다음과 같습니다.
②
Registry 위치 및 임시 token 응답
70. # 070
1.2 Docker 기본 사용법
push 명령어
commit 한 Container를 Docker HUB의 저장소로 업로드 하는 명령어 입니다.
* 사용법
[root@ruo91 ~]# docker push [image name]
ex) 'ruo91/ubuntu-vivid:nano'라는 이름의 이미지를 Docker HUB 저장소로 업로드 해보도록 하겠습니다.
[root@ruo91 ~]# docker push ruo91/ubuntu-vivid:nano
The push refers to a repository [docker.io/ruo91/ubuntu-vivid] (len: 1)
bf2492c55514: Image successfully pushed
23635bbeb7c5: Image successfully pushed
865d57395879: Image successfully pushed
73d159958fc6: Image successfully pushed
56fedc896e71: Image successfully pushed
nano: digest: sha256:538a3db673 size: 9260
Docker Client
Registry
Index
①
이미지 업로드 요청
③
token 검증
원리는 다음과 같습니다.
②
Registry 위치 및 임시 token 응답
71. # 071
1.2 Docker 기본 사용법
push 명령어
commit 한 Container를 Docker HUB의 저장소로 업로드 하는 명령어 입니다.
* 사용법
[root@ruo91 ~]# docker push [image name]
ex) 'ruo91/ubuntu-vivid:nano'라는 이름의 이미지를 Docker HUB 저장소로 업로드 해보도록 하겠습니다.
[root@ruo91 ~]# docker push ruo91/ubuntu-vivid:nano
The push refers to a repository [docker.io/ruo91/ubuntu-vivid] (len: 1)
bf2492c55514: Image successfully pushed
23635bbeb7c5: Image successfully pushed
865d57395879: Image successfully pushed
73d159958fc6: Image successfully pushed
56fedc896e71: Image successfully pushed
nano: digest: sha256:538a3db673 size: 9260
Docker Client
Registry
Index
①
이미지 업로드 요청
③
token 검증
원리는 다음과 같습니다.
②
Registry 위치 및 임시 token 응답
72. # 072
1.2 Docker 기본 사용법
push 명령어
commit 한 Container를 Docker HUB의 저장소로 업로드 하는 명령어 입니다.
* 사용법
[root@ruo91 ~]# docker push [image name]
ex) 'ruo91/ubuntu-vivid:nano'라는 이름의 이미지를 Docker HUB 저장소로 업로드 해보도록 하겠습니다.
[root@ruo91 ~]# docker push ruo91/ubuntu-vivid:nano
The push refers to a repository [docker.io/ruo91/ubuntu-vivid] (len: 1)
bf2492c55514: Image successfully pushed
23635bbeb7c5: Image successfully pushed
865d57395879: Image successfully pushed
73d159958fc6: Image successfully pushed
56fedc896e71: Image successfully pushed
nano: digest: sha256:538a3db673 size: 9260
Docker Client
Registry
Index
①
이미지 업로드 요청
④
Registry 이미지 업로드
③
token 검증
원리는 다음과 같습니다.
②
Registry 위치 및 임시 token 응답
73. # 073
1.2 Docker 기본 사용법
rm 명령어
Container를 삭제하는 명령어 입니다.
이를 사용하기 위해서는 stop 명령어로 Container를 중지 시켜야 합니다.
* 사용법
[root@ruo91 ~]# docker rm [Container name or Container ID]
ex) 현재 실행 중인 Container를 중지하고 삭제 할 경우.
[root@ruo91 ~]# docker stop ubuntu-vivid
ubuntu-vivid
[root@ruo91 ~]# docker rm ubuntu-vivid
ubuntu-vivid
74. # 074
1.2 Docker 기본 사용법
rmi 명령어
Docker의 이미지를 삭제하는 명령어 입니다.
이를 사용하기 위해서는 삭제하길 원하는 이미지의 Container가 중지 되어있어야 하고, 삭제 되어 있어야 합니다.
* 사용법
[root@ruo91 ~]# docker rmi [Repository name or Image ID]:[Tag]
ex) 'ruo91/ubuntu-vivid:nano' 이미지를 삭제 할 경우.
해당 이미지를 먼저 확인 합니다.
[root@ruo91 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED
VIRTUAL SIZE
ruo91/ubuntu-vivid nano bf2492c55514 29 minutes ago 153.1 MB
이후 Repository아래에 표시 된 이름 또는 Image ID를 입력하여 삭제를 진행 합니다.
[root@ruo91 ~]# docker rmi ruo91/ubuntu-trusty:nano
또는
[root@ruo91 ~]# docker rmi bf2492c55514
75. # 075
1.2 Docker 기본 사용법
build 명령어
Docker의 이미지를 생성 하기 위한 명령어 입니다.
빌드시 Dockerfile이 필요 하므로, 작성 하는 방법은 슬라이드 # 092 번을 참고 하시기 바랍니다.
* 사용법
[root@ruo91 ~]# docker build [options] [path or URL]
ex) '/opt/docker/Dockerfile'를 통해 빌드 할 경우.
[root@ruo91 ~]# docker build -t ubuntu:nginx -f /opt/docker/Dockerfile /opt/docker
또는 GitHUB에서 빌드 할 경우.
[root@ruo91 ~]# docker build -t ruo91:nginx https://github.com/ruo91/docker-nginx.git
76. # 076
1.2 Docker 기본 사용법
inspect 명령어
실행 중인 Container의 정보를 확인 할 수 있는 명령어 입니다.
* 사용법
[root@ruo91 ~]# docker inspect [options] [container name]
ex1) 특정 Container의 IP를 출력
[root@ruo91 ~]# docker inspect -f '{{ .NetworkSettings.IPAddress }}' nginx redis mariadb hhvm twemproxy
172.17.0.10
172.17.0.11
172.17.0.12
172.17.0.13
172.17.0.14
ex2) 실행 중인 모든 Contianer IP 출력
[root@ruo91 ~]# docker inspect -f '{{ .NetworkSettings.IPAddress }}' $(docker ps | grep -v NAMES | awk '{printf $NF " "}')
172.17.0.10
172.17.0.11
172.17.0.12
172.17.0.13
172.17.0.14
77. # 077
1.2 Docker 기본 사용법
info 명령어
HostOS의 정보와 Docker 정보를 간략하게 볼 때 사용 합니다.
* 사용법
[root@ruo91 ~]# docker info
Containers: 20
Images: 98
Storage Driver: overlay
Backing Filesystem: extfs
Execution Driver: native-0.2
Kernel Version: 4.1.1-1.el7.elrepo.x86_64
Operating System: CentOS Linux 7 (Core)
CPUs: 2
Total Memory: 1.953 GiB
Name: ruo91
ID: IP5Q:VOF4:HUFZ:M23L:M2B6:VIN4:OQNF:BDSM:VQUF:5UGN:GC65:2YQ5
78. # 078
1.2 Docker 기본 사용법
version 명령어
현재 Docker 버전을 확인 하고 싶을 때 사용합니다.
* 사용법
[root@ruo91 ~]# docker version
Client version: 1.6.2
Client API version: 1.18
Go version (client): go1.4.2
Git commit (client): ba1f6c3/1.6.2
OS/Arch (client): linux/amd64
Server version: 1.6.2
Server API version: 1.18
Go version (server): go1.4.2
Git commit (server): ba1f6c3/1.6.2
OS/Arch (server): linux/amd64
91. # 091
2.1 미리 알고 있으면 좋은 것들
1. 기본 파일명은 ‘Dockerfile’임.
2. 빌드시 이 파일이 존재하는 위치를 요구 함.
3. Docker 1.5.x 버전 이상부터 -f 옵션이 추가 됨.
4. ‘Dockerfile’이라는 파일명으로 만들지 않아도 해당 파일의 위치만 지정 해주면 빌드 가능.
5. Github에 Dockerfile이 존재하면 URL로 빌드 가능.
6. 최초 빌드 후 변경 사항이 있으면, 변경 전 부분은 캐싱 됨.
7. 시간이 많이 걸리는 빌드의 경우 RUN 명령어를 적절히 사용.
92. # 092
2.2 Dockerfile 작성법
FROM 명령어
Container가 사용할 OS를 지정할 경우 사용합니다.
이 명령어는 반드시 선언이 되어야 작동하며, Docker HUB 서버로 부터 해당 이미지를 받아오기 때문에,
수 작업으로 docker pull 명령어를 통해 이미지를 미리 받지 않아도 됩니다.
(참 편리한 녀석이죠.)
* 사용법
FROM [base-images-name]:[tag]
Dockerfile을 만들고 작성합니다.
[root@ruo91 ~]# mkdir /opt/docker
[root@ruo91 ~]# nano /opt/docker/Dockerfile
ex 1) Ubuntu 15.04를 사용할때
FROM ubuntu:15.04
ex 2) CentOS 6을 사용할때
FROM centos:centos6
[root@ruo91 ~]# cat /opt/docker/Dockerfile
### 주석 ###
# 기본 이미지
FROM ubuntu:15.04
93. # 093
2.2 Dockerfile 작성법
MAINTAINER 명령어
메인테이너 명령어는 Dockerfile의 소유자를 지정 할 경우 사용합니다.
팀 단위로 프로젝트를 진행 할 경우 담당자를 쉽게 찾을 수 있습니다.
* 사용법
MAINTAINER [You name]
ex) 담당자 이름 및 메일 주소
MAINTAINER Yongbok Kim (ruo91@yongbok.net)
[root@ruo91 ~]# cat /opt/docker/Dockerfile
### 주석 ###
# 기본 이미지
FROM ubuntu:15.04
# 담당자
MAINTAINER Yongbok Kim(ruo91@yongbok.net)
94. # 094
2.2 Dockerfile 작성법
RUN 명령어
이 명령어는 빌드시에 사용할 명령어를 실행 할 경우 사용합니다.
사용자가 터미널에서 직접 명령어를 실행 하는 것과 마찬가지라고 이해 하시면 됩니다.
* 사용법
RUN [command]
ex 1) 'Hello!' 문자를 출력
RUN echo "Hello!"
RUN echo "World!"
ex 2) 파일 다운로드
RUN wget http://example.com/test.tar.gz
RUN curl -LO http://example.com/test.tar.gz
[root@ruo91 ~]# cat /opt/docker/Dockerfile
### 주석 ###
# 기본 이미지
FROM ubuntu:15.04
# 담당자
MAINTAINER Yongbok Kim(ruo91@yongbok.net)
# 명령어 실행
RUN echo “Hello!”
RUN curl -LO http://example.com/test.tar.gz
95. # 095
2.2 Dockerfile 작성법
ENV 명령어
쉘 스크립트에서 변수를 지정 할 때와 같은 명령어 입니다.
* 사용법
ENV [key] [value]
ENV [key]=[vaule]
ex) 현재 날짜를 변수로 설정
ENV DATE echo 'Now is' `date +%Y-%m-%d`
또는
ENV DATE=echo 'Now is' `date +%Y-%m-%d`
[root@ruo91 ~]# cat /opt/docker/Dockerfile
### 주석 ###
# 기본 이미지
FROM ubuntu:15.04
# 담당자
MAINTAINER Yongbok Kim(ruo91@yongbok.net)
# 명령어 실행
ENV DATE echo 'Now is' `date +%Y-%m-%d`
RUN echo “$DATE”
96. # 096
2.2 Dockerfile 작성법
WORKDIR 명령어
Container안에서 명령이 실행 될 때 기본적으로 위치할 경로를 설정 할 때 사용합니다.
만일, WORKDIR이 '/opt'이라면 외부 파일을 다운로드 받을 때 '/opt' 디렉토리로 저장이 됩니다.
* 사용법
WORKDIR [/path/to/directory]
ex) 기본 경로
WORKDIR /opt
[root@ruo91 ~]# cat /opt/docker/Dockerfile
### 주석 ###
# 기본 이미지
FROM ubuntu:15.04
# 담당자
MAINTAINER Yongbok Kim(ruo91@yongbok.net)
# 명령어 실행
ENV SRC_DIR /opt
WORKDIR $SRC_DIR
RUN apt-get update && apt-get install -y wget
RUN wget test.com/test.tar.gz
97. # 097
2.2 Dockerfile 작성법
EXPOSE 명령어
Container에서 사용할 포트를 지정 할 때 사용합니다.
Container 와 Container 사이에 통신을 주고 받거나 HostOS에서 통신할 경우에 사용 됩니다.
굳이 이것을 사용하지 않아도 통신은 잘 됩니다만, docker ps 명령어로 실행 중인 Container의 정보를
확인시 해당 Container가 서비스 포트를 어떤 것을 사용하고 있는지를 한눈에 확인 할 수 있기 때문에, 설정 하시면 좋습니다.
* 사용법
EXPOSE [port number] [port number 2] ........
ex) HTTP, HTTPS 서비스 포트 사용
EXPOSE 80 443
[root@ruo91 ~]# cat /opt/docker/Dockerfile
### 주석 ###
# 기본 이미지
FROM ubuntu:15.04
# 담당자
MAINTAINER Yongbok Kim(ruo91@yongbok.net)
# 명령어 실행
RUN apt-get update && apt-get install -y nginx
# 서비스 포트
EXPOSE 80 443
98. # 098
2.2 Dockerfile 작성법
ADD 명령어
HostOS의 파일 또는 디렉토리를 Container에 추가 할 때 사용 합니다.
tar.gz 파일과 같은 압축 파일을 추가 하면 사용자가 지정한 해당 디렉토리에 압축이 풀립니다.
* 사용법
ADD [file or directory] [container path]
ex) 설정 파일 복사
ADD test.conf /opt/test.conf
ex) 압축 파일 풀기
ADD test.tar.gz /opt
[root@ruo91 ~]# cat /opt/docker/Dockerfile
### 주석 ###
# 기본 이미지
FROM ubuntu:15.04
# 담당자
MAINTAINER Yongbok Kim(ruo91@yongbok.net)
# 명령어 실행
ENV SRC_DIR /opt
ADD test.tar.gz $SRC_DIR
# 서비스 포트
EXPOSE 80 443
99. # 099
2.2 Dockerfile 작성법
CMD 명령어
최종적으로 빌드 후 이미지가 생성이 되고, 그 이미지를 통해 Container를 실행 했을 때,
실행 할 명령어를 명시 할 경우 사용합니다.
* 사용법
CMD [command arg arg arg ........]
CMD ["command", "arg", "arg", "arg" ........]
ex) Container 실행시 ping 명령어 실행
CMD ["$(which ping)", "8.8.8.8"]
[root@ruo91 ~]# cat /opt/docker/Dockerfile
### 주석 ###
# 기본 이미지
FROM ubuntu:15.04
# 담당자
MAINTAINER Yongbok Kim(ruo91@yongbok.net)
# 명령어 실행
RUN echo “Hello!”
RUN curl -LO http://example.com/test.tar.gz
# 컨테이너 시작시 명령어 실행
CMD ["$(which ping)", "8.8.8.8"]
100. # 100
3. 실습
Nginx 웹서버의 이미지를 만든다고 가정 해봅시다.
[root@ruo91 ~]# nano nginx_production
# Dockerfile - Nginx
# 기본 이미지 설정 및 관리자
FROM ubuntu:15.04
MAINTAINER Yongbok Kim <ruo91@yongbok.net>
# 우분투 미러 서버 변경
RUN sed -i 's/archive.ubuntu.com/ftp.kaist.ac.kr/g' /etc/apt/sources.list
# Nginx 설치
RUN apt-get update && apt-get install –y supervisor nginx
# Supervisor 설정
RUN mkdir -p /var/log/supervisor
ADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf
# Port
EXPOSE 80
# Daemon
CMD ["/usr/bin/supervisord"]
* Supervisor 파일 작성
[root@ruo91 ~]# nano supervisord.conf
[supervisord]
nodaemon=true
loglevel=debug
[program:nginx]
command=service nginx start
autorestart=false
redirect_stderr=true
* 이미지 빌드
[root@ruo91 ~]# docker build -t nginx -f nginx_production $(pwd)
* Nginx 컨테이너 실행
[root@ruo91 ~]# docker run -d --name="nginx" -h "nginx" -p 80:80 nginx
3.1 웹서버 구축 해보기