introduce docker
TRANSCRIPT
Introduce DockerMade by Yongbok Kim (ruo91)
# 001
- Bloghttps://yongbok.net/blog/
- Twitterhttps://twitter.com/yongbok_net
- Facebookhttps://facebook.com/ruo91
Language: Ko-rean
https://docs.docker.com/
2015.09.03
1. Docker 소개 1.1 Docker 설치 방법 1.2 Docker 기본 사용법
2. Dockerfile 소개 2.1 Dockerfile 작성법 2.2 미리 알고 있으면 좋은 것들
3. 실습 3.1 웹서버 구축 해보기
# 002목차
# 0031. Docker 소개
Docker 는
# 0041. Docker 소개
Docker 는
사용자가 필요로 하는
# 0051. Docker 소개
Docker 는
사용자가 필요로 하는
응용 프로그램을
# 0061. Docker 소개
Docker 는
사용자가 필요로 하는
응용 프로그램을
이미지 형태로 만들고
# 0071. Docker 소개
Docker 는
사용자가 필요로 하는
응용 프로그램을
이미지 형태로 만들고
# 0081. Docker 소개
Docker 는
사용자가 필요로 하는
응용 프로그램을
이미지 형태로 만들고
# 0091. Docker 소개
어떠한
Docker 는
사용자가 필요로 하는
응용 프로그램을
이미지 형태로 만들고
# 0101. Docker 소개
어떠한
서버 환경에서도
Docker 는
사용자가 필요로 하는
응용 프로그램을
이미지 형태로 만들고
# 0111. Docker 소개
어떠한
서버 환경에서도
동일한 환경을
Docker 는
사용자가 필요로 하는
응용 프로그램을
이미지 형태로 만들고
# 0121. Docker 소개
어떠한
서버 환경에서도
동일한 환경을
제공 해주는 도구 이다 !
이해 안되시나요 ?
# 0131. Docker 소개
이해 안되시나요 ?
좀 더 쉽게 설명 드리죠 !
# 0141. Docker 소개
현실에 빗대어 보겠습니다 .
# 0151. Docker 소개
현실에 빗대어 보겠습니다 .
* 서버 냉장고
# 0161. Docker 소개
현실에 빗대어 보겠습니다 .
* 서버 냉장고
* Docker 락앤락 ( 보관 용기 )
# 0171. Docker 소개
현실에 빗대어 보겠습니다 .
* 서버 냉장고
* Docker 락앤락 ( 보관 용기 )
* 응용프로그램 반찬 및 물 등등
# 0181. Docker 소개
현실에 빗대어 보겠습니다 .
* 서버 냉장고
* Docker 락앤락 ( 보관 용기 )
* 응용프로그램 반찬 및 물 등등
# 0191. Docker 소개
현실에 빗대어 보겠습니다 .
* 서버 냉장고
* Docker 락앤락 ( 보관 용기 )
* 응용프로그램 반찬 및 물 등등
# 0201. Docker 소개매장에서 냉장고를 구입하고보관 용기에 반찬을 넣는다 .
밥 먹을 때 꺼내 먹는다 .
현실에 빗대어 보겠습니다 .
* 서버 냉장고
* Docker 락앤락 ( 보관 용기 )
* 응용프로그램 반찬 및 물 등등
# 0211. Docker 소개매장에서 냉장고를 구입하고보관 용기에 반찬을 넣는다 .
밥 먹을 때 꺼내 먹는다 .
현실에 빗대어 보겠습니다 .
* 서버 냉장고
* Docker 락앤락 ( 보관 용기 )
* 응용프로그램 반찬 및 물 등등
# 0221. Docker 소개매장에서 냉장고를 구입하고보관 용기에 반찬을 넣는다 .
밥 먹을 때 꺼내 먹는다 .
GCE, AWS, Softlayer, 서버를구입하고 , Docker 를 사용하여
현실에 빗대어 보겠습니다 .
* 서버 냉장고
* Docker 락앤락 ( 보관 용기 )
* 응용프로그램 반찬 및 물 등등
# 0231. Docker 소개매장에서 냉장고를 구입하고보관 용기에 반찬을 넣는다 .
밥 먹을 때 꺼내 먹는다 .
GCE, AWS, Softlayer, 서버를구입하고 , Docker 를 사용하여
Redis, Nginx 를이미지 형태로 만든다 .
현실에 빗대어 보겠습니다 .
* 서버 냉장고
* Docker 락앤락 ( 보관 용기 )
* 응용프로그램 반찬 및 물 등등
# 0241. Docker 소개매장에서 냉장고를 구입하고보관 용기에 반찬을 넣는다 .
밥 먹을 때 꺼내 먹는다 .
GCE, AWS, Softlayer, 서버를구입하고 , Docker 를 사용하여
Redis, Nginx 를이미지 형태로 만든다 .
필요한 이미지를 가져 사용한다 .
그럼 흔히 알고 있는
가상화 머신과 Docker 의 차이점은요 ?
# 0251. Docker 소개
그럼 흔히 알고 있는
가상화 머신과 Docker 의 차이점은요 ?
저도 허접 해서 자세히 알진 못합니다만 ,
간단히 말씀 드리지요 .
# 0261. Docker 소개
# 0271. Docker 소개
Hypervisor Type 2
# 0281. Docker 소개
Hypervisor Type 2
# 0291. Docker 소개
1. 하드웨어 가상화2. Guest OS 생성3. 응용 프로그램 설치4. 사용
Hypervisor Type 2
# 0301. Docker 소개
1. 하드웨어 가상화2. Guest OS 생성3. 응용 프로그램 설치4. 사용
Hypervisor Type 2
# 0311. Docker 소개
1. 하드웨어 가상화2. Guest OS 생성3. 응용 프로그램 설치4. 사용
Slow
Hypervisor Type 2
# 0321. Docker 소개
1. 하드웨어 가상화2. Guest OS 생성3. 응용 프로그램 설치4. 사용
Slow
Hypervisor Type 2
# 0331. Docker 소개
Docker1. 하드웨어 가상화2. Guest OS 생성3. 응용 프로그램 설치4. 사용
Slow
Hypervisor Type 2
# 0341. Docker 소개
Docker1. 하드웨어 가상화2. Guest OS 생성3. 응용 프로그램 설치4. 사용
1. HostOS 커널 자원 할당2. 이미지 생성 또는 다운로드3. Container 실행4. 사용
Slow
Hypervisor Type 2
# 0351. Docker 소개
Docker1. 하드웨어 가상화2. Guest OS 생성3. 응용 프로그램 설치4. 사용
1. HostOS 커널 자원 할당2. 이미지 생성 또는 다운로드3. Container 실행4. 사용
Slow
Hypervisor Type 2
# 0361. Docker 소개
Docker1. 하드웨어 가상화2. Guest OS 생성3. 응용 프로그램 설치4. 사용
1. HostOS 커널 자원 할당2. 이미지 생성 또는 다운로드3. Container 실행4. 사용
Slow Fast
Hypervisor Type 2
# 0371. Docker 소개
Docker1. 하드웨어 가상화2. Guest OS 생성3. 응용 프로그램 설치4. 사용
1. HostOS 커널 자원 할당2. 이미지 생성 또는 다운로드3. Container 실행4. 사용
Slow Fast
# 0381.1 Docker 설치 방법Debian 8.0 Jessie (64-bit)[root@ruo91 ~]# apt-get update[root@ruo91 ~]# apt-get install –y curl[root@ruo91 ~]# curl -sSL https://get.docker.com/ | sh[root@ruo91 ~]# service docker start
Red Hat Enterprise Linux 7 (64-bit)[root@ruo91 ~]# yum update[root@ruo91 ~]# yum install –y curl[root@ruo91 ~]# curl -sSL https://get.docker.com/ | sh[root@ruo91 ~]# systemctl start docker
Ubuntu 15.04 Vivid (64-bit)[root@ruo91 ~]# apt-get update[root@ruo91 ~]# apt-get install -y curl[root@ruo91 ~]# curl -sSL https://get.docker.com/ | sh[root@ruo91 ~]# service docker start
CentOS 7 (64-bit)[root@ruo91 ~]# apt-get update[root@ruo91 ~]# apt-get install -y curl[root@ruo91 ~]# curl -sSL https://get.docker.com/ | sh[root@ruo91 ~]# systemctl start docker
Link: https://docs.docker.com/installation/rhelLink: https://docs.docker.com/installation/debian
Link: https://docs.docker.com/installation/ubuntulinux
Link: https://docs.docker.com/installation/centos
# 0391.2 Docker 기본 사용법Docker 설정 파일 수정
Debian, Ubuntu[root@ruo91 ~]# nano /etc/default/dockerDOCKER_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/dockerOPTIONS=’-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 이미지 빌드시 문제가 발생 할 수 있음 .
# 0401.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
# 0411.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
원리는 다음과 같습니다 .
# 0421.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
① 이미지 다운로드 요청원리는 다음과
같습니다 .
# 0431.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
① 이미지 다운로드 요청원리는 다음과
같습니다 .
# 0441.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
① 이미지 다운로드 요청원리는 다음과
같습니다 .
# 0451.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
응답 원리는 다음과
같습니다 .
# 0461.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
응답 원리는 다음과
같습니다 .
# 0471.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
응답 원리는 다음과
같습니다 .
# 0481.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
응답 원리는 다음과
같습니다 .
# 0491.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
응답
원리는 다음과 같습니다 .
# 0501.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
응답
원리는 다음과 같습니다 .
# 0511.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
응답 ④
이미지 다운로드 승인
원리는 다음과 같습니다 .
# 0521.2 Docker 기본 사용법search 명령어
여러 이미지를 찾아 볼 수 있는 명령어 입니다 .공식 저장소 https://hub.docker.com/ 에서도 찾아 볼 수 있습니다 .
* 사용법[root@ruo91 ~]# docker search [options] [image name]
ex) nginx 에 관련 된 이미지를 찾고자 하는 경우[root@ruo91 ~]# docker search nginxNAME DESCRIPTION STARS OFFICIAL AUTOMATEDNginx 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]
# 0531.2 Docker 기본 사용법images 명령어
pull 명령어로 이미지를 받아 온 것과 Build, commit 한 이미지를 확인 해보고 싶을 때 사용합니다 .
* 사용법[root@ruo91 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEMesos marathon 82ef3b457e40 2 days ago 1.741 GBMesos master 730986e18f78 2 days ago 526.6 MBMesos slave a8b46f60fee3 2 days ago 526.6 MBK8sm minion-slave 7cdf0ffadc2c 10 days ago 1.204 GBK8sm framework b5f9a5ff62bd 10 days ago 1.157 GBKube-build build-19035793d4 5862f1953764 10 days ago 1.211 GBKube-build cross 27ccc3052b35 10 days ago 1.081 GBK8sm mesos-master dd550165164b 10 days ago 525.9 MBK8sm etcd 64fd7ef70648 10 days ago 689.7 MBUbuntu 14.04 8251da35e7a7 10 days ago 188.3 MBUbuntu 15.04 23635bbeb7c5 13 days ago 131.3 MBGolang 1.4 124e2127157f 5 weeks ago 517.2 MBCentos centos6 a005304e4e74 8 weeks ago 203.1 MBCentos centos7 7322fbe74aa5 8 weeks ago 172.2 MBBusybox latest 8c2e06607696 4 months ago 2.43 MBruo91/nginx latest e247a2d686c0 4 months ago 277.9 MB
# 0541.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/bashroot@vivid:/# exit
위와 같이 실행하면 Container 가 바로 생성 되고 대화형으로 Bash 를 사용할 수 있게 됩니다 .(SSH 로 접속한 것 처럼 말이죠 .)
위에 사용 된 옵션을 살펴 보자면 아래와 같습니다 .-i : 대화형식으로 실행 하겠다는 옵션이며 , 사용자가 exit 명령을 사용하기 전까지 계속 붙어 있습니다 .-t : pseudo-TTY 즉 , 텍스트 입출력 환경을 제공 해준다고 생각하면 됩니다 .--name : Container 의 고유 이름을 지정시 사용합니다 .-h : Container 의 호스트 이름을 지정시 사용합니다 .
# 0551.2 Docker 기본 사용법ps 명령어
Container 의 상태를 확인 하고자 할 때 사용 합니다 .
* 사용법[root@ruo91 ~]# docker ps [options]
ex1) 현재 실행 중인 Container 만 확인 할 경우 .[root@ruo91 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESf4e500746420 redis "/usr/bin/supervisor 5 days ago Up 5 days 6379/tcp redis-349239e2d3d50 redis "/usr/bin/supervisor 5 days ago Up 5 days 6379/tcp redis-25ca4754b20c9 redis "/usr/bin/supervisor 5 days ago Up 5 days 6379/tcp redis-1a7a3ae4520d2 redis "/usr/bin/supervisor 5 days ago Up 5 days 6379/tcp redis-0
ex2) 모든 Container 를 확인 할 경우 .[root@ruo91 ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESe10880efe9a0 redis "/bin/bash" 5 days ago Exited (0) 5 days ago
stlmanf4e500746420 redis "/usr/bin/supervisor 5 days ago Up 5 days 6379/tcp redis-349239e2d3d50 redis "/usr/bin/supervisor 5 days ago Up 5 days 6379/tcp redis-25ca4754b20c9 redis "/usr/bin/supervisor 5 days ago Up 5 days 6379/tcp redis-1a7a3ae4520d2 redis "/usr/bin/supervisor 5 days ago Up 5 days 6379/tcp redis-0
# 0561.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-vividUbuntu-vivid
ps 명령어를 통해 확인 해보면 실행이 되어 있는 것을 확인 할 수 있습니다 .[root@ruo91 ~]# docker ps | grep vivida8f1879834e3 ubuntu:15.04 "/bin/bash" 21 minutes ago Up 46 seconds ubuntu-vivid
# 0571.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-trustyroot@vivid:/# apt-get install -y nanoroot@vivid:/# exit
# 0581.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 <[email protected]>" \ubuntu-vivid ruo91/ubuntu-vivid:nano
# 0591.2 Docker 기본 사용법diff 명령어
해당 Container 에 추가 및 변경 사항이 있을 경우 확인 하기 위해 사용합니다 .
* 사용법# docker diff [container name]
ex) "ubuntu-vivid" 라는 이름의 Container 에 특정 경로에 디렉토리를 만든 후 파일을 생성 또는 추가 하거나 변경 된 사항을 확인 .
[root@ruo91 ~]# docker start ubuntu-vivid[root@ruo91 ~]# docker attach ubuntu-vividroot@vivid:/# mkdir -p /docker-test/ruo91root@vivid:/# echo 'Hello, World!' > /docker-test/ruo91/testroot@vivid:/# exit
[root@ruo91 ~]# docker diff ubuntu-vividC /devA /docker-testA /docker-test/ruo91A /docker-test/ruo91/testC /etcC /rootA /root/.bash_history
# 0601.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": "[email protected]" } }}
* 사용법
[root@ruo91 ~]# docker loginUsername: ruo91Password:Email: [email protected]: login credentials saved in /root/.docker/config.j-sonLogin Succeeded
# 0611.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:nanoThe 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
# 0621.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:nanoThe 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
원리는 다음과 같습니다 .
# 0631.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:nanoThe 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
① 이미지 업로드 요청
원리는 다음과 같습니다 .
# 0641.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:nanoThe 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
① 이미지 업로드 요청
원리는 다음과 같습니다 .
# 0651.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:nanoThe 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
① 이미지 업로드 요청
원리는 다음과 같습니다 .
# 0661.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:nanoThe 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 응답
원리는 다음과 같습니다 .
# 0671.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:nanoThe 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 응답
# 0681.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:nanoThe 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 응답
# 0691.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:nanoThe 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 응답
# 0701.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:nanoThe 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 응답
# 0711.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:nanoThe 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 응답
# 0721.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:nanoThe 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 응답
# 0731.2 Docker 기본 사용법rm 명령어
Container 를 삭제하는 명령어 입니다 .이를 사용하기 위해서는 stop 명령어로 Container 를 중지 시켜야 합니다 .
* 사용법[root@ruo91 ~]# docker rm [Container name or Container ID]
ex) 현재 실행 중인 Container 를 중지하고 삭제 할 경우 .[root@ruo91 ~]# docker stop ubuntu-vividubuntu-vivid
[root@ruo91 ~]# docker rm ubuntu-vividubuntu-vivid
# 0741.2 Docker 기본 사용법rmi 명령어
Docker 의 이미지를 삭제하는 명령어 입니다 .이를 사용하기 위해서는 삭제하길 원하는 이미지의 Container 가 중지 되어있어야 하고 , 삭제 되어 있어야 합니다 .
* 사용법[root@ruo91 ~]# docker rmi [Repository name or Image ID]:[Tag]
ex) 'ruo91/ubuntu-vivid:nano' 이미지를 삭제 할 경우 .
해당 이미지를 먼저 확인 합니다 .[root@ruo91 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED
VIRTUAL SIZEruo91/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
# 0751.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
# 0761.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 twemproxy172.17.0.10172.17.0.11172.17.0.12172.17.0.13172.17.0.14
ex2) 실행 중인 모든 Contianer IP 출력[root@ruo91 ~]# docker inspect -f '{{ .NetworkSettings.IPAddress }}' $(docker ps | grep -v NAMES | awk '{printf $NF " "}')172.17.0.10172.17.0.11172.17.0.12172.17.0.13172.17.0.14
# 0771.2 Docker 기본 사용법info 명령어
HostOS 의 정보와 Docker 정보를 간략하게 볼 때 사용 합니다 .
* 사용법[root@ruo91 ~]# docker infoContainers: 20Images: 98Storage Driver: overlay Backing Filesystem: extfsExecution Driver: native-0.2Kernel Version: 4.1.1-1.el7.elrepo.x86_64Operating System: CentOS Linux 7 (Core)CPUs: 2Total Memory: 1.953 GiBName: ruo91ID: IP5Q:VOF4:HUFZ:M23L:M2B6:VIN4:OQNF:BDSM:VQUF:5UGN:GC65:2YQ5
# 0781.2 Docker 기본 사용법version 명령어
현재 Docker 버전을 확인 하고 싶을 때 사용합니다 .
* 사용법[root@ruo91 ~]# docker versionClient version: 1.6.2Client API version: 1.18Go version (client): go1.4.2Git commit (client): ba1f6c3/1.6.2OS/Arch (client): linux/amd64Server version: 1.6.2Server API version: 1.18Go version (server): go1.4.2Git commit (server): ba1f6c3/1.6.2OS/Arch (server): linux/amd64
# 0792. Dockerfile 소개
Dockerfile 은
# 0802. Dockerfile 소개
Dockerfile 은
Docker 이미지를
# 0812. Dockerfile 소개
Dockerfile 은
Docker 이미지를
만들기 위한
# 0822. Dockerfile 소개
Dockerfile 은
Docker 이미지를
만들기 위한
텍스트 파일이며 ,
# 0832. Dockerfile 소개
Dockerfile 은
Docker 이미지를
만들기 위한
텍스트 파일이며 ,
# 0842. Dockerfile 소개
Dockerfile 은
Docker 이미지를
만들기 위한
텍스트 파일이며 ,
# 0852. Dockerfile 소개
리눅스 터미널에서
Dockerfile 은
Docker 이미지를
만들기 위한
텍스트 파일이며 ,
# 0862. Dockerfile 소개
리눅스 터미널에서
사용 하는
Dockerfile 은
Docker 이미지를
만들기 위한
텍스트 파일이며 ,
# 0872. Dockerfile 소개
리눅스 터미널에서
사용 하는
모든 명령어들을
Dockerfile 은
Docker 이미지를
만들기 위한
텍스트 파일이며 ,
# 0882. Dockerfile 소개
리눅스 터미널에서
사용 하는
모든 명령어들을
사용 가능 하다 .
Dockerfile 은
Docker 이미지를
만들기 위한
텍스트 파일이며 ,
# 0892. Dockerfile 소개
리눅스 터미널에서
사용 하는
모든 명령어들을
사용 가능 하다 .
Dockerfile 은
Docker 이미지를
만들기 위한
텍스트 파일이며 ,
# 0902. Dockerfile 소개
리눅스 터미널에서
사용 하는
모든 명령어들을
사용 가능 하다 .
다음 장에서 작성법을 배워 봅시다 .
# 0912.1 미리 알고 있으면 좋은 것들1. 기본 파일명은 ‘ Dockerfile’ 임 .
2. 빌드시 이 파일이 존재하는 위치를 요구 함 .
3. Docker 1.5.x 버전 이상부터 -f 옵션이 추가 됨 .
4. ‘Dockerfile’ 이라는 파일명으로 만들지 않아도 해당 파일의 위치만 지정 해주면 빌드 가능 .
5. Github 에 Dockerfile 이 존재하면 URL 로 빌드 가능 .
6. 최초 빌드 후 변경 사항이 있으면 , 변경 전 부분은 캐싱 됨 .
7. 시간이 많이 걸리는 빌드의 경우 RUN 명령어를 적절히 사용 .
# 0922.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
# 0932.2 Dockerfile 작성법MAINTAINER 명령어
메인테이너 명령어는 Dockerfile 의 소유자를 지정 할 경우 사용합니다 .
팀 단위로 프로젝트를 진행 할 경우 담당자를 쉽게 찾을 수 있습니다 .
* 사용법MAINTAINER [You name]
ex) 담당자 이름 및 메일 주소MAINTAINER Yongbok Kim ([email protected])
[root@ruo91 ~]# cat /opt/docker/Dockerfile### 주석 #### 기본 이미지FROM ubuntu:15.04
# 담당자MAINTAINER Yongbok Kim([email protected])
# 0942.2 Dockerfile 작성법RUN 명령어
이 명령어는 빌드시에 사용할 명령어를 실행 할 경우 사용합니다 .
사용자가 터미널에서 직접 명령어를 실행 하는 것과 마찬가지라고 이해 하시면 됩니다 .
* 사용법RUN [command]
ex 1) 'Hello!' 문자를 출력RUN echo "Hello!"RUN echo "World!"
ex 2) 파일 다운로드RUN wget http://example.com/test.tar.gzRUN curl -LO http://example.com/test.tar.gz
[root@ruo91 ~]# cat /opt/docker/Dockerfile### 주석 #### 기본 이미지FROM ubuntu:15.04
# 담당자MAINTAINER Yongbok Kim([email protected])
# 명령어 실행RUN echo “Hello!”RUN curl -LO http://example.com/test.tar.gz
# 0952.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([email protected])
# 명령어 실행ENV DATE echo 'Now is' `date +%Y-%m-%d`RUN echo “$DATE”
# 0962.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([email protected])
# 명령어 실행ENV SRC_DIR /optWORKDIR $SRC_DIRRUN apt-get update && apt-get install -y wgetRUN wget test.com/test.tar.gz
# 0972.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([email protected])
# 명령어 실행RUN apt-get update && apt-get install -y nginx
# 서비스 포트EXPOSE 80 443
# 0982.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([email protected])
# 명령어 실행ENV SRC_DIR /optADD test.tar.gz $SRC_DIR
# 서비스 포트EXPOSE 80 443
# 0992.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([email protected])
# 명령어 실행RUN echo “Hello!”RUN curl -LO http://example.com/test.tar.gz
# 컨테이너 시작시 명령어 실행CMD ["$(which ping)", "8.8.8.8"]
# 1003. 실습
Nginx 웹서버의 이미지를 만든다고 가정 해봅시다 .
[root@ruo91 ~]# nano nginx_production# Dockerfile - Nginx
# 기본 이미지 설정 및 관리자FROM ubuntu:15.04MAINTAINER Yongbok Kim <[email protected]>
# 우분투 미러 서버 변경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/supervisorADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf
# PortEXPOSE 80
# DaemonCMD ["/usr/bin/supervisord"]
* Supervisor 파일 작성
[root@ruo91 ~]# nano supervisord.conf [supervisord]nodaemon=trueloglevel=debug
[program:nginx]command=service nginx startautorestart=falseredirect_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 웹서버 구축 해보기
# 101
Thank you!