SlideShare une entreprise Scribd logo
1  sur  139
Télécharger pour lire hors ligne
도커 무작정 따라하기
무작정 따라하기는 ㈜도서출판 길벗의 등록상표입니다.
PYRASIS.COM 이재홍
도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
Version 1.0.3, 2015.2.9
이재홍
문서 이용 조건
2
교육 등의 비영리 목적으로만 사용해야 합니다. 사내 교육은 상관 없습니다.
회비, 참가비 등을 받는다면 영리 목적에 해당하므로 이 문서를 이용할 수
없습니다.
회비, 참가비를 받지 않는다 하더라도 마케팅 목적으로 진행되는 행사에는 이
문서를 사용할 수 없습니다.
이재홍
만든 사람 및 슬라이드 소개
3
이재홍
웹사이트: http://pyrasis.com
저서:
 가장 빨리 만나는 도커(Docker)
 아마존 웹 서비스를 다루는 기술
 윈도우 프로젝트 필수 유틸리티:
Subversion, Trac, CruiseControl.NET
이 슬라이드는 가장 빨리 만나는 도커의
내용을 요약한 슬라이드입니다.
가장 빨리 만나는 도커의 책 내용은
모두 웹사이트에 공개되어 있습니다.
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
이재홍
도커는 2013년 3월 Docker, Inc에서 출시한
오픈 소스 컨테이너 프로젝트
현재 전세계적으로 큰 인기를 끌고 있음
도커란 무엇인가?
도커
5
이재홍
AWS, Google Cloud Platform, Microsoft Azure 등의
클라우드 서비스에서 공식 지원
도커란 무엇인가?
도커
6
이재홍
도커란 무엇인가?
도커
도커는 왜 인기를 끌게 되었나?
이재홍
도커란 무엇인가?
도커
복잡한 리눅스 애플리케이션을
컨테이너로 묶어서 실행할 수 있음
이재홍
도커란 무엇인가?
도커
개발, 테스트, 서비스 환경을 하나로 통일하여
효율적으로 관리할 수 있기 때문!
이재홍
도커란 무엇인가?
도커
컨테이너(이미지)를
전 세계 사람들과 공유
이재홍
도커란 무엇인가?
도커
그건 어떻게 가능하죠?
이재홍
도커란 무엇인가?
도커
리눅스 커널에서 제공하는
컨테이너 기술을 이용
이재홍
도커란 무엇인가?
도커
GitHub와 비슷한 방식의
Docker Hub 제공!
이재홍
도커란 무엇인가?
도커
그런데 컨테이너 기술이 뭐죠?
이재홍
도커란 무엇인가?
도커
컨테이너는 가상화보다
훨씬 가벼운 기술!
이재홍
도커란 무엇인가?
도커
그럼 먼저 먼저 가상화부터...
가상 머신과 도커
이재홍
컴퓨터 안에서 컴퓨터를 만들어내기 위한 시도
1960년 대에 가상화 개념이 처음 등장
가상 머신의 등장
가상 머신과 도커
18
이재홍
컴퓨터 성능이 급격히 좋아지면서
PC에서도 흔히 사용
맥에서 인터넷 뱅킹을
한다던지…
가상 머신의 등장
가상 머신과 도커
19
이재홍
서버 성능은 더욱 더 좋아졌음
가상 머신의 등장
가상 머신과 도커
20
이재홍
그러다 보니 대부분의 시간을
서버가 놀고 있어 -_-;
가상 머신의 등장
가상 머신과 도커
21
이재홍
서버에 가상 머신을 여러 개
띄워서 일을 더 시키자!
가상 머신의 등장
가상 머신과 도커
22
이재홍
그리고 IT 기술이 보편화되면서
서버도 많아졌음
가상 머신의 등장
가상 머신과 도커
23
이재홍
서버 자체를 가상 머신에
집어넣어서 돌리자
가상 머신의 등장
가상 머신과 도커
24
이재홍
가상 머신에 각종 서버 프로그램, DB 등을 설치하여
애플리케이션이나 웹사이트를 실행
가상 머신의 등장
가상 머신과 도커
25
이재홍
미리 구축한 가상 머신 이미지를
여러 서버에 복사하여 실행하면
이미지 하나로 서버를 계속 만들어낼 수 있음
가상 머신의 등장
가상 머신과 도커
26
이재홍
가상화 기술을 이용하여 서버를
임대해주는 서비스가 클라우드 서비스
가상 머신의 등장
가상 머신과 도커
27
이재홍
그런데 가상 머신은 좀 문제가 있어
가상 머신의 문제점
가상 머신과 도커
28
이재홍
컴퓨터를 통째로 만들어내다 보니…
각종 성능 손실이 발생
가상 머신의 문제점
가상 머신과 도커
29
이재홍
인텔과 AMD는 CPU 안에 가상화
기능을 넣기 시작
가상 머신의 문제점
가상 머신과 도커
30
이재홍
그래도 느려…
가상 머신의 문제점
가상 머신과 도커
31
이재홍
호스트와 커널을 공유하는
반가상화 기술이 등장
가상 머신의 문제점
가상 머신과 도커
32
이재홍
이러나 저러나 가상 머신은…
가상 머신의 문제점
가상 머신과 도커
33
이재홍
가상 머신의 문제점
가상 머신과 도커
34
가상 머신은 완전한 컴퓨터
항상 게스트 OS를 설치해야 함
애플리케이션 A 애플리케이션 B
하이퍼바이저(Hypervisor)
실행 파일/라이브러리
게스트 OS
실행 파일/라이브러리
게스트 OS
호스트 OS
서버
https://www.docker.com/whatisdocker/
이재홍
가상 머신의 문제점
가상 머신과 도커
35
이미지 안에 OS가 포함되기 때문에 이미지 용량이 커짐
네트워크로 가상화 이미지를 주고 받는 건 꽤 부담스러움
이재홍
가상 머신의 문제점
가상 머신과 도커
36
오픈소스 가상화 소프트웨어는 OS 가상화에 만 주력
 배포와 관리 기능이 부족
이재홍
가상 머신의 문제점
가상 머신과 도커
37
가상 머신의 성능 문제가 있다 보니
리눅스 컨테이너가 나옴
이재홍
컨테이너 안에 가상 공간을 만들지만
실행 파일을 호스트에서 직접 실행
리눅스 컨테이너
가상 머신과 도커
38
이재홍
이건 리눅스 커널의
cgroups와 namespaces가
제공하는 기술
리눅스 컨테이너
가상 머신과 도커
39
이재홍
가상화가 아닌 격리
리눅스 컨테이너
가상 머신과 도커
40
이재홍
도커는 리눅스 컨테이너를 사용!
 초기에는 LXC(LinuX Container)를 기반으로 구현
 버전 0.9부터는 LXC를 대신하는 libcontainer를 개발하여 사용
 실행 옵션으로 선택 가능
리눅스 커널
LXC
cgroups namespaces
도커
libvirt systemd-nspawn
libcontainer
http://blog.docker.com/2014/03/docker-0-9-introducing-execution-drivers-and-libcontainer
리눅스 컨테이너
가상 머신과 도커
41
도커의 특징
이재홍
도커는 게스트 OS를 설치하지 않음
이미지에 서버 운영을 위한 프로그램과
라이브러리만 격리해서 설치
이미지 용량이 크게 줄어듦
호스트와 OS 자원(시스템 콜)을 공유
애플리케이션 A 애플리케이션 B
실행 파일/라이브러리 실행 파일/라이브러리
호스트 OS
서버
https://www.docker.com/whatisdocker/
도커 엔진
도커의 특징
도커의 특징
43
이재홍
호스트
도커 컨테이너
1
0.9945CPU
1
0.9826메모리 쓰기
1
1.0025메모리 읽기
0.9811디스크 I/O
1
0.9626네트워크
1
도커는 하드웨어 가상화 계층이 없음
 메모리 접근, 파일 시스템, 네트워크 전송 속도가 가상 머신에 비해 월등히 빠름
 호스트와 도커 컨테이너 사이의 성능 차이가 크지 않음(오차 범위 안)
도커 1.1.2에서 우분투 14.04 호스트와 우분투 14.04 컨테이너 성능 측정
도커의 성능
도커의 특징
44
이재홍
도커의 특징
도커의 특징
45
그리고 도커는
이미지 생성과 배포에 특화
이재홍
도커의 특징
도커의 특징
46
이미지 버전 관리도 제공하고
중앙 저장소에 이미지를 올리고 받을 수 있음
(push/pull)
이재홍
도커의 특징
도커의 특징
47
GitHub와 비슷한 형태로
도커 이미지를 공유하는 Docker Hub 제공
(GitHub 처럼 유료 저장소도 제공)
이재홍
도커의 특징
도커의 특징
48
다양한 API를 제공하여 원하는 만큼 자동화 가능
개발과 서버 운영에 매우 유용!
이재홍
그런데 이미지와 컨테이너는
뭐가 다른 거지?
가상 머신의 문제점
가상 머신과 도커
49
도커 이미지와 컨테이너
이재홍
도커 이미지
도커 이미지와 컨테이너
51
이미지는 서비스 운영에 필요한 서버 프로그램,
소스 코드, 컴파일된 실행 파일을 묶은 형태
이재홍
도커 이미지
도커 이미지와 컨테이너
52
저장소에 올리고 받는건 이미지
(push/pull)
이재홍
도커 컨테이너
도커 이미지와 컨테이너
53
컨테이너는 이미지를 실행한 상태!
이재홍
도커 컨테이너
도커 이미지와 컨테이너
54
이미지로 여러 개의 컨테이너를 만들 수 있음
이재홍
도커 컨테이너
도커 이미지와 컨테이너
55
운영체제로 치면 이미지는 실행파일이고
컨테이너는 프로세스
이재홍
도커의 이미지 처리 방식
도커 이미지와 컨테이너
56
도커는 이미지의 바뀐 부분을
어떻게 관리하나?
이재홍
도커의 이미지 처리 방식
도커 이미지와 컨테이너
57
유니온 파일 시스템 형식
(aufs, btrfs, devicemapper)
이재홍
실행 파일/라이브러리
실행 파일/라이브러리
바뀐
부분
바뀐
부분
애플리케이션 A
베이스 이미지
도커 엔진
애플리케이션 A’ 애플리케이션 A’’
애플리케이션 A
+
바뀐 부분
애플리케이션 A
도커는 베이스 이미지에서 바뀐 부분만 이미지로 생성
컨테이너로 실행할 때는 베이스 이미지와 바뀐 부분을 합쳐서 실행
도커의 이미지 처리 방식
도커 이미지와 컨테이너
58
http://www.slideshare.net/dotCloud/why-docker
이재홍
도커의 이미지 처리 방식
도커 이미지와 컨테이너
59
Docker Hub 및 개인 저장소에서
이미지를 공유할 때
바뀐 부분만 주고 받음
이재홍
각 이미지는 의존 관계 형성
도커의 이미지 처리 방식
도커 이미지와 컨테이너
60
서비스 운영 환경과 도커
이재홍
지금까지의 서버 환경
서비스 운영 환경과 도커
62
지금까지는
물리 서버를 직접 운영 했음
이재홍
지금까지의 서버 환경
서비스 운영 환경과 도커
63
호스팅 또는 IDC 코로케이션 서비스
사용
이재홍
지금까지의 서버 환경
서비스 운영 환경과 도커
64
서버 구입과 설치에 돈이 많이 들고
시간이 오래 걸림
이재홍
클라우드 환경
서비스 운영 환경과 도커
65
가상화가 발전하면서
클라우드 환경으로 변화
이재홍
클라우드 환경
서비스 운영 환경과 도커
66
가상 서버를 임대하여
사용한 만큼만 요금 지불
이재홍
클라우드 환경
서비스 운영 환경과 도커
67
클릭 몇 번 만으로 가상 서버를 생성
이재홍
클라우드 환경
서비스 운영 환경과 도커
68
이젠 자동으로 서버를 추가하고
삭제하기까지…
이재홍
클라우드 환경
서비스 운영 환경과 도커
69
서버 대수가 많아지면서
사람이 일일이 세팅하기 힘들어짐
이재홍
클라우드 환경
서비스 운영 환경과 도커
70
이제 서버 세팅과 배포는 어떻게?
이재홍
Immutable Infrastructure
서비스 운영 환경과 도커
71
Immutable Infrastructure라는
패러다임이 나옴
이재홍
Immutable Infrastructure
서비스 운영 환경과 도커
72
호스트 OS와 서비스 운영 환경
(서버 프로그램, 소스 코드, 컴파일 된 바이너리)을 분리
이재홍
Immutable Infrastructure
서비스 운영 환경과 도커
73
한 번 설정한 운영 환경은
변경하지 않는다(Immutable)는 개념
이재홍
서비스 운영 환경을 이미지로 생성한 뒤
서버에 배포하여 실행
소스 코드 rev. 10
운영체제
서버
서비스 운영 환경 이미지 생성
배포 및 실행
소스 코드 rev. 11
소스 코드 rev. 12
소스 코드 rev. 12
운영체제
서버
소스 코드 rev. 12
Immutable Infrastructure
서비스 운영 환경과 도커
74
이재홍
Immutable Infrastructure
서비스 운영 환경과 도커
75
서비스가 업데이트되면 운영 환경 자체를 변경하지
않고, 이미지를 새로 생성하여 배포
이재홍
Immutable Infrastructure
서비스 운영 환경과 도커
76
클라우드 플랫폼에서 서버를 쓰고 버리는 것과 같이
Immutable Infrastructure도
서비스 운영 환경 이미지를 한 번 쓰고 버림
이재홍
 서비스 환경 이미지만 관리하면 됨
 중앙 관리를 통한 체계적인 배포와 관리
 이미지 생성에 버전 관리 시스템 활용
편리한 관리
 이미지 하나로 서버를 계속 찍어낼 수 있음
 클라우드 플랫폼의 자동 확장(Auto
Scaling) 기능과 연동하여 손쉽게 서비스
확장
확장
 개발자 PC, 테스트 서버에서 이미지를
실행만 하면 서비스 운영 환경과 동일한
환경이 구성됨
 테스트가 간편
테스트
 운영체제와 서비스 환경을 분리하여
가볍고(Lightweight) 어디서든 실행
가능한(Portable) 환경 제공
가볍다
Immutable Infrastructure의 장점
서비스 운영 환경과 도커
77
이재홍
Immutable Infrastructure
서비스 운영 환경과 도커
78
도커는 Immutable Infrastructure를
구현한 프로젝트
도커 요약
이재홍
로고로 알아보는 도커
도커 요약
80
도커 고래 로고 많이들 보셨죠?
이재홍
로고로 알아보는 도커
도커 요약
81
컨테이너를 싣고 다니는 고래
이재홍
로고로 알아보는 도커
도커 요약
82
고래는 서버에서 여러 개의 컨테이너(이미지)를 실행하고
이미지 저장과 배포(운반)을 의미
이재홍
로고로 알아보는 도커
도커 요약
83
도커(Docker)는 부두 노동자를 뜻함
컨테이너를 다루는 도커의 기능과 비슷함
이재홍
도커는 서비스 운영 환경을 묶어서
손쉽게 배포하고 실행하는
경량 컨테이너 기술
Build Ship Run
도커를 요약하면
도커 요약
84
도커 설치하기
이재홍
도커 설치하기
도커 설치하기
86
이제 자신의 컴퓨터에서 명령을 실행하여
직접 도커를 설치하고 사용해봅니다.
이재홍
 도커는 리눅스 배포판 종류를 자동으로 인식하여 도커 패키지를 설치해주는 스크립트를 제공
$ sudo wget –qO- https://get.docker.com/ | sh
get.docket.com 스크립트로 도커를 설치하면 hello-world 이미지도 자동 설치됨.
Hello-world 이미지는 사용하지 않을 것이므로 모두 삭제
$ sudo docker rm `sudo docker ps -aq`
$ sudo docker rmi hello-world
자동 설치 스크립트
도커 설치하기: 리눅스
87
이재홍
 자동 설치 스크립트를 사용하지 않고 우분투에서 직접 설치하기.
버전은 14.04 LTS 64비트 기준
$ sudo apt-get update
$ sudo apt-get install docker.io
$ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
/usr/bin/docker.io 실행 파일을 /usr/local/bin/docker로 링크하여 사용
우분투
도커 설치하기: 리눅스
88
이재홍
 자동 설치 스크립트를 사용하지 않고 레드햇 엔터프라이즈 리눅스(RHEL)와 CentOS에서 패키지로
직접 설치하기
 RHEL과 CentOS 6 패키지 저장소에는 docker-io가 없으므로 EPEL(Fedora Extra
Packages For Enterprise Linux) 저장소를 사용할 수 있도록 설정
$ sudo yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ sudo yum install docker-io
CentOS 6
RedHat Enterprise Linux, CentOS
도커 설치하기: 리눅스
89
이재홍
 AWS EC2에 설치되는 Amazon Linux(RHEL 기반)는 EPEL 저장소를 바로 사용할 수
있으므로 epel-release-6-8.noarch.rpm을 설치하지 않아도 됨
 CentOS 7에서는 docker 패키지를 설치
$ sudo yum install docker
CentOS 7
$ sudo service docker start
Docker 서비스 실행하기
$ sudo chkconfig docker on
부팅했을 때 자동으로 실행하기
RedHat Enterprise Linux, CentOS
도커 설치하기: 리눅스
90
이재홍
 배포판 버전이 오래되었거나, CentOS 같이 버전업이 보수적인 배포판에서는 도커 패키지 버전이
낮은 경우가 있음
 배포판 별 패키지가 아닌 빌드 된 바이너리를 직접 사용하는 방법
$ sudo service docker stop
$ sudo wget https://get.docker.com/builds/Linux/x86_64/docker-latest 
-O $(type -P docker)
$ sudo service docker start
이미 패키지로 설치했을 때
최신 바이너리 사용하기
도커 설치하기: 리눅스
91
이재홍
$ wget https://get.docker.com/builds/Linux/x86_64/docker-latest
$ chmod +x docker-latest
$ sudo mv docker-latest /usr/local/bin/docker
$ sudo /usr/local/bin/docker -d
새로 설치할 때
URL을 docker-latest로 지정하면 가장 최신 버전을 받고, docker-1.3.0처럼 지정하면 특정
버전을 받음
최신 바이너리 사용하기
도커 설치하기: 리눅스
92
이재홍
 Mac OS X에서는 Boot2Docker를 이용하여 도커를 사용할 수 있음
 다음 URL에서 .pkg 파일을 받기
https://github.com/boot2docker/osx-installer/releases
Mac OS X
도커 설치하기
93
이재홍
 파일 다운로드가 끝났으면 .pkg 파일 실행
 설치화면이 표시되면 계속 버튼을 클릭
Mac OS X
도커 설치하기
94
이재홍
 기본 위치에 설치
Mac OS X
도커 설치하기
95
이재홍
 암호 입력창이 표시되면 관리자 암호를 입력하고 소프트웨어 설치 버튼을 클릭
1
2
Mac OS X
도커 설치하기
96
이재홍
 설치가 완료되었으면 닫기 버튼 클릭
Mac OS X
도커 설치하기
97
이재홍
 Finder를 실행하고 응용 프로그램에서 boot2docker를 실행
1
2
Mac OS X
도커 설치하기
98
이재홍
 boot2docker를 실행하면 터미널 창이 실행됨
 잠시 기다리면 자동으로 boot2docker.iso를 이용하여 가상 머신이 생성되고, 가상 머신에
접속됨(Boot2Docker는 내부족으로 VirtualBox가 함께 설치됨)
Mac OS X
도커 설치하기
99
이재홍
 Windows에서는 Boot2Docker를 이용하여 Docker를 사용할 수 있음
 다음 URL에서 docker-install.exe 파일을 받기
https://github.com/boot2docker/windows-installer/releases
Windows
도커 설치하기
100
이재홍
 파일 다운로드가 끝났으면 docker-install.exe 파일을 실행
 설치 화면이 표시되면 Next 버튼을 클릭
Windows
도커 설치하기
101
이재홍
 기본 위치에 설치
 Next 버튼 클릭
Windows
도커 설치하기
102
이재홍
 설치할 요소 선택
 Boot2Docker Management script and ISO: Boot2Docker를 설치할 것이므로 반드시 선택
 VirtualBox: VirtualBox를 설치하지 않았다면 이 부분을 선택
 MSYS-git UNIX tools: Windows용 Git을 설치하지 않았다면 이 부분을 선택
 선택이 완료되었으면 Next 버튼을 클릭
Windows
도커 설치하기
103
이재홍
 시작 메뉴에 등록할 이름 설정
 기본 값 그대로 사용하고 Next 버튼을 클릭
Windows
도커 설치하기
104
이재홍
 Boot2Docker 경로를 환경 변수에 등록할지 설정
 기본값 그대로 사용하고, Next 버튼을 클릭
Windows
도커 설치하기
105
이재홍
 Install 버튼을 클릭하여 Boot2Docker를 설치
Windows
도커 설치하기
106
이재홍
 설치가 완료되면 Finish 버튼을 클릭
Windows
도커 설치하기
107
이재홍
 설치가 끝난 뒤 바탕화면에 생성된 Boot2Docker Start 아이콘을 더블 클릭. 만약 실행 파일 선택 창이 나오면
Git Bash의 sh.exe를 선택
 명령 프롬프트 창이 표시된 뒤 잠시 기다리면 자동으로 boot2docker.iso를 이용하여 가상 머신이 생성되고, 가상
머신에 접속됨. 중간에 VirtualBox 관리가 권한 요청 창이 나오면 예(Y) 버튼을 클릭
Windows
도커 설치하기
108
도커 사용해보기
이재홍
도커의 명령은 docker <명령> 형식
예) docker run, docker push
항상 root 권한으로 실행
docker <명령>+
도커 명령
도커 사용해보기
110
이재홍
도커 사용해보기
도커 사용해보기
111
앞으로 나오는 모든 명령을 차례대로
입력하면서 실습을 진행합니다.
이재홍
docker search <이미지 이름>
$ sudo docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Official Ubuntu base image 383
stackbrew/ubuntu Official Ubuntu base image 40
crashsystems/gitlab-docker A trusted, regularly updated build of GitL... 19 [OK]
dockerfile/ubuntu Trusted Ubuntu (http://www.ubuntu.com/) Bu... 15 [OK]
ubuntu-upstart Upstart is an event-based replacement for ... 7
cmfatih/phantomjs PhantomJS [ phantomjs 1.9.7, casperjs 1.1.... 5 [OK]
dockerfile/ubuntu-desktop Trusted Ubuntu Desktop (LXDE) (http://lxde... 5 [OK]
lukasz/docker-scala Dockerfile for installing Scala 2.10.3, Ja... 5 [OK]
litaio/ruby Ubuntu 14.04 with Ruby 2.1.2 compiled from... 5 [OK]
 Docker Hub에서 이미지 검색해보기
 보통 ubuntu, centos, redis 등 OS나 프로그램 이름을 가진 이미지가 공식 이미지
 나머지는 사용자들이 만들어서 공개한 이미지
search 명령으로 이미지 검색하기
도커 사용해보기
112
이재홍
도커는 Docker Hub(https://registry.hub.docker.com)를 통해 이미지를
공유하는 생태계가 구축되어 있음
유명 리눅스 배포판과 오픈 소스 프로젝트(Redis, Nginx 등)의 이미지를 모두
Docker Hub에서 구할 수 있음
이미지와 관련된 명령은 기본적으로 Docker Hub를 이용하도록 설정되어 있음
search 명령으로 이미지 검색하기
도커 사용해보기
113
이재홍
 Docker Hub에서 이미지를 검색한 뒤 해당 이미지의 Tags 탭에서 이미지의 버전을 볼 수 있음
search 명령으로 이미지 검색하기
도커 사용해보기
114
이재홍
 sudo를 매번 입력하지 않으려면?
$ sudo su
#
처음부터 root 계정으로 로그인하거나 sudo su 명령을 사용하여 root 계정으로 전환
$ sudo usermod -aG docker ${USER}
$ sudo service docker restart
또는, 현재 계정을 docker 그룹에 포함(docker 그룹은 root 권한과 동일하므로 꼭 필요한 계정만 포함)
현재 계정에서 로그아웃한 뒤 다시 로그인
sudo 입력하지 않기
도커 사용해보기
115
이재홍
docker pull <이미지 이름>:<태그>
 Docker Hub에서 우분투 이미지 받아보기
 이미지 이름 뒤에 latest를 설정하면 최신 버전을 받음
 ubuntu:14.04, ubuntu:12.10처럼 태그를 지정할 수 있음
 이미지 이름에서 pyrasis/ubuntu처럼 / 앞에 사용자명을 지정하면 해당 사용자가 올린 이미지를
받음(공식 이미지는 사용자명이 붙지 않음)
 호스트에 설치된 리눅스 배포판과 도커 이미지의 배포판 종류는 달라도 됨. 즉 CentOS에서 우분투
컨테이너를 실행할 수 있음
$ sudo docker pull ubuntu:latest
pull 명령으로 이미지 받기
도커 사용해보기
116
이재홍
docker images
 모든 이미지를 출력해보기
docker images ubuntu처럼 이미지 이름을 설정하면 이름은 같지만 태그가 다른 이미지가 출력됨
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED V IRTUAL SIZE
ubuntu latest e54ca5efa2e9 Less than a second ago 276.1 MB
images 명령으로 이미지 목록 출력하기
도커 사용해보기
117
이재홍
docker run <옵션> <이미지 이름> <실행할 파일>
 이미지를 컨테이너로 생성한 뒤 Bash 셸 실행해보기
ubuntu 이미지를 컨테이너로 생성한 뒤 ubuntu 이미지 않의 /bin/bash를 실행
-i(interactive), -t(Pseudo-tty) 옵션을 사용하면 실행된 Bash 셸에 입력 및 출력 가능
--name 옵션으로 컨테이너에 이름을 지정할 수 있음. 이름을 지정하지 않으면 도커가 자동으로 이름을
생성하여 지정
$ sudo docker run -i -t --name hello ubuntu /bin/bash
run 명령으로 컨테이너 생성하기
도커 사용해보기
118
이재홍
cd, ls 명령으로 컨테이너 내부를 둘러본 뒤 exit를 입력하여 Bash 셸에서 빠져
나오기
우분투 이미지에서 /bin/bash 실행 파일을 실행했기 때문에 여기서 빠져나오면
컨테이너가 정지(stop)됨
run 명령으로 컨테이너 생성하기
도커 사용해보기
119
이재홍
$ sudo service docker restart
# /etc/sysconfig/docker
#
# Other arguments to pass to the docker daemon process
# These will be parsed by the sysv initscript and appended
# to the arguments list passed to docker –d
other_args="--selinux-enabled --exec-driver=lxc"
unable to remount sys readonly: unable to mount sys as readonly max retries reached
참고
CentOS에서 다음과 같은 에러가 발생한다면
/etc/sysconfig/docker 파일에서 다음과 같이 –-exec-driver=lxc를 추가
Docker 서비스 재시작
run 명령으로 컨테이너 생성하기
도커 사용해보기
120
이재홍
docker ps
 모든 컨테이너 목록을 출력하기
 -a 옵션을 사용하면 정지된 컨테이너까지 모두 출력됨
 옵션을 사용하지 않으면 실행되고 있는 컨테이너만 출력됨
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6338ce52d07c ubuntu:latest /bin/bash 4 seconds ago Exited (0) Less than a second ago hello
현재 컨테이너는 정지된 상태. 앞에서 컨테이너를 생성할 때 이름을 hello로 지정했으므로 컨테이너
목록에서도 hello로 표시
ps 명령으로 컨테이너 목록 확인하기
도커 사용해보기
121
이재홍
docker start <컨테이너 이름>
 방금 정지한 컨터이너를 다시 시작하기
컨테이너 이름 대신 컨테이너 ID를 사용해도 됨
$ sudo docker start hello
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6338ce52d07c ubuntu:latest /bin/bash 15 minutes ago Up 3 seconds hello
 컨테이너를 시작했으면 컨테이너 목록 출력해보기
hello 컨테이너가 시작되었음
start 명령으로 컨테이너 시작하기
도커 사용해보기
122
이재홍
docker restart <컨테이너 이름>
 OS 재부팅처럼 컨테이너를 다시 시작해보기
컨테이너 이름 대신 컨테이너 ID를 사용해도 됨
$ sudo docker restart hello
restart 명령으로 컨테이너 재시작하기
도커 사용해보기
123
이재홍
docker attach <컨테이너 이름>
 방금 시작한 컨테이너에 접속해보기
 명령을 실행한 뒤 엔터를 한 번 더 입력하면 Bash 셸이 표시됨
 컨테이너 이름 대신 컨테이너 ID를 사용해도 됨
 여기서는 /bin/bash를 실행했기 때문에 명령을 자유롭게 입력할 수 있음. 단 DB나 서버
애플리케이션을 실행하면 입력은 할 수 없고 출력만 보게됨
 Bash 셸에서 exit 또는 Ctrl+D를 입력하면 컨테이너가 정지됨
$ sudo docker attach hello
root@6338ce52d07c:/#
여기서는 Ctrl+P, Ctrl+Q를 차례대로 입력하여 컨테이너를 정지하지 않고, 빠져 나오기
attach 명령으로 컨테이너에 접속하기
도커 사용해보기
124
이재홍
docker exec <컨테이너 이름> <명령> <매개 변수>
 현재 컨테이너가 /bin/bash로 실행된 상태
 /bin/bash를 통하지 않고 외부에서 컨테이너 안의 명령 실행해보기
 컨테이너 이름 대신 컨테이너 ID를 사용해도 됨
 컨테이너가 실행되고 있는 상태에서만 사용할 수 있으며 정지된 상태에서는 사용할 수 없음
$ sudo docker exec hello echo "Hello World"
Hello World
컨테이너 안의 echo 명령을 실행하고 매개 변수로 "Hello World"를 지정했기 때문에 Hello
World가 출력됨
 docker exec 명령은 이미 실행된 컨테이너에 apt-get, yum 명령으로 패키지를 설치하거나 각종 데몬을 실행할
때 활용
exec 명령으로 외부에서 컨테이너 안의 명령 실행하기
도커 사용해보기
125
이재홍
docker stop <컨테이너 이름>
 먼저 실행된 컨테이너 목록 출력하기
$ sudo docker stop hello
hello 컨테이너를 정지했기 때문에 아무것도 나오지 않음
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6338ce52d07c ubuntu:latest /bin/bash 51 minutes ago Up 2 minutes hello
 컨테이너 정지해보기(컨테이너 이름 대신 컨테이너 ID도 사용해도 됨)
 실행된 컨테이너 목록을 출력해보기
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
stop 명령으로 컨테이너 정지하기
도커 사용해보기
126
이재홍
docker rm <컨테이너 이름>
 생성된 컨테이너를 삭제해보기
$ sudo docker rm hello
hello 컨테이너를 삭제했기 때문에 아무것도 나오지 않음
 모든 컨테이너 목록을 출력해보기
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
컨테이너 이름 대신 컨테이너 ID를 사용해도 됨
rm 명령으로 컨테이너 삭제하기
도커 사용해보기
127
이재홍
docker rmi <이미지 이름>:<태그>
 이미지 삭제해보기
$ sudo docker rmi ubuntu:latest
ubuntu 이미지를 삭제했기 때문에 아무것도 나오지 않음
 이미지 목록을 출력해보기
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
 이미지 이름 대신 이미지 ID를 사용해도 됨
 docker rmi ubuntu처럼 이미지 이름만 지정하면 태그는 다르지만 ubuntu
이름을 가진 모든 이미지가 삭제됨
rmi 명령으로 이미지 삭제하기
도커 사용해보기
128
도커 이미지 생성하기
이재홍
Dockerfile
도커 이미지 설정 파일
Dockerfile에 설정된 대로 이미지를 생성하게 됨
Dockerfile 작성하기
도커 이미지 생성하기
130
이재홍
 먼저 example 디렉터리를 생성한 뒤 example 디렉터리로 이동하기
~$ mkdir example
~$ cd example
Dockerfile 작성하기
도커 이미지 생성하기
131
이재홍
 다음 내용을 example 디렉터리 아래에 Dockerfile로 저장하기
 우분투 14.04를 기반으로 nginx 서버를 설치한 도커 이미지를 생성하는 예제
FROM ubuntu:14.04
MAINTAINER Foo Bar foo@bar.com
RUN apt-get update
RUN apt-get install -y nginx
RUN echo "ndaemon off;" >> /etc/nginx/nginx.conf
RUN chown -R www-data:www-data /var/lib/nginx
VOLUME ["/data", "/etc/nginx/site-enabled", "/var/log/nginx"]
WORKDIR /etc/nginx
CMD ["nginx"]
EXPOSE 80
EXPOSE 443
example/Dockerfile
# 어떤 이미지를 기반으로 할지 설정. <이미지 이름>:<태그> 형식
# 메인테이너 정보
# RUN으로 셸 스크립트 혹은 명령 실행
# 이미지 생성 중에는 사용자 입력을 받을 수 없으므로
apt-get install에서 –y 옵션 사용
# 호스트와 공유할 디렉터리 목록
# 다음 CMD에서 설정한 실행 파일이 실행될 디렉터리
# 컨테이너가 시작되었을 때 실행할 실행 파일 또는 스크립트
# 호스트와 연결할 포트 번호
Dockerfile 작성하기
도커 이미지 생성하기
132
https://github.com/pyrasis/dockerbook/blob/master/Chapter04/Dockerfile
이재홍
docker build <옵션> <Dockerfile 경로>
 앞에서 작성한 Dockerfile로 이미지 생성해보기
 Dockerfile이 저장된 example 디렉터리에서 명령 실행
~/example$ sudo docker build --tag hello:0.1 .
hello:0.1 이미지가 생성됨
 --tag 옵션으로 이미지 이름과 태그를 설정할 수 있음
 이미지 이름만 설정하면 태그는 latest로 설정됨
 잠시 기다리면 이미지가 생성됨. 이미지 목록 출력해보기
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu 14.04 e54ca5efa2e9 Less than a second ago 276.1 MB
ubuntu latest e54ca5efa2e9 Less than a second ago 276.1 MB
hello 0.1 2031ee0736e8 9 minutes ago 298.4 MB
build 명령으로 이미지 생성하기
도커 이미지 생성하기
133
이재홍
 앞에서 생성한 이미지를 실행해보기
$ sudo docker run --name hello-nginx -d -p 80:80 -v /root/data:/data hello:0.1
 -d 옵션은 컨테이너를 백그라운드로 실행
 -p 80:80 옵션으로 호스트의 80번 포트와 컨테이너의 80번 포트를 연결하고 외부에 노출
 -v /root/data:/data 옵션으로 호스트의 /root/data 디렉터리를 컨테이너의 /data
디렉터리에 연결
build 명령으로 이미지 생성하기
도커 이미지 생성하기
134
이재홍
 실행된 컨테이너 목록을 출력해보기
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3c06a0bebab6 hello:0.1 nginx 10 minutes ago Up 10 minutes 443/tcp, 0.0.0.0:80->80/tcp hello-nginx
hello-nginx 컨테이너가 실행되었음
웹 브라우저를 실행하고 http://<호스트 IP>:80으로 접속하면
Welcome to nginx! 페이지가 표시됨
build 명령으로 이미지 생성하기
도커 이미지 생성하기
135
이재홍
 만약 Boot2Docker를 사용한다면?
 Boot2Docker는 가상 머신 안에 도커를 실행한 것이므로 호스트 IP로는 ngnix에 바로 접속할 수 없다.
 boot2docker ip 명령으로 가상 머신의 IP 주소 알아내기
 Windows에서는 Git Bash에서 다음 명령 실행
$ boot2docker ip
The VM's Host only interface IP address is: 192.168.59.103
Boot2Docker 가상 머신의 IP 주소가 출력됨
웹 브라우저를 실행하고 http://<Boot2Docker VM의 IP>:80으로 접속하면
Welcome to nginx! 페이지가 표시됨
build 명령으로 이미지 생성하기
도커 이미지 생성하기
136
이재홍
더 자세한 내용은...
137
더 자세한 내용은 가장 빨리 만나는 도커를
참조해주세요. 책 내용은 모두 웹사이트에
공개되어 있습니다.
http://www.pyrasis.com/private/2014/11/30/publish-docker-for-the-
really-impatient-book
 Docker 개인 저장소 구축하기
 Dockerfile 상세 설명
 Docker로 애플리케이션 배포하기
 Docker 모니터링하기
 Amazon Web Services에서 Docker 사용하기
 Google Cloud Platform에서 Docker 사용하기
 Microsoft Azure에서 Docker 사용하기
 Docker Hub 사용하기
 Docker Remote API 사용하기
 CoreOS 사용하기
 Docker로 워드프레스 블로그 구축하기(MySQL)
 Docker로 Ruby on Rails 애플리케이션 구축하기(MySQL, PostgreSQL)
 Docker로 Django 애플리케이션 구축하기(Oracle, MySQL, PostgreSQL)
 Docker 활용 시나리오
 Docker 명령어 및 옵션 목록
이재홍
YouTube 동영상 강의
138
생활코딩 이고잉님과 함께하는 저의 동영상 강의입니다.
https://www.youtube.com/watch?v=Bhzz9E3xuXY
감사합니다

Contenu connexe

Tendances

[수정본] 우아한 객체지향
[수정본] 우아한 객체지향[수정본] 우아한 객체지향
[수정본] 우아한 객체지향Young-Ho Cho
 
(발표자료) CentOS EOL에 따른 대응 OS 검토 및 적용 방안.pdf
(발표자료) CentOS EOL에 따른 대응 OS 검토 및 적용 방안.pdf(발표자료) CentOS EOL에 따른 대응 OS 검토 및 적용 방안.pdf
(발표자료) CentOS EOL에 따른 대응 OS 검토 및 적용 방안.pdfssuserf8b8bd1
 
Docker 사내교육 자료
Docker 사내교육 자료Docker 사내교육 자료
Docker 사내교육 자료Juneyoung Oh
 
Virtualization, Containers, Docker and scalable container management services
Virtualization, Containers, Docker and scalable container management servicesVirtualization, Containers, Docker and scalable container management services
Virtualization, Containers, Docker and scalable container management servicesabhishek chawla
 
Docker introduction
Docker introductionDocker introduction
Docker introductiondotCloud
 
Docker intro
Docker introDocker intro
Docker introOleg Z
 
Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker, Inc.
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기SeungYong Oh
 
Docker Introduction
Docker IntroductionDocker Introduction
Docker IntroductionSparkbit
 
Fargate 를 이용한 ECS with VPC 1부
Fargate 를 이용한 ECS with VPC 1부Fargate 를 이용한 ECS with VPC 1부
Fargate 를 이용한 ECS with VPC 1부Hyun-Mook Choi
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축Ji-Woong Choi
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Masahito Zembutsu
 
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
Docker 101 - Getting started
Docker 101 - Getting startedDocker 101 - Getting started
Docker 101 - Getting startedMatheus Marabesi
 
webservice scaling for newbie
webservice scaling for newbiewebservice scaling for newbie
webservice scaling for newbieDaeMyung Kang
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...Amazon Web Services Korea
 

Tendances (20)

[수정본] 우아한 객체지향
[수정본] 우아한 객체지향[수정본] 우아한 객체지향
[수정본] 우아한 객체지향
 
(발표자료) CentOS EOL에 따른 대응 OS 검토 및 적용 방안.pdf
(발표자료) CentOS EOL에 따른 대응 OS 검토 및 적용 방안.pdf(발표자료) CentOS EOL에 따른 대응 OS 검토 및 적용 방안.pdf
(발표자료) CentOS EOL에 따른 대응 OS 검토 및 적용 방안.pdf
 
Docker
DockerDocker
Docker
 
Docker 사내교육 자료
Docker 사내교육 자료Docker 사내교육 자료
Docker 사내교육 자료
 
Virtualization, Containers, Docker and scalable container management services
Virtualization, Containers, Docker and scalable container management servicesVirtualization, Containers, Docker and scalable container management services
Virtualization, Containers, Docker and scalable container management services
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
 
Docker intro
Docker introDocker intro
Docker intro
 
Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker 101 - Nov 2016
Docker 101 - Nov 2016
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 
Docker Introduction
Docker IntroductionDocker Introduction
Docker Introduction
 
Fargate 를 이용한 ECS with VPC 1부
Fargate 를 이용한 ECS with VPC 1부Fargate 를 이용한 ECS with VPC 1부
Fargate 를 이용한 ECS with VPC 1부
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
 
From Zero to Docker
From Zero to DockerFrom Zero to Docker
From Zero to Docker
 
Dockerfile
Dockerfile Dockerfile
Dockerfile
 
Docker, LinuX Container
Docker, LinuX ContainerDocker, LinuX Container
Docker, LinuX Container
 
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
 
Docker 101 - Getting started
Docker 101 - Getting startedDocker 101 - Getting started
Docker 101 - Getting started
 
webservice scaling for newbie
webservice scaling for newbiewebservice scaling for newbie
webservice scaling for newbie
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
 

En vedette

The Future of Everything
The Future of EverythingThe Future of Everything
The Future of EverythingMichael Ducy
 
Docker Machineを始めるには?
Docker Machineを始めるには?Docker Machineを始めるには?
Docker Machineを始めるには?Masahito Zembutsu
 
도커 학습과 Boot2Docker
도커 학습과 Boot2Docker도커 학습과 Boot2Docker
도커 학습과 Boot2Dockerpyrasis
 
[데브루키160409 박민근] UniRx 시작하기
[데브루키160409 박민근] UniRx 시작하기[데브루키160409 박민근] UniRx 시작하기
[데브루키160409 박민근] UniRx 시작하기MinGeun Park
 
가장 빨리 만나는 Docker 출간 후기
가장 빨리 만나는 Docker 출간 후기가장 빨리 만나는 Docker 출간 후기
가장 빨리 만나는 Docker 출간 후기pyrasis
 
Foreman in Your Data Center :OSDC 2015
Foreman in Your Data Center :OSDC 2015Foreman in Your Data Center :OSDC 2015
Foreman in Your Data Center :OSDC 2015Stephen Benjamin
 
Foreman in your datacenter
Foreman in your datacenterForeman in your datacenter
Foreman in your datacenterlzap
 
애자일 스크럼과 JIRA
애자일 스크럼과 JIRA 애자일 스크럼과 JIRA
애자일 스크럼과 JIRA Terry Cho
 
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)Amazon Web Services Korea
 
Selenium을 이용한 동적 사이트 크롤러 만들기
Selenium을 이용한 동적 사이트 크롤러 만들기Selenium을 이용한 동적 사이트 크롤러 만들기
Selenium을 이용한 동적 사이트 크롤러 만들기Gyuhyeon Jeon
 
Why Docker
Why DockerWhy Docker
Why DockerdotCloud
 
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항Ji-Woong Choi
 
141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작Changwon Choe
 

En vedette (13)

The Future of Everything
The Future of EverythingThe Future of Everything
The Future of Everything
 
Docker Machineを始めるには?
Docker Machineを始めるには?Docker Machineを始めるには?
Docker Machineを始めるには?
 
도커 학습과 Boot2Docker
도커 학습과 Boot2Docker도커 학습과 Boot2Docker
도커 학습과 Boot2Docker
 
[데브루키160409 박민근] UniRx 시작하기
[데브루키160409 박민근] UniRx 시작하기[데브루키160409 박민근] UniRx 시작하기
[데브루키160409 박민근] UniRx 시작하기
 
가장 빨리 만나는 Docker 출간 후기
가장 빨리 만나는 Docker 출간 후기가장 빨리 만나는 Docker 출간 후기
가장 빨리 만나는 Docker 출간 후기
 
Foreman in Your Data Center :OSDC 2015
Foreman in Your Data Center :OSDC 2015Foreman in Your Data Center :OSDC 2015
Foreman in Your Data Center :OSDC 2015
 
Foreman in your datacenter
Foreman in your datacenterForeman in your datacenter
Foreman in your datacenter
 
애자일 스크럼과 JIRA
애자일 스크럼과 JIRA 애자일 스크럼과 JIRA
애자일 스크럼과 JIRA
 
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
 
Selenium을 이용한 동적 사이트 크롤러 만들기
Selenium을 이용한 동적 사이트 크롤러 만들기Selenium을 이용한 동적 사이트 크롤러 만들기
Selenium을 이용한 동적 사이트 크롤러 만들기
 
Why Docker
Why DockerWhy Docker
Why Docker
 
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
 
141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작
 

Similaire à 도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!

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 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기iFunFactory Inc.
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기Chanwoong Kim
 
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편negabaro
 
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)CONNECT FOUNDATION
 
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]David Lee
 
docker_quick_start
docker_quick_startdocker_quick_start
docker_quick_startSukjin Yun
 
[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 Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1Ji-Woong Choi
 
Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호용호 최
 
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트iFunFactory Inc.
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)YEONG-CHEON YOU
 
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기Sumin Byeon
 
Docker.소개.30 m
Docker.소개.30 mDocker.소개.30 m
Docker.소개.30 mWonchang Song
 
[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.
 
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)Ji-Woong Choi
 
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)Sang Don Kim
 

Similaire à 도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다! (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 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기
 
Docker osc 0508
Docker osc 0508Docker osc 0508
Docker osc 0508
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
 
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
 
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
 
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
 
docker_quick_start
docker_quick_startdocker_quick_start
docker_quick_start
 
[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 Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1
 
Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호
 
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
 
[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다
[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다
[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
 
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
 
Docker.소개.30 m
Docker.소개.30 mDocker.소개.30 m
Docker.소개.30 m
 
[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
 
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
 
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
 

도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!

  • 1. 도커 무작정 따라하기 무작정 따라하기는 ㈜도서출판 길벗의 등록상표입니다. PYRASIS.COM 이재홍 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다! Version 1.0.3, 2015.2.9
  • 2. 이재홍 문서 이용 조건 2 교육 등의 비영리 목적으로만 사용해야 합니다. 사내 교육은 상관 없습니다. 회비, 참가비 등을 받는다면 영리 목적에 해당하므로 이 문서를 이용할 수 없습니다. 회비, 참가비를 받지 않는다 하더라도 마케팅 목적으로 진행되는 행사에는 이 문서를 사용할 수 없습니다.
  • 3. 이재홍 만든 사람 및 슬라이드 소개 3 이재홍 웹사이트: http://pyrasis.com 저서:  가장 빨리 만나는 도커(Docker)  아마존 웹 서비스를 다루는 기술  윈도우 프로젝트 필수 유틸리티: Subversion, Trac, CruiseControl.NET 이 슬라이드는 가장 빨리 만나는 도커의 내용을 요약한 슬라이드입니다. 가장 빨리 만나는 도커의 책 내용은 모두 웹사이트에 공개되어 있습니다.
  • 5. 이재홍 도커는 2013년 3월 Docker, Inc에서 출시한 오픈 소스 컨테이너 프로젝트 현재 전세계적으로 큰 인기를 끌고 있음 도커란 무엇인가? 도커 5
  • 6. 이재홍 AWS, Google Cloud Platform, Microsoft Azure 등의 클라우드 서비스에서 공식 지원 도커란 무엇인가? 도커 6
  • 8. 이재홍 도커란 무엇인가? 도커 복잡한 리눅스 애플리케이션을 컨테이너로 묶어서 실행할 수 있음
  • 9. 이재홍 도커란 무엇인가? 도커 개발, 테스트, 서비스 환경을 하나로 통일하여 효율적으로 관리할 수 있기 때문!
  • 12. 이재홍 도커란 무엇인가? 도커 리눅스 커널에서 제공하는 컨테이너 기술을 이용
  • 18. 이재홍 컴퓨터 안에서 컴퓨터를 만들어내기 위한 시도 1960년 대에 가상화 개념이 처음 등장 가상 머신의 등장 가상 머신과 도커 18
  • 19. 이재홍 컴퓨터 성능이 급격히 좋아지면서 PC에서도 흔히 사용 맥에서 인터넷 뱅킹을 한다던지… 가상 머신의 등장 가상 머신과 도커 19
  • 20. 이재홍 서버 성능은 더욱 더 좋아졌음 가상 머신의 등장 가상 머신과 도커 20
  • 21. 이재홍 그러다 보니 대부분의 시간을 서버가 놀고 있어 -_-; 가상 머신의 등장 가상 머신과 도커 21
  • 22. 이재홍 서버에 가상 머신을 여러 개 띄워서 일을 더 시키자! 가상 머신의 등장 가상 머신과 도커 22
  • 23. 이재홍 그리고 IT 기술이 보편화되면서 서버도 많아졌음 가상 머신의 등장 가상 머신과 도커 23
  • 24. 이재홍 서버 자체를 가상 머신에 집어넣어서 돌리자 가상 머신의 등장 가상 머신과 도커 24
  • 25. 이재홍 가상 머신에 각종 서버 프로그램, DB 등을 설치하여 애플리케이션이나 웹사이트를 실행 가상 머신의 등장 가상 머신과 도커 25
  • 26. 이재홍 미리 구축한 가상 머신 이미지를 여러 서버에 복사하여 실행하면 이미지 하나로 서버를 계속 만들어낼 수 있음 가상 머신의 등장 가상 머신과 도커 26
  • 27. 이재홍 가상화 기술을 이용하여 서버를 임대해주는 서비스가 클라우드 서비스 가상 머신의 등장 가상 머신과 도커 27
  • 28. 이재홍 그런데 가상 머신은 좀 문제가 있어 가상 머신의 문제점 가상 머신과 도커 28
  • 29. 이재홍 컴퓨터를 통째로 만들어내다 보니… 각종 성능 손실이 발생 가상 머신의 문제점 가상 머신과 도커 29
  • 30. 이재홍 인텔과 AMD는 CPU 안에 가상화 기능을 넣기 시작 가상 머신의 문제점 가상 머신과 도커 30
  • 31. 이재홍 그래도 느려… 가상 머신의 문제점 가상 머신과 도커 31
  • 32. 이재홍 호스트와 커널을 공유하는 반가상화 기술이 등장 가상 머신의 문제점 가상 머신과 도커 32
  • 33. 이재홍 이러나 저러나 가상 머신은… 가상 머신의 문제점 가상 머신과 도커 33
  • 34. 이재홍 가상 머신의 문제점 가상 머신과 도커 34 가상 머신은 완전한 컴퓨터 항상 게스트 OS를 설치해야 함 애플리케이션 A 애플리케이션 B 하이퍼바이저(Hypervisor) 실행 파일/라이브러리 게스트 OS 실행 파일/라이브러리 게스트 OS 호스트 OS 서버 https://www.docker.com/whatisdocker/
  • 35. 이재홍 가상 머신의 문제점 가상 머신과 도커 35 이미지 안에 OS가 포함되기 때문에 이미지 용량이 커짐 네트워크로 가상화 이미지를 주고 받는 건 꽤 부담스러움
  • 36. 이재홍 가상 머신의 문제점 가상 머신과 도커 36 오픈소스 가상화 소프트웨어는 OS 가상화에 만 주력  배포와 관리 기능이 부족
  • 37. 이재홍 가상 머신의 문제점 가상 머신과 도커 37 가상 머신의 성능 문제가 있다 보니 리눅스 컨테이너가 나옴
  • 38. 이재홍 컨테이너 안에 가상 공간을 만들지만 실행 파일을 호스트에서 직접 실행 리눅스 컨테이너 가상 머신과 도커 38
  • 39. 이재홍 이건 리눅스 커널의 cgroups와 namespaces가 제공하는 기술 리눅스 컨테이너 가상 머신과 도커 39
  • 40. 이재홍 가상화가 아닌 격리 리눅스 컨테이너 가상 머신과 도커 40
  • 41. 이재홍 도커는 리눅스 컨테이너를 사용!  초기에는 LXC(LinuX Container)를 기반으로 구현  버전 0.9부터는 LXC를 대신하는 libcontainer를 개발하여 사용  실행 옵션으로 선택 가능 리눅스 커널 LXC cgroups namespaces 도커 libvirt systemd-nspawn libcontainer http://blog.docker.com/2014/03/docker-0-9-introducing-execution-drivers-and-libcontainer 리눅스 컨테이너 가상 머신과 도커 41
  • 43. 이재홍 도커는 게스트 OS를 설치하지 않음 이미지에 서버 운영을 위한 프로그램과 라이브러리만 격리해서 설치 이미지 용량이 크게 줄어듦 호스트와 OS 자원(시스템 콜)을 공유 애플리케이션 A 애플리케이션 B 실행 파일/라이브러리 실행 파일/라이브러리 호스트 OS 서버 https://www.docker.com/whatisdocker/ 도커 엔진 도커의 특징 도커의 특징 43
  • 44. 이재홍 호스트 도커 컨테이너 1 0.9945CPU 1 0.9826메모리 쓰기 1 1.0025메모리 읽기 0.9811디스크 I/O 1 0.9626네트워크 1 도커는 하드웨어 가상화 계층이 없음  메모리 접근, 파일 시스템, 네트워크 전송 속도가 가상 머신에 비해 월등히 빠름  호스트와 도커 컨테이너 사이의 성능 차이가 크지 않음(오차 범위 안) 도커 1.1.2에서 우분투 14.04 호스트와 우분투 14.04 컨테이너 성능 측정 도커의 성능 도커의 특징 44
  • 45. 이재홍 도커의 특징 도커의 특징 45 그리고 도커는 이미지 생성과 배포에 특화
  • 46. 이재홍 도커의 특징 도커의 특징 46 이미지 버전 관리도 제공하고 중앙 저장소에 이미지를 올리고 받을 수 있음 (push/pull)
  • 47. 이재홍 도커의 특징 도커의 특징 47 GitHub와 비슷한 형태로 도커 이미지를 공유하는 Docker Hub 제공 (GitHub 처럼 유료 저장소도 제공)
  • 48. 이재홍 도커의 특징 도커의 특징 48 다양한 API를 제공하여 원하는 만큼 자동화 가능 개발과 서버 운영에 매우 유용!
  • 49. 이재홍 그런데 이미지와 컨테이너는 뭐가 다른 거지? 가상 머신의 문제점 가상 머신과 도커 49
  • 51. 이재홍 도커 이미지 도커 이미지와 컨테이너 51 이미지는 서비스 운영에 필요한 서버 프로그램, 소스 코드, 컴파일된 실행 파일을 묶은 형태
  • 52. 이재홍 도커 이미지 도커 이미지와 컨테이너 52 저장소에 올리고 받는건 이미지 (push/pull)
  • 53. 이재홍 도커 컨테이너 도커 이미지와 컨테이너 53 컨테이너는 이미지를 실행한 상태!
  • 54. 이재홍 도커 컨테이너 도커 이미지와 컨테이너 54 이미지로 여러 개의 컨테이너를 만들 수 있음
  • 55. 이재홍 도커 컨테이너 도커 이미지와 컨테이너 55 운영체제로 치면 이미지는 실행파일이고 컨테이너는 프로세스
  • 56. 이재홍 도커의 이미지 처리 방식 도커 이미지와 컨테이너 56 도커는 이미지의 바뀐 부분을 어떻게 관리하나?
  • 57. 이재홍 도커의 이미지 처리 방식 도커 이미지와 컨테이너 57 유니온 파일 시스템 형식 (aufs, btrfs, devicemapper)
  • 58. 이재홍 실행 파일/라이브러리 실행 파일/라이브러리 바뀐 부분 바뀐 부분 애플리케이션 A 베이스 이미지 도커 엔진 애플리케이션 A’ 애플리케이션 A’’ 애플리케이션 A + 바뀐 부분 애플리케이션 A 도커는 베이스 이미지에서 바뀐 부분만 이미지로 생성 컨테이너로 실행할 때는 베이스 이미지와 바뀐 부분을 합쳐서 실행 도커의 이미지 처리 방식 도커 이미지와 컨테이너 58 http://www.slideshare.net/dotCloud/why-docker
  • 59. 이재홍 도커의 이미지 처리 방식 도커 이미지와 컨테이너 59 Docker Hub 및 개인 저장소에서 이미지를 공유할 때 바뀐 부분만 주고 받음
  • 60. 이재홍 각 이미지는 의존 관계 형성 도커의 이미지 처리 방식 도커 이미지와 컨테이너 60
  • 62. 이재홍 지금까지의 서버 환경 서비스 운영 환경과 도커 62 지금까지는 물리 서버를 직접 운영 했음
  • 63. 이재홍 지금까지의 서버 환경 서비스 운영 환경과 도커 63 호스팅 또는 IDC 코로케이션 서비스 사용
  • 64. 이재홍 지금까지의 서버 환경 서비스 운영 환경과 도커 64 서버 구입과 설치에 돈이 많이 들고 시간이 오래 걸림
  • 65. 이재홍 클라우드 환경 서비스 운영 환경과 도커 65 가상화가 발전하면서 클라우드 환경으로 변화
  • 66. 이재홍 클라우드 환경 서비스 운영 환경과 도커 66 가상 서버를 임대하여 사용한 만큼만 요금 지불
  • 67. 이재홍 클라우드 환경 서비스 운영 환경과 도커 67 클릭 몇 번 만으로 가상 서버를 생성
  • 68. 이재홍 클라우드 환경 서비스 운영 환경과 도커 68 이젠 자동으로 서버를 추가하고 삭제하기까지…
  • 69. 이재홍 클라우드 환경 서비스 운영 환경과 도커 69 서버 대수가 많아지면서 사람이 일일이 세팅하기 힘들어짐
  • 70. 이재홍 클라우드 환경 서비스 운영 환경과 도커 70 이제 서버 세팅과 배포는 어떻게?
  • 71. 이재홍 Immutable Infrastructure 서비스 운영 환경과 도커 71 Immutable Infrastructure라는 패러다임이 나옴
  • 72. 이재홍 Immutable Infrastructure 서비스 운영 환경과 도커 72 호스트 OS와 서비스 운영 환경 (서버 프로그램, 소스 코드, 컴파일 된 바이너리)을 분리
  • 73. 이재홍 Immutable Infrastructure 서비스 운영 환경과 도커 73 한 번 설정한 운영 환경은 변경하지 않는다(Immutable)는 개념
  • 74. 이재홍 서비스 운영 환경을 이미지로 생성한 뒤 서버에 배포하여 실행 소스 코드 rev. 10 운영체제 서버 서비스 운영 환경 이미지 생성 배포 및 실행 소스 코드 rev. 11 소스 코드 rev. 12 소스 코드 rev. 12 운영체제 서버 소스 코드 rev. 12 Immutable Infrastructure 서비스 운영 환경과 도커 74
  • 75. 이재홍 Immutable Infrastructure 서비스 운영 환경과 도커 75 서비스가 업데이트되면 운영 환경 자체를 변경하지 않고, 이미지를 새로 생성하여 배포
  • 76. 이재홍 Immutable Infrastructure 서비스 운영 환경과 도커 76 클라우드 플랫폼에서 서버를 쓰고 버리는 것과 같이 Immutable Infrastructure도 서비스 운영 환경 이미지를 한 번 쓰고 버림
  • 77. 이재홍  서비스 환경 이미지만 관리하면 됨  중앙 관리를 통한 체계적인 배포와 관리  이미지 생성에 버전 관리 시스템 활용 편리한 관리  이미지 하나로 서버를 계속 찍어낼 수 있음  클라우드 플랫폼의 자동 확장(Auto Scaling) 기능과 연동하여 손쉽게 서비스 확장 확장  개발자 PC, 테스트 서버에서 이미지를 실행만 하면 서비스 운영 환경과 동일한 환경이 구성됨  테스트가 간편 테스트  운영체제와 서비스 환경을 분리하여 가볍고(Lightweight) 어디서든 실행 가능한(Portable) 환경 제공 가볍다 Immutable Infrastructure의 장점 서비스 운영 환경과 도커 77
  • 78. 이재홍 Immutable Infrastructure 서비스 운영 환경과 도커 78 도커는 Immutable Infrastructure를 구현한 프로젝트
  • 80. 이재홍 로고로 알아보는 도커 도커 요약 80 도커 고래 로고 많이들 보셨죠?
  • 81. 이재홍 로고로 알아보는 도커 도커 요약 81 컨테이너를 싣고 다니는 고래
  • 82. 이재홍 로고로 알아보는 도커 도커 요약 82 고래는 서버에서 여러 개의 컨테이너(이미지)를 실행하고 이미지 저장과 배포(운반)을 의미
  • 83. 이재홍 로고로 알아보는 도커 도커 요약 83 도커(Docker)는 부두 노동자를 뜻함 컨테이너를 다루는 도커의 기능과 비슷함
  • 84. 이재홍 도커는 서비스 운영 환경을 묶어서 손쉽게 배포하고 실행하는 경량 컨테이너 기술 Build Ship Run 도커를 요약하면 도커 요약 84
  • 86. 이재홍 도커 설치하기 도커 설치하기 86 이제 자신의 컴퓨터에서 명령을 실행하여 직접 도커를 설치하고 사용해봅니다.
  • 87. 이재홍  도커는 리눅스 배포판 종류를 자동으로 인식하여 도커 패키지를 설치해주는 스크립트를 제공 $ sudo wget –qO- https://get.docker.com/ | sh get.docket.com 스크립트로 도커를 설치하면 hello-world 이미지도 자동 설치됨. Hello-world 이미지는 사용하지 않을 것이므로 모두 삭제 $ sudo docker rm `sudo docker ps -aq` $ sudo docker rmi hello-world 자동 설치 스크립트 도커 설치하기: 리눅스 87
  • 88. 이재홍  자동 설치 스크립트를 사용하지 않고 우분투에서 직접 설치하기. 버전은 14.04 LTS 64비트 기준 $ sudo apt-get update $ sudo apt-get install docker.io $ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker /usr/bin/docker.io 실행 파일을 /usr/local/bin/docker로 링크하여 사용 우분투 도커 설치하기: 리눅스 88
  • 89. 이재홍  자동 설치 스크립트를 사용하지 않고 레드햇 엔터프라이즈 리눅스(RHEL)와 CentOS에서 패키지로 직접 설치하기  RHEL과 CentOS 6 패키지 저장소에는 docker-io가 없으므로 EPEL(Fedora Extra Packages For Enterprise Linux) 저장소를 사용할 수 있도록 설정 $ sudo yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm $ sudo yum install docker-io CentOS 6 RedHat Enterprise Linux, CentOS 도커 설치하기: 리눅스 89
  • 90. 이재홍  AWS EC2에 설치되는 Amazon Linux(RHEL 기반)는 EPEL 저장소를 바로 사용할 수 있으므로 epel-release-6-8.noarch.rpm을 설치하지 않아도 됨  CentOS 7에서는 docker 패키지를 설치 $ sudo yum install docker CentOS 7 $ sudo service docker start Docker 서비스 실행하기 $ sudo chkconfig docker on 부팅했을 때 자동으로 실행하기 RedHat Enterprise Linux, CentOS 도커 설치하기: 리눅스 90
  • 91. 이재홍  배포판 버전이 오래되었거나, CentOS 같이 버전업이 보수적인 배포판에서는 도커 패키지 버전이 낮은 경우가 있음  배포판 별 패키지가 아닌 빌드 된 바이너리를 직접 사용하는 방법 $ sudo service docker stop $ sudo wget https://get.docker.com/builds/Linux/x86_64/docker-latest -O $(type -P docker) $ sudo service docker start 이미 패키지로 설치했을 때 최신 바이너리 사용하기 도커 설치하기: 리눅스 91
  • 92. 이재홍 $ wget https://get.docker.com/builds/Linux/x86_64/docker-latest $ chmod +x docker-latest $ sudo mv docker-latest /usr/local/bin/docker $ sudo /usr/local/bin/docker -d 새로 설치할 때 URL을 docker-latest로 지정하면 가장 최신 버전을 받고, docker-1.3.0처럼 지정하면 특정 버전을 받음 최신 바이너리 사용하기 도커 설치하기: 리눅스 92
  • 93. 이재홍  Mac OS X에서는 Boot2Docker를 이용하여 도커를 사용할 수 있음  다음 URL에서 .pkg 파일을 받기 https://github.com/boot2docker/osx-installer/releases Mac OS X 도커 설치하기 93
  • 94. 이재홍  파일 다운로드가 끝났으면 .pkg 파일 실행  설치화면이 표시되면 계속 버튼을 클릭 Mac OS X 도커 설치하기 94
  • 95. 이재홍  기본 위치에 설치 Mac OS X 도커 설치하기 95
  • 96. 이재홍  암호 입력창이 표시되면 관리자 암호를 입력하고 소프트웨어 설치 버튼을 클릭 1 2 Mac OS X 도커 설치하기 96
  • 97. 이재홍  설치가 완료되었으면 닫기 버튼 클릭 Mac OS X 도커 설치하기 97
  • 98. 이재홍  Finder를 실행하고 응용 프로그램에서 boot2docker를 실행 1 2 Mac OS X 도커 설치하기 98
  • 99. 이재홍  boot2docker를 실행하면 터미널 창이 실행됨  잠시 기다리면 자동으로 boot2docker.iso를 이용하여 가상 머신이 생성되고, 가상 머신에 접속됨(Boot2Docker는 내부족으로 VirtualBox가 함께 설치됨) Mac OS X 도커 설치하기 99
  • 100. 이재홍  Windows에서는 Boot2Docker를 이용하여 Docker를 사용할 수 있음  다음 URL에서 docker-install.exe 파일을 받기 https://github.com/boot2docker/windows-installer/releases Windows 도커 설치하기 100
  • 101. 이재홍  파일 다운로드가 끝났으면 docker-install.exe 파일을 실행  설치 화면이 표시되면 Next 버튼을 클릭 Windows 도커 설치하기 101
  • 102. 이재홍  기본 위치에 설치  Next 버튼 클릭 Windows 도커 설치하기 102
  • 103. 이재홍  설치할 요소 선택  Boot2Docker Management script and ISO: Boot2Docker를 설치할 것이므로 반드시 선택  VirtualBox: VirtualBox를 설치하지 않았다면 이 부분을 선택  MSYS-git UNIX tools: Windows용 Git을 설치하지 않았다면 이 부분을 선택  선택이 완료되었으면 Next 버튼을 클릭 Windows 도커 설치하기 103
  • 104. 이재홍  시작 메뉴에 등록할 이름 설정  기본 값 그대로 사용하고 Next 버튼을 클릭 Windows 도커 설치하기 104
  • 105. 이재홍  Boot2Docker 경로를 환경 변수에 등록할지 설정  기본값 그대로 사용하고, Next 버튼을 클릭 Windows 도커 설치하기 105
  • 106. 이재홍  Install 버튼을 클릭하여 Boot2Docker를 설치 Windows 도커 설치하기 106
  • 107. 이재홍  설치가 완료되면 Finish 버튼을 클릭 Windows 도커 설치하기 107
  • 108. 이재홍  설치가 끝난 뒤 바탕화면에 생성된 Boot2Docker Start 아이콘을 더블 클릭. 만약 실행 파일 선택 창이 나오면 Git Bash의 sh.exe를 선택  명령 프롬프트 창이 표시된 뒤 잠시 기다리면 자동으로 boot2docker.iso를 이용하여 가상 머신이 생성되고, 가상 머신에 접속됨. 중간에 VirtualBox 관리가 권한 요청 창이 나오면 예(Y) 버튼을 클릭 Windows 도커 설치하기 108
  • 110. 이재홍 도커의 명령은 docker <명령> 형식 예) docker run, docker push 항상 root 권한으로 실행 docker <명령>+ 도커 명령 도커 사용해보기 110
  • 111. 이재홍 도커 사용해보기 도커 사용해보기 111 앞으로 나오는 모든 명령을 차례대로 입력하면서 실습을 진행합니다.
  • 112. 이재홍 docker search <이미지 이름> $ sudo docker search ubuntu NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Official Ubuntu base image 383 stackbrew/ubuntu Official Ubuntu base image 40 crashsystems/gitlab-docker A trusted, regularly updated build of GitL... 19 [OK] dockerfile/ubuntu Trusted Ubuntu (http://www.ubuntu.com/) Bu... 15 [OK] ubuntu-upstart Upstart is an event-based replacement for ... 7 cmfatih/phantomjs PhantomJS [ phantomjs 1.9.7, casperjs 1.1.... 5 [OK] dockerfile/ubuntu-desktop Trusted Ubuntu Desktop (LXDE) (http://lxde... 5 [OK] lukasz/docker-scala Dockerfile for installing Scala 2.10.3, Ja... 5 [OK] litaio/ruby Ubuntu 14.04 with Ruby 2.1.2 compiled from... 5 [OK]  Docker Hub에서 이미지 검색해보기  보통 ubuntu, centos, redis 등 OS나 프로그램 이름을 가진 이미지가 공식 이미지  나머지는 사용자들이 만들어서 공개한 이미지 search 명령으로 이미지 검색하기 도커 사용해보기 112
  • 113. 이재홍 도커는 Docker Hub(https://registry.hub.docker.com)를 통해 이미지를 공유하는 생태계가 구축되어 있음 유명 리눅스 배포판과 오픈 소스 프로젝트(Redis, Nginx 등)의 이미지를 모두 Docker Hub에서 구할 수 있음 이미지와 관련된 명령은 기본적으로 Docker Hub를 이용하도록 설정되어 있음 search 명령으로 이미지 검색하기 도커 사용해보기 113
  • 114. 이재홍  Docker Hub에서 이미지를 검색한 뒤 해당 이미지의 Tags 탭에서 이미지의 버전을 볼 수 있음 search 명령으로 이미지 검색하기 도커 사용해보기 114
  • 115. 이재홍  sudo를 매번 입력하지 않으려면? $ sudo su # 처음부터 root 계정으로 로그인하거나 sudo su 명령을 사용하여 root 계정으로 전환 $ sudo usermod -aG docker ${USER} $ sudo service docker restart 또는, 현재 계정을 docker 그룹에 포함(docker 그룹은 root 권한과 동일하므로 꼭 필요한 계정만 포함) 현재 계정에서 로그아웃한 뒤 다시 로그인 sudo 입력하지 않기 도커 사용해보기 115
  • 116. 이재홍 docker pull <이미지 이름>:<태그>  Docker Hub에서 우분투 이미지 받아보기  이미지 이름 뒤에 latest를 설정하면 최신 버전을 받음  ubuntu:14.04, ubuntu:12.10처럼 태그를 지정할 수 있음  이미지 이름에서 pyrasis/ubuntu처럼 / 앞에 사용자명을 지정하면 해당 사용자가 올린 이미지를 받음(공식 이미지는 사용자명이 붙지 않음)  호스트에 설치된 리눅스 배포판과 도커 이미지의 배포판 종류는 달라도 됨. 즉 CentOS에서 우분투 컨테이너를 실행할 수 있음 $ sudo docker pull ubuntu:latest pull 명령으로 이미지 받기 도커 사용해보기 116
  • 117. 이재홍 docker images  모든 이미지를 출력해보기 docker images ubuntu처럼 이미지 이름을 설정하면 이름은 같지만 태그가 다른 이미지가 출력됨 $ sudo docker images REPOSITORY TAG IMAGE ID CREATED V IRTUAL SIZE ubuntu latest e54ca5efa2e9 Less than a second ago 276.1 MB images 명령으로 이미지 목록 출력하기 도커 사용해보기 117
  • 118. 이재홍 docker run <옵션> <이미지 이름> <실행할 파일>  이미지를 컨테이너로 생성한 뒤 Bash 셸 실행해보기 ubuntu 이미지를 컨테이너로 생성한 뒤 ubuntu 이미지 않의 /bin/bash를 실행 -i(interactive), -t(Pseudo-tty) 옵션을 사용하면 실행된 Bash 셸에 입력 및 출력 가능 --name 옵션으로 컨테이너에 이름을 지정할 수 있음. 이름을 지정하지 않으면 도커가 자동으로 이름을 생성하여 지정 $ sudo docker run -i -t --name hello ubuntu /bin/bash run 명령으로 컨테이너 생성하기 도커 사용해보기 118
  • 119. 이재홍 cd, ls 명령으로 컨테이너 내부를 둘러본 뒤 exit를 입력하여 Bash 셸에서 빠져 나오기 우분투 이미지에서 /bin/bash 실행 파일을 실행했기 때문에 여기서 빠져나오면 컨테이너가 정지(stop)됨 run 명령으로 컨테이너 생성하기 도커 사용해보기 119
  • 120. 이재홍 $ sudo service docker restart # /etc/sysconfig/docker # # Other arguments to pass to the docker daemon process # These will be parsed by the sysv initscript and appended # to the arguments list passed to docker –d other_args="--selinux-enabled --exec-driver=lxc" unable to remount sys readonly: unable to mount sys as readonly max retries reached 참고 CentOS에서 다음과 같은 에러가 발생한다면 /etc/sysconfig/docker 파일에서 다음과 같이 –-exec-driver=lxc를 추가 Docker 서비스 재시작 run 명령으로 컨테이너 생성하기 도커 사용해보기 120
  • 121. 이재홍 docker ps  모든 컨테이너 목록을 출력하기  -a 옵션을 사용하면 정지된 컨테이너까지 모두 출력됨  옵션을 사용하지 않으면 실행되고 있는 컨테이너만 출력됨 $ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6338ce52d07c ubuntu:latest /bin/bash 4 seconds ago Exited (0) Less than a second ago hello 현재 컨테이너는 정지된 상태. 앞에서 컨테이너를 생성할 때 이름을 hello로 지정했으므로 컨테이너 목록에서도 hello로 표시 ps 명령으로 컨테이너 목록 확인하기 도커 사용해보기 121
  • 122. 이재홍 docker start <컨테이너 이름>  방금 정지한 컨터이너를 다시 시작하기 컨테이너 이름 대신 컨테이너 ID를 사용해도 됨 $ sudo docker start hello $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6338ce52d07c ubuntu:latest /bin/bash 15 minutes ago Up 3 seconds hello  컨테이너를 시작했으면 컨테이너 목록 출력해보기 hello 컨테이너가 시작되었음 start 명령으로 컨테이너 시작하기 도커 사용해보기 122
  • 123. 이재홍 docker restart <컨테이너 이름>  OS 재부팅처럼 컨테이너를 다시 시작해보기 컨테이너 이름 대신 컨테이너 ID를 사용해도 됨 $ sudo docker restart hello restart 명령으로 컨테이너 재시작하기 도커 사용해보기 123
  • 124. 이재홍 docker attach <컨테이너 이름>  방금 시작한 컨테이너에 접속해보기  명령을 실행한 뒤 엔터를 한 번 더 입력하면 Bash 셸이 표시됨  컨테이너 이름 대신 컨테이너 ID를 사용해도 됨  여기서는 /bin/bash를 실행했기 때문에 명령을 자유롭게 입력할 수 있음. 단 DB나 서버 애플리케이션을 실행하면 입력은 할 수 없고 출력만 보게됨  Bash 셸에서 exit 또는 Ctrl+D를 입력하면 컨테이너가 정지됨 $ sudo docker attach hello root@6338ce52d07c:/# 여기서는 Ctrl+P, Ctrl+Q를 차례대로 입력하여 컨테이너를 정지하지 않고, 빠져 나오기 attach 명령으로 컨테이너에 접속하기 도커 사용해보기 124
  • 125. 이재홍 docker exec <컨테이너 이름> <명령> <매개 변수>  현재 컨테이너가 /bin/bash로 실행된 상태  /bin/bash를 통하지 않고 외부에서 컨테이너 안의 명령 실행해보기  컨테이너 이름 대신 컨테이너 ID를 사용해도 됨  컨테이너가 실행되고 있는 상태에서만 사용할 수 있으며 정지된 상태에서는 사용할 수 없음 $ sudo docker exec hello echo "Hello World" Hello World 컨테이너 안의 echo 명령을 실행하고 매개 변수로 "Hello World"를 지정했기 때문에 Hello World가 출력됨  docker exec 명령은 이미 실행된 컨테이너에 apt-get, yum 명령으로 패키지를 설치하거나 각종 데몬을 실행할 때 활용 exec 명령으로 외부에서 컨테이너 안의 명령 실행하기 도커 사용해보기 125
  • 126. 이재홍 docker stop <컨테이너 이름>  먼저 실행된 컨테이너 목록 출력하기 $ sudo docker stop hello hello 컨테이너를 정지했기 때문에 아무것도 나오지 않음 $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6338ce52d07c ubuntu:latest /bin/bash 51 minutes ago Up 2 minutes hello  컨테이너 정지해보기(컨테이너 이름 대신 컨테이너 ID도 사용해도 됨)  실행된 컨테이너 목록을 출력해보기 $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES stop 명령으로 컨테이너 정지하기 도커 사용해보기 126
  • 127. 이재홍 docker rm <컨테이너 이름>  생성된 컨테이너를 삭제해보기 $ sudo docker rm hello hello 컨테이너를 삭제했기 때문에 아무것도 나오지 않음  모든 컨테이너 목록을 출력해보기 $ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 컨테이너 이름 대신 컨테이너 ID를 사용해도 됨 rm 명령으로 컨테이너 삭제하기 도커 사용해보기 127
  • 128. 이재홍 docker rmi <이미지 이름>:<태그>  이미지 삭제해보기 $ sudo docker rmi ubuntu:latest ubuntu 이미지를 삭제했기 때문에 아무것도 나오지 않음  이미지 목록을 출력해보기 $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE  이미지 이름 대신 이미지 ID를 사용해도 됨  docker rmi ubuntu처럼 이미지 이름만 지정하면 태그는 다르지만 ubuntu 이름을 가진 모든 이미지가 삭제됨 rmi 명령으로 이미지 삭제하기 도커 사용해보기 128
  • 130. 이재홍 Dockerfile 도커 이미지 설정 파일 Dockerfile에 설정된 대로 이미지를 생성하게 됨 Dockerfile 작성하기 도커 이미지 생성하기 130
  • 131. 이재홍  먼저 example 디렉터리를 생성한 뒤 example 디렉터리로 이동하기 ~$ mkdir example ~$ cd example Dockerfile 작성하기 도커 이미지 생성하기 131
  • 132. 이재홍  다음 내용을 example 디렉터리 아래에 Dockerfile로 저장하기  우분투 14.04를 기반으로 nginx 서버를 설치한 도커 이미지를 생성하는 예제 FROM ubuntu:14.04 MAINTAINER Foo Bar foo@bar.com RUN apt-get update RUN apt-get install -y nginx RUN echo "ndaemon off;" >> /etc/nginx/nginx.conf RUN chown -R www-data:www-data /var/lib/nginx VOLUME ["/data", "/etc/nginx/site-enabled", "/var/log/nginx"] WORKDIR /etc/nginx CMD ["nginx"] EXPOSE 80 EXPOSE 443 example/Dockerfile # 어떤 이미지를 기반으로 할지 설정. <이미지 이름>:<태그> 형식 # 메인테이너 정보 # RUN으로 셸 스크립트 혹은 명령 실행 # 이미지 생성 중에는 사용자 입력을 받을 수 없으므로 apt-get install에서 –y 옵션 사용 # 호스트와 공유할 디렉터리 목록 # 다음 CMD에서 설정한 실행 파일이 실행될 디렉터리 # 컨테이너가 시작되었을 때 실행할 실행 파일 또는 스크립트 # 호스트와 연결할 포트 번호 Dockerfile 작성하기 도커 이미지 생성하기 132 https://github.com/pyrasis/dockerbook/blob/master/Chapter04/Dockerfile
  • 133. 이재홍 docker build <옵션> <Dockerfile 경로>  앞에서 작성한 Dockerfile로 이미지 생성해보기  Dockerfile이 저장된 example 디렉터리에서 명령 실행 ~/example$ sudo docker build --tag hello:0.1 . hello:0.1 이미지가 생성됨  --tag 옵션으로 이미지 이름과 태그를 설정할 수 있음  이미지 이름만 설정하면 태그는 latest로 설정됨  잠시 기다리면 이미지가 생성됨. 이미지 목록 출력해보기 $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu 14.04 e54ca5efa2e9 Less than a second ago 276.1 MB ubuntu latest e54ca5efa2e9 Less than a second ago 276.1 MB hello 0.1 2031ee0736e8 9 minutes ago 298.4 MB build 명령으로 이미지 생성하기 도커 이미지 생성하기 133
  • 134. 이재홍  앞에서 생성한 이미지를 실행해보기 $ sudo docker run --name hello-nginx -d -p 80:80 -v /root/data:/data hello:0.1  -d 옵션은 컨테이너를 백그라운드로 실행  -p 80:80 옵션으로 호스트의 80번 포트와 컨테이너의 80번 포트를 연결하고 외부에 노출  -v /root/data:/data 옵션으로 호스트의 /root/data 디렉터리를 컨테이너의 /data 디렉터리에 연결 build 명령으로 이미지 생성하기 도커 이미지 생성하기 134
  • 135. 이재홍  실행된 컨테이너 목록을 출력해보기 $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3c06a0bebab6 hello:0.1 nginx 10 minutes ago Up 10 minutes 443/tcp, 0.0.0.0:80->80/tcp hello-nginx hello-nginx 컨테이너가 실행되었음 웹 브라우저를 실행하고 http://<호스트 IP>:80으로 접속하면 Welcome to nginx! 페이지가 표시됨 build 명령으로 이미지 생성하기 도커 이미지 생성하기 135
  • 136. 이재홍  만약 Boot2Docker를 사용한다면?  Boot2Docker는 가상 머신 안에 도커를 실행한 것이므로 호스트 IP로는 ngnix에 바로 접속할 수 없다.  boot2docker ip 명령으로 가상 머신의 IP 주소 알아내기  Windows에서는 Git Bash에서 다음 명령 실행 $ boot2docker ip The VM's Host only interface IP address is: 192.168.59.103 Boot2Docker 가상 머신의 IP 주소가 출력됨 웹 브라우저를 실행하고 http://<Boot2Docker VM의 IP>:80으로 접속하면 Welcome to nginx! 페이지가 표시됨 build 명령으로 이미지 생성하기 도커 이미지 생성하기 136
  • 137. 이재홍 더 자세한 내용은... 137 더 자세한 내용은 가장 빨리 만나는 도커를 참조해주세요. 책 내용은 모두 웹사이트에 공개되어 있습니다. http://www.pyrasis.com/private/2014/11/30/publish-docker-for-the- really-impatient-book  Docker 개인 저장소 구축하기  Dockerfile 상세 설명  Docker로 애플리케이션 배포하기  Docker 모니터링하기  Amazon Web Services에서 Docker 사용하기  Google Cloud Platform에서 Docker 사용하기  Microsoft Azure에서 Docker 사용하기  Docker Hub 사용하기  Docker Remote API 사용하기  CoreOS 사용하기  Docker로 워드프레스 블로그 구축하기(MySQL)  Docker로 Ruby on Rails 애플리케이션 구축하기(MySQL, PostgreSQL)  Docker로 Django 애플리케이션 구축하기(Oracle, MySQL, PostgreSQL)  Docker 활용 시나리오  Docker 명령어 및 옵션 목록
  • 138. 이재홍 YouTube 동영상 강의 138 생활코딩 이고잉님과 함께하는 저의 동영상 강의입니다. https://www.youtube.com/watch?v=Bhzz9E3xuXY