71
docker on GCE ( Google Compute Engine) GDG Korea Cloud 2014-10-28 by judeKim

docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

Embed Size (px)

DESCRIPTION

Google Cloud Platform 인 Compute Engine에 Docker 를 올리기. Docker에 JVM 소프트웨어인 JIRA 및 Confluence를 설치하고 실제 서비스단계까지의 구성은 어떻게 하는지에 대한 설명입니다.

Citation preview

Page 1: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

docker on GCE( Google Compute Engine)

GDG Korea Cloud

2014-10-28 by judeKim

Page 2: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

Speaker

- 레진엔터테인먼트서버개발자- GDG Korea Cloud 운영자- Facebook Korea Docker

User Group 운영자

Page 3: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

오늘뭘하지?

Page 4: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

docker위에 JIRA 와Confluence를올려보

자!!

Page 5: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

그런데 docker는어디서띄울건데?

Page 6: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

레진은이미 Google

AppEngine을사용중!!

Page 7: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

Google 의 GCE를( Google Compute Engine )

사용해볼까?

Asia Region 도생겼다는데..

Page 8: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

GCE ( Google Compute

Engine )

=

Amazon AWS

=

KT ucloud

Page 9: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

GCE에서버만들기

Page 10: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
Page 11: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
Page 12: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
Page 13: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
Page 14: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
Page 15: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
Page 16: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
Page 17: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
Page 18: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

- docker daemon을일단중지#> systemctl stop docker.service

- docker 디렉토리변경#> mv /var/lib/docker /data/docker &&

ln -s /data/docker /var/lib/docker

- docker daemon 시작#> systemctl start docker.service

파티션용량의제한으로인한 docker 폴더변경

Page 19: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

원래대로라면정상적으로구동되어야하나제대로구동되지않았습니다.

현시점의 CoreOS 의 stable 버전에는docker가 1.2.0이포함되나,

docker.service 에들어가있는btrfs detecting 에버그가있어문제가발생합니다.

( 정확하게는 patch가누락된것같습니다. )

터미널명령어도다음과같이실행해도되지만#> docker -d &

제대로된가이드를위해ubuntu 14.04 LTS 버전을기준으로재작성.. 하려했습니다만 GCE는 ubuntu 이미지가없습니다. ㅜㅜdebian 계열로일단진행하겠습니다.

Page 20: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

간단히설치를진행해줍니다. https://docs.docker.com/installation/debian/#debian-wheezy-7-64-bit

# /data 파티션을 100GB 할당한 SSD로설정해줍니다.

#> mkdir /data

#> mkfs.ext4 /dev/sdb

#> mount /dev/sdb /data

#> service docker stop

#> mv /var/lib/docker /data/. &&

ln -s /data/docker /var/lib/docker

#> service docker start

# /data 파티션의부팅시마운트를위해 /etc/fstab에추가해줍니다/dev/sdb /data ext4 defaults 1 1

Page 21: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

- instance의 stop 기능이없다.

- instance 의 scale up 이없다. ( 못찾는것일수도.. )

- 다양한 image를지원하지않음. ( 알아서설치 )

- 개인적으로이미지가신뢰도가떨어진다.

( 서버인데 image 빌드날짜가최근일자 )

- asia region을지원하지만 aws( Tokyo vs Taiwan?

)에비해상대적으로약간느리다.

- instance type도적다.

- Google Cloud Platform 과의연결성Google Cloud Storage, BigQuery ..

- 구글의대용량시스템의신뢰도는세계최고수준- 구글이니어떻게든해주지않을까??

GCE 장단점

Page 22: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

Check Point!!

Page 23: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

- JIRA의경우솔루션으로잦은업데이트가있다.

업데이트의용이성필요.

- 데이터와솔루션을구분하여관리할수있는상황DB + 첨부파일에대한별도의파일저장소가필요.

- 향후서버이전이용이해야한다.

- 안정성이중요하다.

- 빠르면더좋다.

- docker에서 Automated Build 기능이있으니써봐야겠다.

- 백업및복구가용이해야한다.

- 사내 private 시스템이니보안이필요하다. SSL 지원필요.

Check point

Page 24: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

- JIRA의경우솔루션으로잦은업데이트가있다.

업데이트의용이성필요.

=> data volume container를사용하여솔루션과 data를분리하면문제없을듯docker에서 tag를통한이미지관리를통해버전별관리도쉬울듯( OK )

- 데이터와솔루션을구분하여관리할수있는상황DB + 첨부파일에대한별도의파일저장소가필요.

=> data volume container를사용하여솔루션과 data를분리하면문제없을듯 ( OK )

Check point

Page 25: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

- 향후서버이전이용이해야한다.

=> docker만구동가능하다면이전은문제없음.

docker가아니더라도 Automated Build를통한build script에대한 history등이존재하므로Iaas라도재설정등에는별문제없다. ( OK )

- 안정성이중요하다.

=> 버전 1.x 대의 docker니믿고써야..

- 빠르면더좋다.

=> region이 Korea이면더좋지만, Asia 라고하니그나마..

docker에서의속도벤치마킹등은별반차이없으니무난하겠지

Check point

Page 26: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

- docker에서 Automated Build 써보자.

=> 실제서비스용으로이미지를구축해본적은거의없어서개인욕심으로끼워넣는데필수는아닌듯.

- 백업및복구가용이해야한다.

=> data volume container를통해 host상에서백업이가능 ( OK )

host상의백업은자동백업되는시스템인 Disk

- 사내 private 시스템이니보안이필요하다.

SSL 지원필요.

=> apache 에서 proxy 연결로처리하면될듯 ( OK

)

Check point

Page 27: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

항상그렇듯이제일빠른방법은

가져다쓰기입니다.

Page 28: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

hub.docker.com 에서찾습니다.

Page 29: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

Dockerfile을복사

JIRA Dockerfile은아래과정이포함되어있습니다.

1. ubuntu trusty( 14.04 LTS ) 사용2. oracle-java7 (JRE) 설치3. Apache Portable Runtime 설치4. JIRA 환경설정변수설정5. jira user 생성6. JIRA 다운로드및설치7. 실행

https://wiki.ubuntu.com/LTS

Page 30: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

Confluence 도거의동일합니다.

Confluence Dockerfile은아래과정이포함되어있습니다.

1. ubuntu trusty( 14.04 LTS ) 사용2. oracle-java7 (JRE) 설치3. Confluence 환경설정4. confluence user 생성5. Confluence 다운로드및설치6. 실행

Page 31: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

이미지만들기Automated build

Page 32: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

jira:6.3.6a

confluence:5.6.3oracle-java:7

이미지구성형태

ubuntu:14.04

Page 33: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
Page 34: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
Page 35: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

git repository 생성

root 디렉토리에 Dockerfile 하나만생성해주면끝!

https://registry.hub.docker.com/u/judekim/ubuntu-base/dockerfile/

Page 36: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

Source repository 연결

Page 37: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
Page 38: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
Page 39: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
Page 40: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
Page 41: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

앞서설명한과정들을거쳐repository를아래와같이만듭니다.

ubuntu-baseubuntu-base-

oracle-javajira

confluence

Page 42: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

Data volume container

ubuntu-baseubuntu-base-

oracle-javajira

confluence

jira-data

confluence-data

https://docs.docker.com/userguide/dockervolumes/

Page 43: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

jira-data Dockerfile

Page 44: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

Data volume container build

# jira_data> docker build -t judekim/jira_data .

# confluence_data> docker build -t judekim/confluence_data .

root@docker-01:~/docker# docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

judekim/jira_data latest aa273ba54cd3 About a minute ago 445.4 MB

judekim/confluence_data latest ddf41e745583 10 minutes ago 445.4 MB

judekim/confluence 5.6.3 0dae10b133d6 3 weeks ago 1.159 GB

judekim/jira 6.3.6 0947b9f2398a 4 weeks ago 1.213 GB

judekim/ubuntu-base-oracle-java 7 2f7064e3b9e2 5 weeks ago 919.5 MB

judekim/ubuntu-base 14.04 af0b7b077712 5 weeks ago 443.5 MB

Page 45: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

nsenter - replace for ssh

https://github.com/jpetazzo/nsenter

= docker exec

Page 46: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

nsenter - replace for ssh

* 설치docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter

* alias 추가 ( .bashrc )

alias ns='nsenter --mount --uts --ipc --net --pid —target'

* ns { PID }

Page 47: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

data volume container 실행

#> docker run --name jira-data judekim/jira_data

#> docker run --name confluence-data judekim/confluence_data

#> docker inspect jira-data

Page 48: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

jira 실행

#> docker run -d

-p 8080:8080

--volumes-from jira-data

--name jira judekim/jira:6.3.6

* jira container 접속#> ns 2587

Page 49: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

환경설정

# docker-01 서버 8080 접속을위한방화벽오픈

Page 50: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

접속테스트

Page 51: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

여기서잠깐

저는설치시 DB는기존에사용하던 AWS의 RDS를사용.

현재의경우는 Mysql 을별도로설치해야합니다.

일단테스트를위해구글이지원하는 Cloud SQL을사용하겠습니다사용법은 Mysql 과동일합니다. ( 드라이버도동일 )

Page 52: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

google - cloud sql 설정

Page 53: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

jira 설정

Page 54: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

jira 설정

Page 55: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

jira 설정

Page 56: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

jira 설정

Page 57: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

jira 설정

Page 58: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

jira 설정

Page 59: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

Data volume container는?

( host 에서접근하여확인 )

Page 60: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

Nsenter로접근하여확인( jira container )

Page 61: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

jira 설치완료

Page 62: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

confluence 실행

docker run -d

-p 8090:8090

--volumes-from confluence-data

--name confluence

--link jira:jira.test.com

judekim/confluence:5.6.3

* 나머지설정작업들은 jira와거의동일

Page 63: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

confluence 설치완료

Page 64: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

Apache 구성

apache-atlassian

apache-data-

atlassian

/data

/data

- apache의환경설정- log

- 실행스크립트- 인증서- 소스

confluencejira

client

https

http:8080

http:8090

Page 65: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

Apache data volume container 설정

https://bitbucket.org/jude_lezhin/apache-data-atlassian.git

# Dockerfile

FROM busybox

ADD data /data

VOLUME ["/data/"]

CMD ["/bin/sh"]

#> docker build -t judekim/apache-data-atlassian .

#> docker run --name=apache-data-atlassian

judekim/apache-data-atlassian /bin/sh

( data volume container는말그대로컨테이너여야하기때문에실행 )

Page 66: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

Apache 생성

# Dockerfile

FROM judekim/ubuntu-base:14.04

RUN apt-get update

RUN apt-get -y install apache2-mpm-event openssl cronolog

RUN rm -rf /etc/apache2

RUN ln -s /data/_system/conf/apache2 /etc/apache2

RUN mkdir -p /var/run/apache2

RUN mkdir -p /var/lock/apache2

EXPOSE 80

EXPOSE 443

# using data volume container for configuration

VOLUME ["/data"]

CMD [“/data/bin/run.sh"]

#> docker build -t judekim/apache-atlassian .

Page 67: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

Apache 실행

docker run -d

-p 0.0.0.0:443:443 -p 0.0.0.0:80:80

--name=apache-atlassian

--volumes-from apache-data-atlassian

--link jira:jira.test.com --link wiki:wiki.test.com

judekim/apache-atlassian

detached 모드로http 및 https port 개방unique container 이름설정 ( apache-atlassian )

apache-data-atlassian 을마운트해서사용 ( /data )

hosts 파일에 jira.test.com 및 wiki.test.com 을설정judekim/apache-atlassian 를실행

Page 68: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

Apache 설정

# Dockerfile

FROM judekim/ubuntu-base:14.04

RUN apt-get update

RUN apt-get -y install apache2-mpm-event openssl cronolog

RUN rm -rf /etc/apache2

RUN ln -s /data/_system/conf/apache2 /etc/apache2

RUN mkdir -p /var/run/apache2

RUN mkdir -p /var/lock/apache2

EXPOSE 80

EXPOSE 443

# using data volume container for configuration

VOLUME ["/data"]

CMD ["/data/bin/run.sh"]

Page 69: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

Apache 환경설정<VirtualHost *:80>

ServerName jira.test.com

RedirectMatch (.*)$ https://jira.test.com$1

</VirtualHost>

<IfModule mod_ssl.c>

<VirtualHost *:443>

ServerName jira.test.com

# JIRA Proxy Configuration:

<Proxy *>

Order deny,allow

Allow from all

</Proxy>

ProxyRequests Off

ProxyPreserveHost On

ProxyPass / http://jira.test.com:8080/

ProxyPassReverse / http://jira.test.com:8080/

</VirtualHost>

</IfModule>

http -> https … http(8080)

apache -> apache … jira

Page 70: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

1. 먼저서비스분석2. docker를사용하는것이적합한지판단3. data와서비스를분리하는간단한설계4. 업데이트및백업, 복원에대해설계5. 모든것은자동화및기록 ( git 활용 )

6. data volume container, link 기능등은필수7. 기존에만들어진 image들의 Dockerfile 참조8. hub.docker.com 을적절히활용9. 가벼운것부터 ( 중요도가낮은것부터 ) 활용해보자.

( 고객서비스가아닌내부서비스위주.. )

docker를서비스에활용할때

Page 71: docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud

Thank you.