SlideShare a Scribd company logo
1 of 101
Download to read offline
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
1. Docker 소개
1.1 Docker 설치 방법
1.2 Docker 기본 사용법
2. Dockerfile 소개
2.1 Dockerfile 작성법
2.2 미리 알고 있으면 좋은 것들
3. 실습
3.1 웹서버 구축 해보기
# 002
목차
# 003
1. Docker 소개
Docker는
# 004
1. Docker 소개
Docker는
사용자가 필요로 하는
# 005
1. Docker 소개
Docker는
사용자가 필요로 하는
응용 프로그램을
# 006
1. Docker 소개
Docker는
사용자가 필요로 하는
응용 프로그램을
이미지 형태로 만들고
# 007
1. Docker 소개
Docker는
사용자가 필요로 하는
응용 프로그램을
이미지 형태로 만들고
# 008
1. Docker 소개
Docker는
사용자가 필요로 하는
응용 프로그램을
이미지 형태로 만들고
# 009
1. Docker 소개
어떠한
Docker는
사용자가 필요로 하는
응용 프로그램을
이미지 형태로 만들고
# 010
1. Docker 소개
어떠한
서버 환경에서도
Docker는
사용자가 필요로 하는
응용 프로그램을
이미지 형태로 만들고
# 011
1. Docker 소개
어떠한
서버 환경에서도
동일한 환경을
Docker는
사용자가 필요로 하는
응용 프로그램을
이미지 형태로 만들고
# 012
1. Docker 소개
어떠한
서버 환경에서도
동일한 환경을
제공 해주는 도구 이다!
이해 안되시나요?
# 013
1. Docker 소개
이해 안되시나요?
좀 더 쉽게 설명 드리죠!
# 014
1. Docker 소개
현실에 빗대어 보겠습니다.
# 015
1. Docker 소개
현실에 빗대어 보겠습니다.
* 서버
냉장고
# 016
1. Docker 소개
현실에 빗대어 보겠습니다.
* 서버
냉장고
* Docker
락앤락(보관 용기)
# 017
1. Docker 소개
현실에 빗대어 보겠습니다.
* 서버
냉장고
* Docker
락앤락(보관 용기)
* 응용프로그램
반찬 및 물 등등
# 018
1. Docker 소개
현실에 빗대어 보겠습니다.
* 서버
냉장고
* Docker
락앤락(보관 용기)
* 응용프로그램
반찬 및 물 등등
# 019
1. Docker 소개
현실에 빗대어 보겠습니다.
* 서버
냉장고
* Docker
락앤락(보관 용기)
* 응용프로그램
반찬 및 물 등등
# 020
1. Docker 소개
매장에서 냉장고를 구입하고
보관 용기에 반찬을 넣는다.
밥 먹을 때 꺼내 먹는다.
현실에 빗대어 보겠습니다.
* 서버
냉장고
* Docker
락앤락(보관 용기)
* 응용프로그램
반찬 및 물 등등
# 021
1. Docker 소개
매장에서 냉장고를 구입하고
보관 용기에 반찬을 넣는다.
밥 먹을 때 꺼내 먹는다.
현실에 빗대어 보겠습니다.
* 서버
냉장고
* Docker
락앤락(보관 용기)
* 응용프로그램
반찬 및 물 등등
# 022
1. Docker 소개
매장에서 냉장고를 구입하고
보관 용기에 반찬을 넣는다.
밥 먹을 때 꺼내 먹는다.
GCE, AWS, Softlayer, 서버를
구입하고, Docker를 사용하여
현실에 빗대어 보겠습니다.
* 서버
냉장고
* Docker
락앤락(보관 용기)
* 응용프로그램
반찬 및 물 등등
# 023
1. Docker 소개
매장에서 냉장고를 구입하고
보관 용기에 반찬을 넣는다.
밥 먹을 때 꺼내 먹는다.
GCE, AWS, Softlayer, 서버를
구입하고, Docker를 사용하여
Redis, Nginx를
이미지 형태로 만든다.
현실에 빗대어 보겠습니다.
* 서버
냉장고
* Docker
락앤락(보관 용기)
* 응용프로그램
반찬 및 물 등등
# 024
1. Docker 소개
매장에서 냉장고를 구입하고
보관 용기에 반찬을 넣는다.
밥 먹을 때 꺼내 먹는다.
GCE, AWS, Softlayer, 서버를
구입하고, Docker를 사용하여
Redis, Nginx를
이미지 형태로 만든다.
필요한 이미지를 가져 사용한다.
그럼 흔히 알고 있는
가상화 머신과 Docker의 차이점은요?
# 025
1. Docker 소개
그럼 흔히 알고 있는
가상화 머신과 Docker의 차이점은요?
저도 허접 해서 자세히 알진 못합니다만,
간단히 말씀 드리지요.
# 026
1. Docker 소개
# 027
1. Docker 소개
Hypervisor Type 2
# 028
1. Docker 소개
Hypervisor Type 2
# 029
1. Docker 소개
1. 하드웨어 가상화
2. Guest OS 생성
3. 응용 프로그램 설치
4. 사용
Hypervisor Type 2
# 030
1. Docker 소개
1. 하드웨어 가상화
2. Guest OS 생성
3. 응용 프로그램 설치
4. 사용
Hypervisor Type 2
# 031
1. Docker 소개
1. 하드웨어 가상화
2. Guest OS 생성
3. 응용 프로그램 설치
4. 사용
Slow
Hypervisor Type 2
# 032
1. Docker 소개
1. 하드웨어 가상화
2. Guest OS 생성
3. 응용 프로그램 설치
4. 사용
Slow
Hypervisor Type 2
# 033
1. Docker 소개
Docker
1. 하드웨어 가상화
2. Guest OS 생성
3. 응용 프로그램 설치
4. 사용
Slow
Hypervisor Type 2
# 034
1. Docker 소개
Docker
1. 하드웨어 가상화
2. Guest OS 생성
3. 응용 프로그램 설치
4. 사용
1. HostOS 커널 자원 할당
2. 이미지 생성 또는 다운로드
3. Container 실행
4. 사용
Slow
Hypervisor Type 2
# 035
1. Docker 소개
Docker
1. 하드웨어 가상화
2. Guest OS 생성
3. 응용 프로그램 설치
4. 사용
1. HostOS 커널 자원 할당
2. 이미지 생성 또는 다운로드
3. Container 실행
4. 사용
Slow
Hypervisor Type 2
# 036
1. Docker 소개
Docker
1. 하드웨어 가상화
2. Guest OS 생성
3. 응용 프로그램 설치
4. 사용
1. HostOS 커널 자원 할당
2. 이미지 생성 또는 다운로드
3. Container 실행
4. 사용
Slow
Fast
Hypervisor Type 2
# 037
1. Docker 소개
Docker
1. 하드웨어 가상화
2. Guest OS 생성
3. 응용 프로그램 설치
4. 사용
1. HostOS 커널 자원 할당
2. 이미지 생성 또는 다운로드
3. Container 실행
4. 사용
Slow
Fast
# 038
1.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
# 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 이미지 빌드시 문제가 발생 할 수 있음.
# 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
# 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
원리는 다음과 같습니다.
# 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
①
이미지 다운로드 요청원리는 다음과 같습니다.
# 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
①
이미지 다운로드 요청원리는 다음과 같습니다.
# 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
①
이미지 다운로드 요청원리는 다음과 같습니다.
# 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 응답원리는 다음과 같습니다.
# 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 응답원리는 다음과 같습니다.
# 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 응답원리는 다음과 같습니다.
# 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 응답원리는 다음과 같습니다.
# 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 응답
원리는 다음과 같습니다.
# 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 응답
원리는 다음과 같습니다.
# 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 응답
④
이미지 다운로드 승인
원리는 다음과 같습니다.
# 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]
# 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
# 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의 호스트 이름을 지정시 사용합니다.
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
원리는 다음과 같습니다.
# 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
①
이미지 업로드 요청
원리는 다음과 같습니다.
# 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
①
이미지 업로드 요청
원리는 다음과 같습니다.
# 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
①
이미지 업로드 요청
원리는 다음과 같습니다.
# 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 응답
원리는 다음과 같습니다.
# 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 응답
# 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 응답
# 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 응답
# 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 응답
# 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 응답
# 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 응답
# 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
# 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
# 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
# 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
# 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
# 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
# 079
2. Dockerfile 소개
Dockerfile은
# 080
2. Dockerfile 소개
Dockerfile은
Docker 이미지를
# 081
2. Dockerfile 소개
Dockerfile은
Docker 이미지를
만들기 위한
# 082
2. Dockerfile 소개
Dockerfile은
Docker 이미지를
만들기 위한
텍스트 파일이며,
# 083
2. Dockerfile 소개
Dockerfile은
Docker 이미지를
만들기 위한
텍스트 파일이며,
# 084
2. Dockerfile 소개
Dockerfile은
Docker 이미지를
만들기 위한
텍스트 파일이며,
# 085
2. Dockerfile 소개
리눅스 터미널에서
Dockerfile은
Docker 이미지를
만들기 위한
텍스트 파일이며,
# 086
2. Dockerfile 소개
리눅스 터미널에서
사용 하는
Dockerfile은
Docker 이미지를
만들기 위한
텍스트 파일이며,
# 087
2. Dockerfile 소개
리눅스 터미널에서
사용 하는
모든 명령어들을
Dockerfile은
Docker 이미지를
만들기 위한
텍스트 파일이며,
# 088
2. Dockerfile 소개
리눅스 터미널에서
사용 하는
모든 명령어들을
사용 가능 하다.
Dockerfile은
Docker 이미지를
만들기 위한
텍스트 파일이며,
# 089
2. Dockerfile 소개
리눅스 터미널에서
사용 하는
모든 명령어들을
사용 가능 하다.
Dockerfile은
Docker 이미지를
만들기 위한
텍스트 파일이며,
# 090
2. Dockerfile 소개
리눅스 터미널에서
사용 하는
모든 명령어들을
사용 가능 하다.
다음 장에서 작성법을 배워 봅시다.
# 091
2.1 미리 알고 있으면 좋은 것들
1. 기본 파일명은 ‘Dockerfile’임.
2. 빌드시 이 파일이 존재하는 위치를 요구 함.
3. Docker 1.5.x 버전 이상부터 -f 옵션이 추가 됨.
4. ‘Dockerfile’이라는 파일명으로 만들지 않아도 해당 파일의 위치만 지정 해주면 빌드 가능.
5. Github에 Dockerfile이 존재하면 URL로 빌드 가능.
6. 최초 빌드 후 변경 사항이 있으면, 변경 전 부분은 캐싱 됨.
7. 시간이 많이 걸리는 빌드의 경우 RUN 명령어를 적절히 사용.
# 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
# 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)
# 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
# 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”
# 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
# 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
# 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
# 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
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 웹서버 구축 해보기
# 101
Thank you!

More Related Content

What's hot

[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기Chanwoong Kim
 
Docker (Compose) 활용 - 개발 환경 구성하기
Docker (Compose) 활용 - 개발 환경 구성하기Docker (Compose) 활용 - 개발 환경 구성하기
Docker (Compose) 활용 - 개발 환경 구성하기raccoony
 
마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트)
마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트) 마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트)
마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트) Amazon Web Services Korea
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기Brian Hong
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기SeungYong Oh
 
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)Brian Hong
 
Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018
 Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018 Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018
Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018Amazon Web Services Korea
 
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)Seongyun Byeon
 
IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021
IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021
IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법pyrasis
 
Red Hat Ansible 적용 사례
Red Hat Ansible 적용 사례Red Hat Ansible 적용 사례
Red Hat Ansible 적용 사례Opennaru, inc.
 
Oracle DB를 AWS로 이관하는 방법들 - 서호석 클라우드 사업부/컨설팅팀 이사, 영우디지탈 :: AWS Summit Seoul 2021
Oracle DB를 AWS로 이관하는 방법들 - 서호석 클라우드 사업부/컨설팅팀 이사, 영우디지탈 :: AWS Summit Seoul 2021Oracle DB를 AWS로 이관하는 방법들 - 서호석 클라우드 사업부/컨설팅팀 이사, 영우디지탈 :: AWS Summit Seoul 2021
Oracle DB를 AWS로 이관하는 방법들 - 서호석 클라우드 사업부/컨설팅팀 이사, 영우디지탈 :: AWS Summit Seoul 2021Amazon Web Services Korea
 
Docker 사내교육 자료
Docker 사내교육 자료Docker 사내교육 자료
Docker 사내교육 자료Juneyoung Oh
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해Terry Cho
 
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인VMware Tanzu Korea
 
Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기Dronix
 
AWS Lambda를 기반으로한 실시간 빅테이터 처리하기
AWS Lambda를 기반으로한 실시간 빅테이터 처리하기AWS Lambda를 기반으로한 실시간 빅테이터 처리하기
AWS Lambda를 기반으로한 실시간 빅테이터 처리하기Amazon Web Services Korea
 
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20Amazon Web Services Korea
 
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020Ji-Woong Choi
 
Massive service basic
Massive service basicMassive service basic
Massive service basicDaeMyung Kang
 

What's hot (20)

[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
 
Docker (Compose) 활용 - 개발 환경 구성하기
Docker (Compose) 활용 - 개발 환경 구성하기Docker (Compose) 활용 - 개발 환경 구성하기
Docker (Compose) 활용 - 개발 환경 구성하기
 
마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트)
마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트) 마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트)
마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트)
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
 
Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018
 Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018 Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018
Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018
 
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
 
IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021
IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021
IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021
 
Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법
 
Red Hat Ansible 적용 사례
Red Hat Ansible 적용 사례Red Hat Ansible 적용 사례
Red Hat Ansible 적용 사례
 
Oracle DB를 AWS로 이관하는 방법들 - 서호석 클라우드 사업부/컨설팅팀 이사, 영우디지탈 :: AWS Summit Seoul 2021
Oracle DB를 AWS로 이관하는 방법들 - 서호석 클라우드 사업부/컨설팅팀 이사, 영우디지탈 :: AWS Summit Seoul 2021Oracle DB를 AWS로 이관하는 방법들 - 서호석 클라우드 사업부/컨설팅팀 이사, 영우디지탈 :: AWS Summit Seoul 2021
Oracle DB를 AWS로 이관하는 방법들 - 서호석 클라우드 사업부/컨설팅팀 이사, 영우디지탈 :: AWS Summit Seoul 2021
 
Docker 사내교육 자료
Docker 사내교육 자료Docker 사내교육 자료
Docker 사내교육 자료
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
 
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
 
Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기
 
AWS Lambda를 기반으로한 실시간 빅테이터 처리하기
AWS Lambda를 기반으로한 실시간 빅테이터 처리하기AWS Lambda를 기반으로한 실시간 빅테이터 처리하기
AWS Lambda를 기반으로한 실시간 빅테이터 처리하기
 
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
 
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
 
Massive service basic
Massive service basicMassive service basic
Massive service basic
 

Viewers also liked

[221] docker orchestration
[221] docker orchestration[221] docker orchestration
[221] docker orchestrationNAVER D2
 
Docker at Deview 2013
Docker at Deview 2013Docker at Deview 2013
Docker at Deview 2013Jude Kim
 
도커 학습과 Boot2Docker
도커 학습과 Boot2Docker도커 학습과 Boot2Docker
도커 학습과 Boot2Dockerpyrasis
 
Docker 간단 개념 / Docker 를 이용한 MSA 기반의 Spring Boot 프로젝트 - DSmentoring 정다운
Docker 간단 개념 / Docker 를 이용한 MSA 기반의 Spring Boot 프로젝트 - DSmentoring 정다운Docker 간단 개념 / Docker 를 이용한 MSA 기반의 Spring Boot 프로젝트 - DSmentoring 정다운
Docker 간단 개념 / Docker 를 이용한 MSA 기반의 Spring Boot 프로젝트 - DSmentoring 정다운다운 정
 
Docker 활용법: dumpdocker
Docker 활용법: dumpdockerDocker 활용법: dumpdocker
Docker 활용법: dumpdockerJaehwa Park
 
[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래NAVER D2
 
Docker.소개.30 m
Docker.소개.30 mDocker.소개.30 m
Docker.소개.30 mWonchang Song
 
Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1Steve Shim
 
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편negabaro
 
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례NAVER LABS
 
Docker registry swift_junojunho
Docker registry swift_junojunhoDocker registry swift_junojunho
Docker registry swift_junojunhoJunho Kim
 
docker_quick_start
docker_quick_startdocker_quick_start
docker_quick_startSukjin Yun
 
boot2docker 사용시 컨테이너에서 생성한 데이터를 유지하기
boot2docker 사용시 컨테이너에서 생성한 데이터를 유지하기boot2docker 사용시 컨테이너에서 생성한 데이터를 유지하기
boot2docker 사용시 컨테이너에서 생성한 데이터를 유지하기창훈 정
 
Docker registry swift
Docker registry swiftDocker registry swift
Docker registry swiftJunho Kim
 

Viewers also liked (20)

[221] docker orchestration
[221] docker orchestration[221] docker orchestration
[221] docker orchestration
 
Docker Container
Docker ContainerDocker Container
Docker Container
 
Docker at Deview 2013
Docker at Deview 2013Docker at Deview 2013
Docker at Deview 2013
 
도커 학습과 Boot2Docker
도커 학습과 Boot2Docker도커 학습과 Boot2Docker
도커 학습과 Boot2Docker
 
Docker 간단 개념 / Docker 를 이용한 MSA 기반의 Spring Boot 프로젝트 - DSmentoring 정다운
Docker 간단 개념 / Docker 를 이용한 MSA 기반의 Spring Boot 프로젝트 - DSmentoring 정다운Docker 간단 개념 / Docker 를 이용한 MSA 기반의 Spring Boot 프로젝트 - DSmentoring 정다운
Docker 간단 개념 / Docker 를 이용한 MSA 기반의 Spring Boot 프로젝트 - DSmentoring 정다운
 
Docker 활용법: dumpdocker
Docker 활용법: dumpdockerDocker 활용법: dumpdocker
Docker 활용법: dumpdocker
 
DevOps with Docker
DevOps with DockerDevOps with Docker
DevOps with Docker
 
[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래
 
Docker.소개.30 m
Docker.소개.30 mDocker.소개.30 m
Docker.소개.30 m
 
Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1
 
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
 
Docker osc 0508
Docker osc 0508Docker osc 0508
Docker osc 0508
 
AWS + Docker in Vingle
AWS + Docker in VingleAWS + Docker in Vingle
AWS + Docker in Vingle
 
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
 
정책가이드북
정책가이드북 정책가이드북
정책가이드북
 
Docker registry swift_junojunho
Docker registry swift_junojunhoDocker registry swift_junojunho
Docker registry swift_junojunho
 
docker_quick_start
docker_quick_startdocker_quick_start
docker_quick_start
 
boot2docker 사용시 컨테이너에서 생성한 데이터를 유지하기
boot2docker 사용시 컨테이너에서 생성한 데이터를 유지하기boot2docker 사용시 컨테이너에서 생성한 데이터를 유지하기
boot2docker 사용시 컨테이너에서 생성한 데이터를 유지하기
 
RZDESK-Docker hackday
RZDESK-Docker hackdayRZDESK-Docker hackday
RZDESK-Docker hackday
 
Docker registry swift
Docker registry swiftDocker registry swift
Docker registry swift
 

Similar to Introduce Docker

Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTHosang Jeon
 
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTLOGISPOT
 
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]David Lee
 
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container DayAmazon Web Services Korea
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)Ildoo Kim
 
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)Ji-Woong Choi
 
[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1Ji-Woong Choi
 
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)CONNECT FOUNDATION
 
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXpressEngine
 
Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호용호 최
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기iFunFactory Inc.
 
Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2XpressEngine
 
postgres_빌드_및_디버깅.pdf
postgres_빌드_및_디버깅.pdfpostgres_빌드_및_디버깅.pdf
postgres_빌드_및_디버깅.pdfLee Dong Wook
 
docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
docker on GCE ( JIRA & Confluence ) - GDG Korea Clouddocker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
docker on GCE ( JIRA & Confluence ) - GDG Korea CloudJude Kim
 
Enable the Docker Remote API with Secure Connection! (안전하게 도커 원격 작업하기)
Enable the Docker Remote API with Secure Connection! (안전하게 도커 원격 작업하기)Enable the Docker Remote API with Secure Connection! (안전하게 도커 원격 작업하기)
Enable the Docker Remote API with Secure Connection! (안전하게 도커 원격 작업하기)Jho Lee
 
Openstack zun,virtual kubelet
Openstack zun,virtual kubeletOpenstack zun,virtual kubelet
Openstack zun,virtual kubeletChanyeol yoon
 
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드수정 김
 
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4Sangcheol Hwang
 
[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08Nomad Connection, Inc.
 

Similar to Introduce Docker (20)

Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOT
 
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOT
 
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
 
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)
 
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
 
[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1
 
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
 
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
 
Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기
 
Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2
 
postgres_빌드_및_디버깅.pdf
postgres_빌드_및_디버깅.pdfpostgres_빌드_및_디버깅.pdf
postgres_빌드_및_디버깅.pdf
 
docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
docker on GCE ( JIRA & Confluence ) - GDG Korea Clouddocker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
 
Enable the Docker Remote API with Secure Connection! (안전하게 도커 원격 작업하기)
Enable the Docker Remote API with Secure Connection! (안전하게 도커 원격 작업하기)Enable the Docker Remote API with Secure Connection! (안전하게 도커 원격 작업하기)
Enable the Docker Remote API with Secure Connection! (안전하게 도커 원격 작업하기)
 
Openstack zun,virtual kubelet
Openstack zun,virtual kubeletOpenstack zun,virtual kubelet
Openstack zun,virtual kubelet
 
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
 
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
 
Docker
DockerDocker
Docker
 
[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08
 

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 목차
  • 6. Docker는 사용자가 필요로 하는 응용 프로그램을 # 006 1. Docker 소개
  • 7. Docker는 사용자가 필요로 하는 응용 프로그램을 이미지 형태로 만들고 # 007 1. Docker 소개
  • 8. Docker는 사용자가 필요로 하는 응용 프로그램을 이미지 형태로 만들고 # 008 1. Docker 소개
  • 9. Docker는 사용자가 필요로 하는 응용 프로그램을 이미지 형태로 만들고 # 009 1. Docker 소개 어떠한
  • 10. Docker는 사용자가 필요로 하는 응용 프로그램을 이미지 형태로 만들고 # 010 1. Docker 소개 어떠한 서버 환경에서도
  • 11. Docker는 사용자가 필요로 하는 응용 프로그램을 이미지 형태로 만들고 # 011 1. Docker 소개 어떠한 서버 환경에서도 동일한 환경을
  • 12. Docker는 사용자가 필요로 하는 응용 프로그램을 이미지 형태로 만들고 # 012 1. Docker 소개 어떠한 서버 환경에서도 동일한 환경을 제공 해주는 도구 이다!
  • 14. 이해 안되시나요? 좀 더 쉽게 설명 드리죠! # 014 1. Docker 소개
  • 16. 현실에 빗대어 보겠습니다. * 서버 냉장고 # 016 1. Docker 소개
  • 17. 현실에 빗대어 보겠습니다. * 서버 냉장고 * Docker 락앤락(보관 용기) # 017 1. Docker 소개
  • 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 소개
  • 27. # 027 1. Docker 소개
  • 28. Hypervisor Type 2 # 028 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
  • 38. # 038 1.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
  • 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
  • 83. Dockerfile은 Docker 이미지를 만들기 위한 텍스트 파일이며, # 083 2. Dockerfile 소개
  • 84. Dockerfile은 Docker 이미지를 만들기 위한 텍스트 파일이며, # 084 2. Dockerfile 소개
  • 85. Dockerfile은 Docker 이미지를 만들기 위한 텍스트 파일이며, # 085 2. Dockerfile 소개 리눅스 터미널에서
  • 86. Dockerfile은 Docker 이미지를 만들기 위한 텍스트 파일이며, # 086 2. Dockerfile 소개 리눅스 터미널에서 사용 하는
  • 87. Dockerfile은 Docker 이미지를 만들기 위한 텍스트 파일이며, # 087 2. Dockerfile 소개 리눅스 터미널에서 사용 하는 모든 명령어들을
  • 88. Dockerfile은 Docker 이미지를 만들기 위한 텍스트 파일이며, # 088 2. Dockerfile 소개 리눅스 터미널에서 사용 하는 모든 명령어들을 사용 가능 하다.
  • 89. Dockerfile은 Docker 이미지를 만들기 위한 텍스트 파일이며, # 089 2. Dockerfile 소개 리눅스 터미널에서 사용 하는 모든 명령어들을 사용 가능 하다.
  • 90. Dockerfile은 Docker 이미지를 만들기 위한 텍스트 파일이며, # 090 2. Dockerfile 소개 리눅스 터미널에서 사용 하는 모든 명령어들을 사용 가능 하다. 다음 장에서 작성법을 배워 봅시다.
  • 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 웹서버 구축 해보기