introduce docker

101
Introduce Docker Made by Yongbok Kim (ruo91) # 001 - Blog https://yongbok.net/blog/ - Twitter https :// twitter.com/yongbok_net - Facebook Language: Korean https://docs.docker.com / 2015.09.0 3

Upload: yongbok-kim

Post on 15-Apr-2017

2.933 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Introduce Docker

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

Page 2: Introduce Docker

1. Docker 소개 1.1 Docker 설치 방법 1.2 Docker 기본 사용법

2. Dockerfile 소개 2.1 Dockerfile 작성법 2.2 미리 알고 있으면 좋은 것들

3. 실습 3.1 웹서버 구축 해보기

# 002목차

Page 3: Introduce Docker

# 0031. Docker 소개

Page 4: Introduce Docker

Docker 는

# 0041. Docker 소개

Page 5: Introduce Docker

Docker 는

사용자가 필요로 하는

# 0051. Docker 소개

Page 6: Introduce Docker

Docker 는

사용자가 필요로 하는

응용 프로그램을

# 0061. Docker 소개

Page 7: Introduce Docker

Docker 는

사용자가 필요로 하는

응용 프로그램을

이미지 형태로 만들고

# 0071. Docker 소개

Page 8: Introduce Docker

Docker 는

사용자가 필요로 하는

응용 프로그램을

이미지 형태로 만들고

# 0081. Docker 소개

Page 9: Introduce Docker

Docker 는

사용자가 필요로 하는

응용 프로그램을

이미지 형태로 만들고

# 0091. Docker 소개

어떠한

Page 10: Introduce Docker

Docker 는

사용자가 필요로 하는

응용 프로그램을

이미지 형태로 만들고

# 0101. Docker 소개

어떠한

서버 환경에서도

Page 11: Introduce Docker

Docker 는

사용자가 필요로 하는

응용 프로그램을

이미지 형태로 만들고

# 0111. Docker 소개

어떠한

서버 환경에서도

동일한 환경을

Page 12: Introduce Docker

Docker 는

사용자가 필요로 하는

응용 프로그램을

이미지 형태로 만들고

# 0121. Docker 소개

어떠한

서버 환경에서도

동일한 환경을

제공 해주는 도구 이다 !

Page 13: Introduce Docker

이해 안되시나요 ?

# 0131. Docker 소개

Page 14: Introduce Docker

이해 안되시나요 ?

좀 더 쉽게 설명 드리죠 !

# 0141. Docker 소개

Page 15: Introduce Docker

현실에 빗대어 보겠습니다 .

# 0151. Docker 소개

Page 16: Introduce Docker

현실에 빗대어 보겠습니다 .

* 서버 냉장고

# 0161. Docker 소개

Page 17: Introduce Docker

현실에 빗대어 보겠습니다 .

* 서버 냉장고

* Docker 락앤락 ( 보관 용기 )

# 0171. Docker 소개

Page 18: Introduce Docker

현실에 빗대어 보겠습니다 .

* 서버 냉장고

* Docker 락앤락 ( 보관 용기 )

* 응용프로그램 반찬 및 물 등등

# 0181. Docker 소개

Page 19: Introduce Docker

현실에 빗대어 보겠습니다 .

* 서버 냉장고

* Docker 락앤락 ( 보관 용기 )

* 응용프로그램 반찬 및 물 등등

# 0191. Docker 소개

Page 20: Introduce Docker

현실에 빗대어 보겠습니다 .

* 서버 냉장고

* Docker 락앤락 ( 보관 용기 )

* 응용프로그램 반찬 및 물 등등

# 0201. Docker 소개매장에서 냉장고를 구입하고보관 용기에 반찬을 넣는다 .

밥 먹을 때 꺼내 먹는다 .

Page 21: Introduce Docker

현실에 빗대어 보겠습니다 .

* 서버 냉장고

* Docker 락앤락 ( 보관 용기 )

* 응용프로그램 반찬 및 물 등등

# 0211. Docker 소개매장에서 냉장고를 구입하고보관 용기에 반찬을 넣는다 .

밥 먹을 때 꺼내 먹는다 .

Page 22: Introduce Docker

현실에 빗대어 보겠습니다 .

* 서버 냉장고

* Docker 락앤락 ( 보관 용기 )

* 응용프로그램 반찬 및 물 등등

# 0221. Docker 소개매장에서 냉장고를 구입하고보관 용기에 반찬을 넣는다 .

밥 먹을 때 꺼내 먹는다 .

GCE, AWS, Softlayer, 서버를구입하고 , Docker 를 사용하여

Page 23: Introduce Docker

현실에 빗대어 보겠습니다 .

* 서버 냉장고

* Docker 락앤락 ( 보관 용기 )

* 응용프로그램 반찬 및 물 등등

# 0231. Docker 소개매장에서 냉장고를 구입하고보관 용기에 반찬을 넣는다 .

밥 먹을 때 꺼내 먹는다 .

GCE, AWS, Softlayer, 서버를구입하고 , Docker 를 사용하여

Redis, Nginx 를이미지 형태로 만든다 .

Page 24: Introduce Docker

현실에 빗대어 보겠습니다 .

* 서버 냉장고

* Docker 락앤락 ( 보관 용기 )

* 응용프로그램 반찬 및 물 등등

# 0241. Docker 소개매장에서 냉장고를 구입하고보관 용기에 반찬을 넣는다 .

밥 먹을 때 꺼내 먹는다 .

GCE, AWS, Softlayer, 서버를구입하고 , Docker 를 사용하여

Redis, Nginx 를이미지 형태로 만든다 .

필요한 이미지를 가져 사용한다 .

Page 25: Introduce Docker

그럼 흔히 알고 있는

가상화 머신과 Docker 의 차이점은요 ?

# 0251. Docker 소개

Page 26: Introduce Docker

그럼 흔히 알고 있는

가상화 머신과 Docker 의 차이점은요 ?

저도 허접 해서 자세히 알진 못합니다만 ,

간단히 말씀 드리지요 .

# 0261. Docker 소개

Page 27: Introduce Docker

# 0271. Docker 소개

Page 28: Introduce Docker

Hypervisor Type 2

# 0281. Docker 소개

Page 29: Introduce Docker

Hypervisor Type 2

# 0291. Docker 소개

1. 하드웨어 가상화2. Guest OS 생성3. 응용 프로그램 설치4. 사용

Page 30: Introduce Docker

Hypervisor Type 2

# 0301. Docker 소개

1. 하드웨어 가상화2. Guest OS 생성3. 응용 프로그램 설치4. 사용

Page 31: Introduce Docker

Hypervisor Type 2

# 0311. Docker 소개

1. 하드웨어 가상화2. Guest OS 생성3. 응용 프로그램 설치4. 사용

Slow

Page 32: Introduce Docker

Hypervisor Type 2

# 0321. Docker 소개

1. 하드웨어 가상화2. Guest OS 생성3. 응용 프로그램 설치4. 사용

Slow

Page 33: Introduce Docker

Hypervisor Type 2

# 0331. Docker 소개

Docker1. 하드웨어 가상화2. Guest OS 생성3. 응용 프로그램 설치4. 사용

Slow

Page 34: Introduce Docker

Hypervisor Type 2

# 0341. Docker 소개

Docker1. 하드웨어 가상화2. Guest OS 생성3. 응용 프로그램 설치4. 사용

1. HostOS 커널 자원 할당2. 이미지 생성 또는 다운로드3. Container 실행4. 사용

Slow

Page 35: Introduce Docker

Hypervisor Type 2

# 0351. Docker 소개

Docker1. 하드웨어 가상화2. Guest OS 생성3. 응용 프로그램 설치4. 사용

1. HostOS 커널 자원 할당2. 이미지 생성 또는 다운로드3. Container 실행4. 사용

Slow

Page 36: Introduce Docker

Hypervisor Type 2

# 0361. Docker 소개

Docker1. 하드웨어 가상화2. Guest OS 생성3. 응용 프로그램 설치4. 사용

1. HostOS 커널 자원 할당2. 이미지 생성 또는 다운로드3. Container 실행4. 사용

Slow Fast

Page 37: Introduce Docker

Hypervisor Type 2

# 0371. Docker 소개

Docker1. 하드웨어 가상화2. Guest OS 생성3. 응용 프로그램 설치4. 사용

1. HostOS 커널 자원 할당2. 이미지 생성 또는 다운로드3. Container 실행4. 사용

Slow Fast

Page 38: Introduce Docker

# 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

Page 39: Introduce Docker

# 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 이미지 빌드시 문제가 발생 할 수 있음 .

Page 40: Introduce Docker

# 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

Page 41: Introduce Docker

# 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

원리는 다음과 같습니다 .

Page 42: Introduce Docker

# 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

① 이미지 다운로드 요청원리는 다음과

같습니다 .

Page 43: Introduce Docker

# 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

① 이미지 다운로드 요청원리는 다음과

같습니다 .

Page 44: Introduce Docker

# 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

① 이미지 다운로드 요청원리는 다음과

같습니다 .

Page 45: Introduce Docker

# 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

응답 원리는 다음과

같습니다 .

Page 46: Introduce Docker

# 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

응답 원리는 다음과

같습니다 .

Page 47: Introduce Docker

# 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

응답 원리는 다음과

같습니다 .

Page 48: Introduce Docker

# 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

응답 원리는 다음과

같습니다 .

Page 49: Introduce Docker

# 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

응답

원리는 다음과 같습니다 .

Page 50: Introduce Docker

# 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

응답

원리는 다음과 같습니다 .

Page 51: Introduce Docker

# 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

응답 ④

이미지 다운로드 승인

원리는 다음과 같습니다 .

Page 52: Introduce Docker

# 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]

Page 53: Introduce Docker

# 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

Page 54: Introduce Docker

# 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 의 호스트 이름을 지정시 사용합니다 .

Page 55: Introduce Docker

# 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

Page 56: Introduce Docker

# 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

Page 57: Introduce Docker

# 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

Page 58: Introduce Docker

# 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

Page 59: Introduce Docker

# 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

Page 60: Introduce Docker

# 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

Page 61: Introduce Docker

# 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

Page 62: Introduce Docker

# 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

원리는 다음과 같습니다 .

Page 63: Introduce Docker

# 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

① 이미지 업로드 요청

원리는 다음과 같습니다 .

Page 64: Introduce Docker

# 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

① 이미지 업로드 요청

원리는 다음과 같습니다 .

Page 65: Introduce Docker

# 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

① 이미지 업로드 요청

원리는 다음과 같습니다 .

Page 66: Introduce Docker

# 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 응답

원리는 다음과 같습니다 .

Page 67: Introduce Docker

# 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 응답

Page 68: Introduce Docker

# 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 응답

Page 69: Introduce Docker

# 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 응답

Page 70: Introduce Docker

# 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 응답

Page 71: Introduce Docker

# 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 응답

Page 72: Introduce Docker

# 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 응답

Page 73: Introduce Docker

# 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

Page 74: Introduce Docker

# 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

Page 75: Introduce Docker

# 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

Page 76: Introduce Docker

# 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

Page 77: Introduce Docker

# 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

Page 78: Introduce Docker

# 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

Page 79: Introduce Docker

# 0792. Dockerfile 소개

Page 80: Introduce Docker

Dockerfile 은

# 0802. Dockerfile 소개

Page 81: Introduce Docker

Dockerfile 은

Docker 이미지를

# 0812. Dockerfile 소개

Page 82: Introduce Docker

Dockerfile 은

Docker 이미지를

만들기 위한

# 0822. Dockerfile 소개

Page 83: Introduce Docker

Dockerfile 은

Docker 이미지를

만들기 위한

텍스트 파일이며 ,

# 0832. Dockerfile 소개

Page 84: Introduce Docker

Dockerfile 은

Docker 이미지를

만들기 위한

텍스트 파일이며 ,

# 0842. Dockerfile 소개

Page 85: Introduce Docker

Dockerfile 은

Docker 이미지를

만들기 위한

텍스트 파일이며 ,

# 0852. Dockerfile 소개

리눅스 터미널에서

Page 86: Introduce Docker

Dockerfile 은

Docker 이미지를

만들기 위한

텍스트 파일이며 ,

# 0862. Dockerfile 소개

리눅스 터미널에서

사용 하는

Page 87: Introduce Docker

Dockerfile 은

Docker 이미지를

만들기 위한

텍스트 파일이며 ,

# 0872. Dockerfile 소개

리눅스 터미널에서

사용 하는

모든 명령어들을

Page 88: Introduce Docker

Dockerfile 은

Docker 이미지를

만들기 위한

텍스트 파일이며 ,

# 0882. Dockerfile 소개

리눅스 터미널에서

사용 하는

모든 명령어들을

사용 가능 하다 .

Page 89: Introduce Docker

Dockerfile 은

Docker 이미지를

만들기 위한

텍스트 파일이며 ,

# 0892. Dockerfile 소개

리눅스 터미널에서

사용 하는

모든 명령어들을

사용 가능 하다 .

Page 90: Introduce Docker

Dockerfile 은

Docker 이미지를

만들기 위한

텍스트 파일이며 ,

# 0902. Dockerfile 소개

리눅스 터미널에서

사용 하는

모든 명령어들을

사용 가능 하다 .

다음 장에서 작성법을 배워 봅시다 .

Page 91: Introduce Docker

# 0912.1 미리 알고 있으면 좋은 것들1. 기본 파일명은 ‘ Dockerfile’ 임 .

2. 빌드시 이 파일이 존재하는 위치를 요구 함 .

3. Docker 1.5.x 버전 이상부터 -f 옵션이 추가 됨 .

4. ‘Dockerfile’ 이라는 파일명으로 만들지 않아도 해당 파일의 위치만 지정 해주면 빌드 가능 .

5. Github 에 Dockerfile 이 존재하면 URL 로 빌드 가능 .

6. 최초 빌드 후 변경 사항이 있으면 , 변경 전 부분은 캐싱 됨 .

7. 시간이 많이 걸리는 빌드의 경우 RUN 명령어를 적절히 사용 .

Page 92: Introduce Docker

# 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

Page 93: Introduce Docker

# 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])

Page 94: Introduce Docker

# 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

Page 95: Introduce Docker

# 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”

Page 96: Introduce Docker

# 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

Page 97: Introduce Docker

# 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

Page 98: Introduce Docker

# 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

Page 99: Introduce Docker

# 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"]

Page 100: Introduce Docker

# 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 웹서버 구축 해보기

Page 101: Introduce Docker

# 101

Thank you!