Introduce Docker

2,861 views

Published on

Docker에 대해 간단히 소개 하고, 사용법에 대해 작성 하였습니다.

Published in: Technology
0 Comments
83 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,861
On SlideShare
0
From Embeds
0
Number of Embeds
55
Actions
Shares
0
Downloads
222
Comments
0
Likes
83
Embeds 0
No embeds

No notes for slide

Introduce Docker

  1. 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. 2. 1. Docker 소개 1.1 Docker 설치 방법 1.2 Docker 기본 사용법 2. Dockerfile 소개 2.1 Dockerfile 작성법 2.2 미리 알고 있으면 좋은 것들 3. 실습 3.1 웹서버 구축 해보기 # 002 목차
  3. 3. # 003 1. Docker 소개
  4. 4. Docker는 # 004 1. Docker 소개
  5. 5. Docker는 사용자가 필요로 하는 # 005 1. Docker 소개
  6. 6. Docker는 사용자가 필요로 하는 응용 프로그램을 # 006 1. Docker 소개
  7. 7. Docker는 사용자가 필요로 하는 응용 프로그램을 이미지 형태로 만들고 # 007 1. Docker 소개
  8. 8. Docker는 사용자가 필요로 하는 응용 프로그램을 이미지 형태로 만들고 # 008 1. Docker 소개
  9. 9. Docker는 사용자가 필요로 하는 응용 프로그램을 이미지 형태로 만들고 # 009 1. Docker 소개 어떠한
  10. 10. Docker는 사용자가 필요로 하는 응용 프로그램을 이미지 형태로 만들고 # 010 1. Docker 소개 어떠한 서버 환경에서도
  11. 11. Docker는 사용자가 필요로 하는 응용 프로그램을 이미지 형태로 만들고 # 011 1. Docker 소개 어떠한 서버 환경에서도 동일한 환경을
  12. 12. Docker는 사용자가 필요로 하는 응용 프로그램을 이미지 형태로 만들고 # 012 1. Docker 소개 어떠한 서버 환경에서도 동일한 환경을 제공 해주는 도구 이다!
  13. 13. 이해 안되시나요? # 013 1. Docker 소개
  14. 14. 이해 안되시나요? 좀 더 쉽게 설명 드리죠! # 014 1. Docker 소개
  15. 15. 현실에 빗대어 보겠습니다. # 015 1. Docker 소개
  16. 16. 현실에 빗대어 보겠습니다. * 서버 냉장고 # 016 1. Docker 소개
  17. 17. 현실에 빗대어 보겠습니다. * 서버 냉장고 * Docker 락앤락(보관 용기) # 017 1. Docker 소개
  18. 18. 현실에 빗대어 보겠습니다. * 서버 냉장고 * Docker 락앤락(보관 용기) * 응용프로그램 반찬 및 물 등등 # 018 1. Docker 소개
  19. 19. 현실에 빗대어 보겠습니다. * 서버 냉장고 * Docker 락앤락(보관 용기) * 응용프로그램 반찬 및 물 등등 # 019 1. Docker 소개
  20. 20. 현실에 빗대어 보겠습니다. * 서버 냉장고 * Docker 락앤락(보관 용기) * 응용프로그램 반찬 및 물 등등 # 020 1. Docker 소개 매장에서 냉장고를 구입하고 보관 용기에 반찬을 넣는다. 밥 먹을 때 꺼내 먹는다.
  21. 21. 현실에 빗대어 보겠습니다. * 서버 냉장고 * Docker 락앤락(보관 용기) * 응용프로그램 반찬 및 물 등등 # 021 1. Docker 소개 매장에서 냉장고를 구입하고 보관 용기에 반찬을 넣는다. 밥 먹을 때 꺼내 먹는다.
  22. 22. 현실에 빗대어 보겠습니다. * 서버 냉장고 * Docker 락앤락(보관 용기) * 응용프로그램 반찬 및 물 등등 # 022 1. Docker 소개 매장에서 냉장고를 구입하고 보관 용기에 반찬을 넣는다. 밥 먹을 때 꺼내 먹는다. GCE, AWS, Softlayer, 서버를 구입하고, Docker를 사용하여
  23. 23. 현실에 빗대어 보겠습니다. * 서버 냉장고 * Docker 락앤락(보관 용기) * 응용프로그램 반찬 및 물 등등 # 023 1. Docker 소개 매장에서 냉장고를 구입하고 보관 용기에 반찬을 넣는다. 밥 먹을 때 꺼내 먹는다. GCE, AWS, Softlayer, 서버를 구입하고, Docker를 사용하여 Redis, Nginx를 이미지 형태로 만든다.
  24. 24. 현실에 빗대어 보겠습니다. * 서버 냉장고 * Docker 락앤락(보관 용기) * 응용프로그램 반찬 및 물 등등 # 024 1. Docker 소개 매장에서 냉장고를 구입하고 보관 용기에 반찬을 넣는다. 밥 먹을 때 꺼내 먹는다. GCE, AWS, Softlayer, 서버를 구입하고, Docker를 사용하여 Redis, Nginx를 이미지 형태로 만든다. 필요한 이미지를 가져 사용한다.
  25. 25. 그럼 흔히 알고 있는 가상화 머신과 Docker의 차이점은요? # 025 1. Docker 소개
  26. 26. 그럼 흔히 알고 있는 가상화 머신과 Docker의 차이점은요? 저도 허접 해서 자세히 알진 못합니다만, 간단히 말씀 드리지요. # 026 1. Docker 소개
  27. 27. # 027 1. Docker 소개
  28. 28. Hypervisor Type 2 # 028 1. Docker 소개
  29. 29. Hypervisor Type 2 # 029 1. Docker 소개 1. 하드웨어 가상화 2. Guest OS 생성 3. 응용 프로그램 설치 4. 사용
  30. 30. Hypervisor Type 2 # 030 1. Docker 소개 1. 하드웨어 가상화 2. Guest OS 생성 3. 응용 프로그램 설치 4. 사용
  31. 31. Hypervisor Type 2 # 031 1. Docker 소개 1. 하드웨어 가상화 2. Guest OS 생성 3. 응용 프로그램 설치 4. 사용 Slow
  32. 32. Hypervisor Type 2 # 032 1. Docker 소개 1. 하드웨어 가상화 2. Guest OS 생성 3. 응용 프로그램 설치 4. 사용 Slow
  33. 33. Hypervisor Type 2 # 033 1. Docker 소개 Docker 1. 하드웨어 가상화 2. Guest OS 생성 3. 응용 프로그램 설치 4. 사용 Slow
  34. 34. Hypervisor Type 2 # 034 1. Docker 소개 Docker 1. 하드웨어 가상화 2. Guest OS 생성 3. 응용 프로그램 설치 4. 사용 1. HostOS 커널 자원 할당 2. 이미지 생성 또는 다운로드 3. Container 실행 4. 사용 Slow
  35. 35. Hypervisor Type 2 # 035 1. Docker 소개 Docker 1. 하드웨어 가상화 2. Guest OS 생성 3. 응용 프로그램 설치 4. 사용 1. HostOS 커널 자원 할당 2. 이미지 생성 또는 다운로드 3. Container 실행 4. 사용 Slow
  36. 36. Hypervisor Type 2 # 036 1. Docker 소개 Docker 1. 하드웨어 가상화 2. Guest OS 생성 3. 응용 프로그램 설치 4. 사용 1. HostOS 커널 자원 할당 2. 이미지 생성 또는 다운로드 3. Container 실행 4. 사용 Slow Fast
  37. 37. Hypervisor Type 2 # 037 1. Docker 소개 Docker 1. 하드웨어 가상화 2. Guest OS 생성 3. 응용 프로그램 설치 4. 사용 1. HostOS 커널 자원 할당 2. 이미지 생성 또는 다운로드 3. Container 실행 4. 사용 Slow Fast
  38. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  79. 79. # 079 2. Dockerfile 소개
  80. 80. Dockerfile은 # 080 2. Dockerfile 소개
  81. 81. Dockerfile은 Docker 이미지를 # 081 2. Dockerfile 소개
  82. 82. Dockerfile은 Docker 이미지를 만들기 위한 # 082 2. Dockerfile 소개
  83. 83. Dockerfile은 Docker 이미지를 만들기 위한 텍스트 파일이며, # 083 2. Dockerfile 소개
  84. 84. Dockerfile은 Docker 이미지를 만들기 위한 텍스트 파일이며, # 084 2. Dockerfile 소개
  85. 85. Dockerfile은 Docker 이미지를 만들기 위한 텍스트 파일이며, # 085 2. Dockerfile 소개 리눅스 터미널에서
  86. 86. Dockerfile은 Docker 이미지를 만들기 위한 텍스트 파일이며, # 086 2. Dockerfile 소개 리눅스 터미널에서 사용 하는
  87. 87. Dockerfile은 Docker 이미지를 만들기 위한 텍스트 파일이며, # 087 2. Dockerfile 소개 리눅스 터미널에서 사용 하는 모든 명령어들을
  88. 88. Dockerfile은 Docker 이미지를 만들기 위한 텍스트 파일이며, # 088 2. Dockerfile 소개 리눅스 터미널에서 사용 하는 모든 명령어들을 사용 가능 하다.
  89. 89. Dockerfile은 Docker 이미지를 만들기 위한 텍스트 파일이며, # 089 2. Dockerfile 소개 리눅스 터미널에서 사용 하는 모든 명령어들을 사용 가능 하다.
  90. 90. Dockerfile은 Docker 이미지를 만들기 위한 텍스트 파일이며, # 090 2. Dockerfile 소개 리눅스 터미널에서 사용 하는 모든 명령어들을 사용 가능 하다. 다음 장에서 작성법을 배워 봅시다.
  91. 91. # 091 2.1 미리 알고 있으면 좋은 것들 1. 기본 파일명은 ‘Dockerfile’임. 2. 빌드시 이 파일이 존재하는 위치를 요구 함. 3. Docker 1.5.x 버전 이상부터 -f 옵션이 추가 됨. 4. ‘Dockerfile’이라는 파일명으로 만들지 않아도 해당 파일의 위치만 지정 해주면 빌드 가능. 5. Github에 Dockerfile이 존재하면 URL로 빌드 가능. 6. 최초 빌드 후 변경 사항이 있으면, 변경 전 부분은 캐싱 됨. 7. 시간이 많이 걸리는 빌드의 경우 RUN 명령어를 적절히 사용.
  92. 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. 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. 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. 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. 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. 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. 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. 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. # 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. 101. # 101 Thank you!

×