docker osc 0508

61
1 2015. 5. 8 ㈜ ㈜㈜㈜㈜㈜㈜㈜ ㈜㈜㈜ , ㈜㈜㈜ Docker (with openstack)

Upload: open-source-consulting

Post on 06-Aug-2015

1.562 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: Docker osc 0508

1

2015. 5. 8

㈜ 오픈소스컨설팅

김호진 , 박현익

Docker(with openstack)

Page 2: Docker osc 0508

2http://www.redbooks.ibm.com/redbooks/pdfs/sg248199.pdf

김 호 진 부장

Manager / Principal Engineer IT infrastructure services

Open Source Consulting, Inc.

PMP/AIX EXPERT/RHCE/RHCVA/OPENSTACK 

박현익 과장

Park, hyun-ikManager

Open Source Consulting, Inc.

RHCE/RHCVA 

Page 3: Docker osc 0508

3

ContentsContents1.1. Why Docker?

1.11.1 가상화 vs Docker

1.21.2 Docker 의 성능비교

2.2. Docker 구축

2.12.1 Docker 구축 기초

2.22.2 Docker 로 WEB 서비스 구축

3.3. Openstack 위의 Docker

3.13.1 오픈스택에 docker 를 연결

2.32.3 Docker & Java

3.23.2Openstack 위에 Docker 로 WEB 서비스 구축

Page 4: Docker osc 0508

4

경쟁사보다 더 빠른 서비스와 더 많은 기능이 필요

규정준수와 인프라 보안 검증이 필수적임

Why Docker?

IT CEO 비즈니스 영속성과 효율성 사이의 갈등

LINE OF BUSINESS 빠른 서비스가 필요하고 , 더 많은 기능들이 필요 어플리케이션을 추가 / 신규 / 수정이 요청되고 , 이를 위해 더 빠른 인프라 서비스를 요청인프라 / 보안 규정준수와 인프라 보안이 필수 / 한정된 예산

Page 5: Docker osc 0508

5

Why Docker?

Docker 가 아래것을 해결해 줄수 있다면 ?

IT 변화 / 혁신을 위한 절대적 시간이 부족하고 , 기존 legacy 인프라를 활용하는 것으로 해결이 불가능이를 극복하는 대안으로 리소스를 효율적으로 사용하면서 , 비용을 줄이는 방법 대두 Docker

빠른 비즈니스 대응개발자 생산성 증대

클라우드 같은 더 빠르고 큰 확장성

Page 6: Docker osc 0508

6

Why Docker?

Containers 는 새로운 기술이 아니다 .

Conatiner 는 새로운 기술이 아니며 , 인프라의 발전된 형태로 이미 대부분 사용중임 .

도커는 오픈소스 프로젝트이자 리눅스 컨테이너에 초점을 맞춘 신생업체의 이름컨테이너 (Container) 란 여러 개의 애플리케이션을 단일 호스트에서 구동하기 위한 개념대부분 cloud 환경 ( AWS,Google Cloud Platform,Azure) 에서 공식 지원

cgoups

워크로드가 필요로 하는 컴퓨트와 메모리 , 디스크 I/O 를 정의

Namespaces

워크로드를 구분하고 격리 .

Page 7: Docker osc 0508

7

Why Docker?

Containers 는 새로운 기술이 아니다 .

Conatiner 는 새로운 기술이 아니며 , 인프라의 발전된 형태로 이미 대부분 사용중임 .

출처 : http://www.enterprisetech.com/2014/08/18/ibm-techies-pit-Docker-kvm-bare-metal/

Page 8: Docker osc 0508

8

Why Docker?

Containers 는 새로운 기술이 아니다 .

Conatiner 는 새로운 기술이 아니며 , 인프라의 발전된 형태로 이미 대부분 사용중임 .

도커는 리눅스 컨테이너를 사용 ! 초기에는 LXC(LinuX Container) 를 기반으로 구현 버전 0.9 부터는 LXC 를 대신하는 libcontainer 를 개발하여 사용

실행 옵션으로 선택 가능

출처 : http://blog.Docker.com/2014/03/Docker-0-9-introducing-execution-drivers-and-libcontainer/

구글의 모든 서비스들은 컨테이서안에서 실행된다 .

구글 사내의 어플리케이션을 포함한 구글의 모든 서비스들은 모두 이 컨테이너 안에서 실행되고 있다 .

구글은 매주 20 억개 이상의 컨테이너를 기동하고 있다 .

Page 9: Docker osc 0508

9

Why Docker?

Docker 로 해결할 수 있는 문제

기업에서 container 기술로 해결하고자 하는 문제

애플리케이션의 빠른 이식성 / 더 빠른 애플리케이션의 완성 / 배포의 유연성 / 더 빠른 애플리케이션 자원 최적화

Page 10: Docker osc 0508

10

가상화와 도커의 차이

Docker 란 ?

애플리케이션과 그 실행환경을 모두 포함한 소프트웨어 패키지 Host OS 에 상관없이 배포가 쉽고 , 유연함Host OS 와 애플리케이션을 분리

virtual machine Docker

• Booting 시 수분이 걸림 ( 부팅동안 , 많은 취약점과 장애발생 소지 ) 패치하고 , 버전관리하는데 많은 노동력 집중 /hy-pervisor 와 guestOS 를 통시에 관리하고 , 보안취약점을 검증하여야 함 간단한 OS   프로세스를 위해서도 새로운 가상머신이 필요함 . ( 비실용적 ) 리소스사용량이 많음 . 

• 낮은 비용 빠른 어플리케이션 개발 보안 간편성 새로운 IT 에 적용가능 ( 하이브리드 클라우드 ) 다른 버전도 같은 이미지에서 운영가능

Linux Containers: Why They’re in Your Future and What Has to Happen First : redhat / cisco (2014.9)

Page 11: Docker osc 0508

11

가상화와 도커의 차이

가상화 대비 도커의 장점

애플리케이션과 그 실행환경을 모두 포함한 소프트웨어 패키지 Host OS 에 상관없이 배포가 쉽고 , 유연함Host OS 와 애플리케이션을 분리

출처 : http://www.channelinsider.com/tech-analysis/slideshows/linux-investments-looking-up-for-2015.html

* 환경구성 소요시간

Page 12: Docker osc 0508

12

Docker 의 성능비교

CPU/MEMORY 성능

A. CPU –PXZ 툴로 data 압축을 통해 cpu 부하를 주면 , bare metal 과 Docker 는 비슷하지만 , kvm 은 22% 정도 성능 저하가 옴 .

B. HPC—Linpack 툴로 연산부하도 역시 비슷한 결과치를 냈으나 , kvm 을 tune 할 경우 차이가 그리 크지 않음 .

C. Memory bandwidth—Stream – 메모리 관련하여서는 streaming 테스트 시 크게 차이가 나지 않음 .

D. Random Memory Access—RandomAccess – 메모리 관련하여서는 랜덤 억세스 시 크게 차이가 나지 않음 .

출처 : http://blog.Docker.com/2014/03/Docker-0-9-introducing-execution-drivers-and-libcontainer/

Page 13: Docker osc 0508

13

Docker 의 성능비교

Network 성능

E. Network bandwidth—nuttcp

실제 도커의 경우 NAT 를 사용하면 , 성능저하가 발생하였으나 , kvm 보다는 더 좋은 성능을 나타내었다 .

이 경우 , nat overhead 를 줄이기 위해서는 – net=host option 을 줄경우 baremetal 과 거의 동일한 성능을 제공한다 .

• F. Network latency—netperf

NAT 로 할경우 꽤 많은 성능저하가 발생하였다 . 이 역시 – net=host option 을 줄경우 baremetal 과 거의 동일한 성능을 제공한다 .

출처 : http://blog.Docker.com/2014/03/Docker-0-9-introducing-execution-drivers-and-libcontainer/

Page 14: Docker osc 0508

14

Docker 의 성능비교

Disk I/O

G. Block I/O—fio도커와 kvm 의 성능저하는 거의 없음 .

그러나 IOPS 의 경우는 Docker 와 baremetal 과는 거의 차이가 없으나 , kvm 의 경우는 qume 를 통한 I/O operation 때문에 성능 저하가 눈에 띄게 나타남 .

출처 : http://blog.Docker.com/2014/03/Docker-0-9-introducing-execution-drivers-and-libcontainer/

Page 15: Docker osc 0508

15

Docker 의 성능비교

Application test

Redis NoSQL data store and MySQL databasecpu 가 부족하게 될때 , I/O latency overhead 가 증가함 . Docker 는 lxc-sytle 의 container 를 사용하기 쉽게 하기 위해서 , NAT 와 AUFS 를 사용했는데 , 반대급부로 성능저하를 야기시킨다 . Network namespace 를 없애는 것이 (-net=host) NAT 로 인한 성능저하를 막는다 . Filesystem 을 사용하는 application 이나 disk job 이 많을 경우 , AUFS 를 사용하지 말고 , volume 을 사용하기를 권장함

출처 : http://blog.Docker.com/2014/03/Docker-0-9-introducing-execution-drivers-and-libcontainer/

Fig. 8. Evaluation of NoSQL Redis performance (requests/s) on multiple deployment scenarios

Fig. 10. MySQL throughput (transactions/s) vs. concurrency

Page 16: Docker osc 0508

16

ContentsContents1.1. Why Docker?

1.11.1 가상화 vs Docker

1.21.2 Docker 의 성능비교

2.2. Docker 구축

2.12.1 Docker 구축 기초

2.22.2 Docker 로 WEB 서비스 구축

3.3. Openstack 위의 Docker

3.13.1 오픈스택에 docker 를 연결

2.32.3 Docker & Java

3.23.2Openstack 위에 Docker 로 WEB 서비스 구축

Page 17: Docker osc 0508

17

Docker 구축 기초

Cent OS 기본 설정

인터페이스 이름 변경합니다

NetworkManager 정지합니다

Page 18: Docker osc 0508

18

Docker 구축 기초

Cent OS 기본 설정

인터페이스 파일 생성합니다

기본 네트워킹 툴 설치합니다

Page 19: Docker osc 0508

19

Docker 구축 기초

Docker 패키지 설치

2.6.32-431 또는 상위 버전이 필요하며 RHEL 6.5 부터 지원합니다CentOS 7 은 CentOS Extra 레포지터리에 기본적으로 Docker 가 포함되어 있습니다

firewalld 정지 ( 운영시에는 각 컨테이너가 사용하는 포트를 오픈 ) 합니다

Cent OS 기본 설정

Page 20: Docker osc 0508

20

Docker 구축 기초

Docker 패키지 설치

CentOS 7 은 CentOS Extra 레포지터리에 기본적으로 Docker 가 포함되어 있습니다최신 버전을 사용하기 위해 Binary 설치를 진행합니다

Docker 실행

Page 21: Docker osc 0508

21

Docker 구축 기초

Docker 사용자

도커 데몬은 Unix Socket Binding 을 사용합니다Unix Socket 을 사용하기 위해서는 루트 권한이 필요하며 도커를 사용하는 사용자는 결과적으로 sudo 권한이 필요합니다도커 데몬은 항상 root 권한으로 실행되어야 합니다Docker 를 사용하려는 유저모두에게 sudo 권한을 주는 것은 쉽지는 않습니다docker 그룹을 생성 / docker 그룹에 포함된 사용자는 docker 를 사용할 수 있습니다기본적으로 docker 를 사용하는 유저는 신뢰성이 있는 사용자이어야 합니다

Page 22: Docker osc 0508

22

?

Docker 구축 기초

Docker Command

Dockerfile 을 통하여 이미지를 생성

Docker 이미지를 컨트롤

실행중인 컨테이너 강제종료

컨테이너 리스트를 확인

rm : 컨테이너 삭제rmi : 이미지 삭제

run : 컨테이너에서 실행할 명령어

컨테이너 시작

컨테이너 정지

?

Page 23: Docker osc 0508

23

Docker 구축 기초

Docker Hub

docker site 에 가입합니다Hub.docker.com 에서 검색이 가능합니다

[root@Tiger ~]# docker loginUsername: oscinfraPassword: Email: [email protected] Succeeded

Page 24: Docker osc 0508

24

Docker 구축 기초

도커 Hub 에서 이미지를 다운 받습니다

이미지 다운

다운로드한 이미지를 확인합니다

Page 25: Docker osc 0508

25

Docker 구축 기초

다운로드한 이미지를 컨테이너로 실행합니다

컨테이너 실행

컨테이너에서 bash 쉘을 실행한 화면입니다

Page 26: Docker osc 0508

26

ContentsContents1.1. Why Docker?

1.11.1 가상화 vs Docker

1.21.2 Docker 의 성능비교

2.2. Docker 구축

2.12.1 Docker 구축 기초

2.22.2 Docker 로 WEB 서비스 구축

3.3. Openstack 위의 Docker

3.13.1 오픈스택에 docker 를 연결

2.32.3 Docker & Java

3.23.2Openstack 위에 Docker 로 WEB 서비스 구축

Page 27: Docker osc 0508

27

Docker 로 WebService 구축

컨테이너 구동을 위한 이미지 생성

Dockerfile 을 생성합니다

도커 이미지를 어떻게 만들 것인지 정의 하는 파일

Base 이미지를 정의하며 , 항상 가장 먼저 정의하는 부분

이미지의 저작자와 E-mail 정보를 표기

실제로 컨테이너 구동 후 내부에서 실행되는 명령어

컨테이너 내부에서 사용할 포트

컨테이너가 시작되었을때 실행할 파일 또는 스크립트

Page 28: Docker osc 0508

28

Docker 로 WebService 구축

컨테이너 구동을 위한 이미지 생성

Dockerfile 을 통한 이미지를 생성합니다Dockerfile 로 부터 이미지

생성

각 Step 마다 로그를 출력

도커 이미지 빌드는 캐쉬를 제공

각 Step 마다 이미지를 생성

최종이미지 생성 완료

Page 29: Docker osc 0508

29

Docker 로 WebService 구축

컨테이너 구동을 위한 이미지 생성

생성된 이미지 정보 확인합니다

모든 이미지 리스트를 확인합니다

중간과정의 이미지가 보존 됨

Page 30: Docker osc 0508

30

Docker 로 WebService 구축

컨테이너 구동

생성된 이미지로 컨테이너를 구동합니다

osci/nginx 이미지를 사용하여 osci-nginx 라는 컨테이너를 생성하는 명령어

Docker 호스트서버의 49153 포트를 컨테이너의 80 포트와 매핑한 상태

컨테이너 생성시 컨테이너 ID 출력

컨테이너가 실행되면서 수행한 커맨드 내용 출력

Page 31: Docker osc 0508

31

Docker 로 WebService 구축

WebServer 접근

docker 컨테이너 정보를 확인하여 dockerhost 에 매핑된 포트로 접근합니다

Page 32: Docker osc 0508

32

Docker 로 WebService 구축

실제 운영시 Webserver 구성

컨테이너에는 최소한의 것만 담아 넣어야 합니다어플리케이션의 실제 데이터는 호스트에 보관합니다여러개의 웹컨테이너가 하나의 호스트 데이터에 접근하여 실행가능합니다

호스트의 데이터를 매핑하여 nginx 컨테이너 기동

-v 옵션으로 호스트의 /var/www/nginx/html 디렉토리를 컨테이너의 /usr/share/nginx/html 에 매핑

docker inspect 옵션으로 실행중인 컨테이너의 볼륨 정보를 확인

Page 33: Docker osc 0508

33

Docker 로 WebService 구축

html 파일 수정컨테이너가 실행중에 /var/www/nginx/html/index.html 파일을 수정 후 저장합니다웹페이지를 갱신하면 수정사항이 즉시 반영됩니다

Page 34: Docker osc 0508

34

ContentsContents1.1. Why Docker?

1.11.1 가상화 vs Docker

1.21.2 Docker 의 성능비교

2.2. Docker 구축

2.12.1 Docker 구축 기초

2.22.2 Docker 로 WEB 서비스 구축

3.3. Openstack 위의 Docker

3.13.1 오픈스택에 docker 를 연결

2.32.3 Docker & Java

3.23.2Openstack 위에 Docker 로 WEB 서비스 구축

Page 35: Docker osc 0508

35

Docker & Java

개발 환경어플리케이션 개발환경에서는 다양한 버전의 java 가 필요한 경우가 있습니다각 어플리케이션 별로 경로를 변경해야하는 번거로움이 발생합니다

1.5 1.6 1.5 1.6

Page 36: Docker osc 0508

36

Docker & Java

컨테이너별로 다른 java 를 사용어플리케이션 데이터는 호스트의 볼륨으로 컨테이너별 공유가 가능합니다원하는 java 버전의 컨테이너로 어플리케이션을 동시 수행가능합니다

도커호스트

1.5 1.6 1.5 1.6

Page 37: Docker osc 0508

37

Docker & Java

구현

도커를 통하여 실제로 구현해 봅니다

Page 38: Docker osc 0508

38

ContentsContents1.1. Why Docker?

1.11.1 가상화 vs Docker

1.21.2 Docker 의 성능비교

2.2. Docker 구축

2.12.1 Docker 구축 기초

2.22.2 Docker 로 WEB 서비스 구축

3.3. Openstack 위의 Docker

3.13.1 오픈스택에 docker 를 연결

2.32.3 Docker & Java

3.23.2Openstack 위에 Docker 로 WEB 서비스 구축

Page 39: Docker osc 0508

39

왜 Docker on Openstack 인가 ?

Openstack + kvm / docker

Openstack 은 전반적인 datacenter 운영KVM 기반 가상화는 컴퓨터 자원관리 측면 Docker 는 어플리케이션 배포관련 컨테이너

http://docs.openstack.org/juno http://behindtheracks.com/category/juno/

Openstack 은 클라우드 인프라 스트럭처에서 제공해 주는 멀티테넌트의 보안 및 격리 , 관리 및 모니터링 , 스토리지 및 네트워킹등은 전반적인 datacenter 운영 기반

오픈스택위에 리소스 개수에 따른 CPU 사용률

Docker 는 높은 이식성 , 하드웨어 , Framework독립적인 컨테이너 .

속도 / 효율성 / 이동성

더 적은 메모리 /CPU OVERHEAD

Kvm/vmwaere/virtual machine 어디든도커라는것을 인식하지 못한채 리눅스 컨테이너 관리가능

오픈스택위에 리소스 개수에 따른 매모리 사용률

Page 40: Docker osc 0508

40

Benchmark Environment Topology

glance api / reg

nova api / cond / etc

keystone

rally

nova api / cond / etc

cinder api / sch / vol

docker lxc

dstat

controller compute node

glance api / reg

nova api / cond / etc

keystone

rally

nova api / cond / etc

cinder api / sch / vol

KVM

dstat

controller compute node

04/15/2023

+Awesome!

+Awesome!

Page 41: Docker osc 0508

41

Benchmark 결과 데이타 @ SoftLayer

41http://www.slideshare.net/BodenRussell/kvm-and-docker-lxc-benchmarking-with-openstack

• Cloudy operations with Docker LXC outperform VM• 48x server reboot, 1.5x server boot, 1.62x server snapshot, etc.

• Docker LXC density potential compared to VMs• 3x 메모리 절약 • 26x CPU 절약• 3.22x 더 작아진 이미지 • Docker LXC containers 는 bare metal 에서 돌리는것이 가상화위에서 돌리는것보다 같거나 더 나은 성능을 나타냄

• Env • Openstack : havana/icehouse• devstack • lxc-docker-0.10.0• Ubnutu 12.04

Page 42: Docker osc 0508

42

Openstack env

OpenStack Juno Install with Neutron on CentOS 7

3 nodes configuration (default)

3 networks configuration ( tunnel=>gre)

Local cinder ( limits of Test Bed), but disk was divided to another disk (uses alone)

http://docs.openstack.org/juno http://behindtheracks.com/category/juno/

192.168.0.0/24

Page 43: Docker osc 0508

43

Openstack env

OpenStack Juno Install with Neutron on CentOS 7

후에 최종적으로 4 node configuration 으로 변환될 예정임 . (+1 compute node)

http://docs.openstack.org/juno http://behindtheracks.com/category/juno/

첫번째 eth0 에는 각기 아래 ip 가 부여됩니다 .(Mgt network)• juno-controller: 192.168.32.181 / juno-network: 192.168.32.182 • juno-compute01: 192.168.32.183 / juno-compute02: 192.168.32.184

두번째 eth1 에는 각기 아래 ip 가 부여됩니다 . (tunneling network)* juno-network: 192.168.33.182 / juno-compute01: 192.168.33.183 / juno-compute02: 192.168.33.184

세번째 eth2 에는 floating IP 를 가지게 됩니다 . (public network-floating)* juno-network: pulbic IP 는 따로 IP 를 주지 않음 .

Page 44: Docker osc 0508

44

What to do during 20 min.

Docker + openstack

Docker 와 openstack 의 연동 필요성Docker 와 openstack 을 연동하기

출처 : https://wiki.openstack.org/wiki/Docker

Page 45: Docker osc 0508

45

Connect to Openstack

Docker prerequsite

Install python-pip/git/gcc/wget/lynx

Install Oslo.logyum install -y python-pip git gcc wgetyum install -y dockerusermod -G docker novaservice openstack-nova-compute restartpip install pbr wget https://pypi.python.org/packages/source/o/oslo.log/oslo.log-0.4.0.tar.gz#md5=e02b6feebe849c8bae50b5c329f7a9e0Lstar -xvf oslo.log-0.4.0.tar.gzcd ./oslo.log-0.4.0python setup.py install ; pip install pbr

Nova-docker

Install nova-docker

git checkout stable/juno

git clone https://github.com/stackforge/nova-docker.git cd nova-docker/ git checkout stable/juno python setup.py install

Page 46: Docker osc 0508

46

Change openstack setting

Setting env

chmod 666 /var/run/docker.sock

mkdir /etc/nova/rootwrap.d

mkdir /etc/nova/rootwrap.dcat /etc/nova/rootwrap.d/docker.filters# nova-rootwrap command filters for setting up network in the docker driver# This file should be owned by (and only-writeable by) the root user[Filters]# nova/virt/docker/driver.py: 'ln', '-sf', '/var/run/netns/.*'ln: CommandFilter, /bin/ln, root

service docker startchmod 660 /var/run/docker.sock

cat /etc/nova/nova.conf # compute dirver 바꾸기 compute_driver = novadocker.virt.docker.DockerDriver

cat /etc/glance/glance-api.conf # container 형식으로 지원변경 container_formats=ami,ari,aki,bare,ovf,ova,docker

service openstack-glance-api restartservice openstack-nova-compute restart

Page 47: Docker osc 0508

47

Make glance image

Setting env

check docker

Check the openstack

$ docker pull busybox$ docker save busybox | glance image-create --is-public=True --container-format=docker --disk-format=raw --name busyboxnova keypair-add mykey > mykey.pemnova boot --flavor m1.small --image cirros --key-name mykey test1nova listssh -i ../devstack/mykey.pem cirros@<IP ADDRESS>

docker pull busybox:latest cd source keystonerc_admin docker save busybox | glance image-create --is-public=True --container-format=docker --disk-format=raw --name busybox glance image-list nova boot --image busybox --flavor m1.tiny --nic net-id a937454d-a905-43d2-818d-8fc5a920d8f2 busyboxdocker ps -a docker attach <CONTAINER ID from command above>

Page 48: Docker osc 0508

48

Check the status

Setting env

Docker 상태를 먼저 살펴본다 .

$[root@juno-compute nova-docker]# docker run -i -t fedora /bin/bashPulling repository fedora834629358fe2: Download completeStatus: Downloaded newer image for fedora:latestbash-4.3#

간단한 이미지를 만들어본다 .

[root@juno-compute nova-docker]# docker pull larsks/thttpdPulling repository larsks/thttpda32a10d723ab: Download completeStatus: Downloaded newer image for larsks/thttpd:latest[root@juno-compute ~]# docker save larsks/thttpd | glance image-create --name larsks/thttpd --container-format docker --disk-format raw --is-public true+------------------+--------------------------------------+| Property | Value |+------------------+--------------------------------------+| checksum | cc8b32dcc9d12fbfa1d59ce655457d31 || name | larsks/thttpd |+------------------+--------------------------------------+

Page 49: Docker osc 0508

49

Check the status

Gui 화면에서 만들어 보기

[root@juno-compute ~]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES148ef2905e65 larsks/thttpd:latest "/thttpd -D -l /dev/ About a minute ago Up About a minute nova-f1aeb1e3-d395-4138-a92e-73c77e854709b122f9046020 larsks/thttpd:latest "/thttpd -D -l /dev/ 2 minutes ago Up 2 minutes nova-ac8d4a33-776b-4a13-be49-6b8bcfa87ec6e8dc72cd6a65 larsks/thttpd:latest "/thttpd -D -l /dev/ 9 minutes ago Up 9 minutes nova-d16b6bfe-4daa-48e5-a790-a9be088412ac

Page 50: Docker osc 0508

50

ContentsContents1.1. Why Docker?

1.11.1 가상화 vs Docker

1.21.2 Docker 의 성능비교

2.2. Docker 구축

2.12.1 Docker 구축 기초

2.22.2 Docker 로 WEB 서비스 구축

3.3. Openstack 위의 Docker

3.13.1 오픈스택에 docker 를 연결

2.32.3 Docker & Java

3.23.2Openstack 위에 Docker 로 WEB 서비스 구축

Page 51: Docker osc 0508

51

Openstack 위에 Docker 로 WEB 서비스 구축

docker image 가지고 와서 이미지 만들기

docker pull tutum/wordpress

[root@juno-compute ~]# docker pull tutum/wordpress

[root@juno-compute ~]# docker save tutum/wordpress | glance image-create --is-public=True --container-format=docker --disk-format=raw --name tutum/wordpress

출처 ㅣ: Xen Virtualization on Linux and Solaris : Running Nova-Docker on OpenStack RDO Juno (CentOS 7)

+------------------+--------------------------------------+| Property | Value |+------------------+--------------------------------------+| checksum | c343cc7afce50d264640f3238943c6de || container_format | docker || created_at | 2015-03-11T06:12:39 || deleted | False || deleted_at | None || disk_format | raw || id | 570f59ed-a227-43b7-9be1-3ad9b85f49a7 || is_public | True || min_disk | 0 || min_ram | 0 || name | tutum/wordpress || owner | 3c402245243f443ebc2aa39605641be1 || protected | False || size | 492773376 || status | active || updated_at | 2015-03-11T06:14:19 || virtual_size | None |+------------------+--------------------------------------+

Page 52: Docker osc 0508

52

Openstack 위에 Docker 로 WEB 서비스 구축

docker image 가지고 와서 이미지 만들기

glance image

[root@juno-compute ~]# glance image-list

[root@juno-compute ~]# glance image-list+--------------------------------------+---------------------+-------------+------------------+-----------+--------+| ID | Name | Disk Format | Container Format | Size | Status |+--------------------------------------+---------------------+-------------+------------------+-----------+--------+| 707b9dfc-68e4-4a9c-b7bc-708127473a56 | centos7 | qcow2 | bare | 989069312 | active || 43d87a3d-e1da-4eac-86d3-33a8a4a0e62d | cirros-0.3.3-x86_64 | qcow2 | bare | 13200896 | active || 570f59ed-a227-43b7-9be1-3ad9b85f49a7 | tutum/wordpress | raw | docker | 492773376 | active |+--------------------------------------+---------------------+-------------+------------------+-----------+--------+

출처 ㅣ: Xen Virtualization on Linux and Solaris : Running Nova-Docker on OpenStack RDO Juno (CentOS 7)

[root@juno-compute ~]# nova boot --image "tutum/wordpress" --flavor m1.tiny --key-name osc --nic net-id=00f8214c-fd7a-43f6-b469-6b78492adfff WordPress

[root@juno-compute ~]# neutron net-list+--------------------------------------+-----------+-----------------------------------------------------+| id | name | subnets |+--------------------------------------+-----------+-----------------------------------------------------+| 00f8214c-fd7a-43f6-b469-6b78492adfff | admin-net | a16ec435-0daa-4959-82c9-b6b6f50b9627 10.0.1.0/24 || 39e1abb0-d9bf-4f78-8cc6-88f0267e2b09 | ext-net | b74b68c0-84e7-4506-9169-1a1ff72ceb6f 192.168.0.0/24 || ddba5520-bc65-4762-a531-b1bfacd1b11e | test | b9bfb210-7c24-4c3c-809f-75cde2e5dd6f 10.0.2.0/24 |+--------------------------------------+-----------+-----------------------------------------------------+

Page 53: Docker osc 0508

53

Openstack 위에 Docker 로 WEB 서비스 구축

인스턴스 floating IP 주고 , 연결하기

출처 ㅣ: Xen Virtualization on Linux and Solaris : Running Nova-Docker on OpenStack RDO Juno (CentOS 7)

Page 54: Docker osc 0508

54

Openstack 위에 Docker 로 WEB 서비스 구축 ]

웹서비스 창

출처 ㅣ: Xen Virtualization on Linux and Solaris : Running Nova-Docker on OpenStack RDO Juno (CentOS 7)

Page 55: Docker osc 0508

55

Openstack 위에 Docker 로 WEB 서비스 구축 [ 15 분 ]

웹 서비스 창

출처 ㅣ: Xen Virtualization on Linux and Solaris : Running Nova-Docker on OpenStack RDO Juno (CentOS 7)

Page 56: Docker osc 0508

56

Openstack 위에 Docker 로 WEB 서비스 구축

docker image 가지고 와서 이미지 만들기

docker pull tutum/mysql

[root@juno-compute ~]# docker pull tutum/mysql

[root@juno-compute ~]# docker save tutum/mysql:latest | glance image-create --is-public=True --container-format=docker --disk-format=raw --name tutum/mysql:latest

출처 ㅣ: Xen Virtualization on Linux and Solaris : Running Nova-Docker on OpenStack RDO Juno (CentOS 7)

+------------------+--------------------------------------+| Property | Value |+------------------+--------------------------------------+| checksum | fa22fdac9cfda75cb9ecf67ed6d974c1 || container_format | docker || created_at | 2015-03-11T08:59:20 || deleted | False || deleted_at | None || disk_format | raw || id | 54c5a2f8-e1ae-475d-9eb6-0be8c38315f4 || is_public | True || min_disk | 0 || min_ram | 0 || name | tutum/mysql:latest || owner | 3c402245243f443ebc2aa39605641be1 || protected | False || size | 332313600 || status | active || updated_at | 2015-03-11T09:00:18 || virtual_size | None |+------------------+--------------------------------------+

Page 57: Docker osc 0508

57

Openstack 위에 Docker 로 WEB 서비스 구축 [ 15 분 ]

docker image 가지고 와서 이미지 만들기

glance image

[root@juno-compute ~]# glance image-list

+--------------------------------------+---------------------+-------------+------------------+-----------+--------+| ID | Name | Disk Format | Container Format | Size | Status |+--------------------------------------+---------------------+-------------+------------------+-----------+--------+| 707b9dfc-68e4-4a9c-b7bc-708127473a56 | centos7 | qcow2 | bare | 989069312 | active || 43d87a3d-e1da-4eac-86d3-33a8a4a0e62d | cirros-0.3.3-x86_64 | qcow2 | bare | 13200896 | active || 54c5a2f8-e1ae-475d-9eb6-0be8c38315f4 | tutum/mysql:latest | raw | docker | 332313600 | active || 570f59ed-a227-43b7-9be1-3ad9b85f49a7 | tutum/wordpress | raw | docker | 492773376 | active |+--------------------------------------+---------------------+-------------+------------------+-----------+--------+

출처 ㅣ: Xen Virtualization on Linux and Solaris : Running Nova-Docker on OpenStack RDO Juno (CentOS 7)

[root@juno-compute ~]# nova boot --image "tutum/mysql:latest" --flavor m1.tiny --key-name osc --nic net-id=00f8214c-fd7a-43f6-b469-6b78492adfff WordPress

[root@juno-compute ~]# neutron net-list+--------------------------------------+-----------+-----------------------------------------------------+| id | name | subnets |+--------------------------------------+-----------+-----------------------------------------------------+| 00f8214c-fd7a-43f6-b469-6b78492adfff | admin-net | a16ec435-0daa-4959-82c9-b6b6f50b9627 10.0.1.0/24 || 39e1abb0-d9bf-4f78-8cc6-88f0267e2b09 | ext-net | b74b68c0-84e7-4506-9169-1a1ff72ceb6f 192.168.0.0/24 || ddba5520-bc65-4762-a531-b1bfacd1b11e | test | b9bfb210-7c24-4c3c-809f-75cde2e5dd6f 10.0.2.0/24 |+--------------------------------------+-----------+-----------------------------------------------------+

Page 58: Docker osc 0508

58

Openstack 위에 Docker 로 WEB 서비스 구축

docker image 가지고 와서 이미지 만들기

mysql contact

[root@juno-compute ~]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES5ba04d7d55c9 tutum/mysql:latest "/run.sh" 5 minutes ago Up 5 minutes nova-9b9de363-820a-459c-964f-ef1de66a5634 001aa14aa877 tutum/wordpress:latest "/run.sh" 2 hours ago Up 2 hours nova-f9a4d63d-9184-416b-aa6f-1691d1d19139

출처 ㅣ: Xen Virtualization on Linux and Solaris : Running Nova-Docker on OpenStack RDO Juno (CentOS 7)

[root@juno-compute ~]# docker logs 5ba04d7d55c9=> An empty or uninitialized MySQL volume is detected in /var/lib/mysql=> Installing MySQL ...=> Done!=> Creating admin user ...=> Waiting for confirmation of MySQL service startup, trying 0/13 ...=> Creating MySQL user admin with random password=> Done!========================================================================You can now connect to this MySQL Server using:

mysql -uadmin -pSXgwTukrk2fK -h<host> -P<port>

Page 59: Docker osc 0508

59

Openstack 위에 Docker 로 WEB 서비스 구축

docker image 가지고 와서 이미지 만들기

mysql connect

출처 ㅣ: Xen Virtualization on Linux and Solaris : Running Nova-Docker on OpenStack RDO Juno (CentOS 7)

[root@juno-controller rootwrap.d]# mysql -uadmin -pSXgwTukrk2fK -h 192.168.0.213 -P 3306Welcome to the MariaDB monitor. Commands end with ; or \g.Your MySQL connection id is 1Server version: 5.5.41-0ubuntu0.14.04.1 (Ubuntu)

Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> MySQL [(none)]> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema |+--------------------+3 rows in set (0.00 sec)

Page 60: Docker osc 0508

60

Page 61: Docker osc 0508

61