docker on gce ( jira & confluence ) - gdg korea cloud
DESCRIPTION
Google Cloud Platform 인 Compute Engine에 Docker 를 올리기. Docker에 JVM 소프트웨어인 JIRA 및 Confluence를 설치하고 실제 서비스단계까지의 구성은 어떻게 하는지에 대한 설명입니다.TRANSCRIPT
docker on GCE( Google Compute Engine)
GDG Korea Cloud
2014-10-28 by judeKim
Speaker
- 레진엔터테인먼트서버개발자- GDG Korea Cloud 운영자- Facebook Korea Docker
User Group 운영자
오늘뭘하지?
docker위에 JIRA 와Confluence를올려보
자!!
그런데 docker는어디서띄울건데?
레진은이미 Google
AppEngine을사용중!!
Google 의 GCE를( Google Compute Engine )
사용해볼까?
Asia Region 도생겼다는데..
GCE ( Google Compute
Engine )
=
Amazon AWS
=
KT ucloud
GCE에서버만들기
- 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 폴더변경
원래대로라면정상적으로구동되어야하나제대로구동되지않았습니다.
현시점의 CoreOS 의 stable 버전에는docker가 1.2.0이포함되나,
docker.service 에들어가있는btrfs detecting 에버그가있어문제가발생합니다.
( 정확하게는 patch가누락된것같습니다. )
터미널명령어도다음과같이실행해도되지만#> docker -d &
제대로된가이드를위해ubuntu 14.04 LTS 버전을기준으로재작성.. 하려했습니다만 GCE는 ubuntu 이미지가없습니다. ㅜㅜdebian 계열로일단진행하겠습니다.
간단히설치를진행해줍니다. 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
- instance의 stop 기능이없다.
- instance 의 scale up 이없다. ( 못찾는것일수도.. )
- 다양한 image를지원하지않음. ( 알아서설치 )
- 개인적으로이미지가신뢰도가떨어진다.
( 서버인데 image 빌드날짜가최근일자 )
- asia region을지원하지만 aws( Tokyo vs Taiwan?
)에비해상대적으로약간느리다.
- instance type도적다.
- Google Cloud Platform 과의연결성Google Cloud Storage, BigQuery ..
- 구글의대용량시스템의신뢰도는세계최고수준- 구글이니어떻게든해주지않을까??
GCE 장단점
Check Point!!
- JIRA의경우솔루션으로잦은업데이트가있다.
업데이트의용이성필요.
- 데이터와솔루션을구분하여관리할수있는상황DB + 첨부파일에대한별도의파일저장소가필요.
- 향후서버이전이용이해야한다.
- 안정성이중요하다.
- 빠르면더좋다.
- docker에서 Automated Build 기능이있으니써봐야겠다.
- 백업및복구가용이해야한다.
- 사내 private 시스템이니보안이필요하다. SSL 지원필요.
Check point
- JIRA의경우솔루션으로잦은업데이트가있다.
업데이트의용이성필요.
=> data volume container를사용하여솔루션과 data를분리하면문제없을듯docker에서 tag를통한이미지관리를통해버전별관리도쉬울듯( OK )
- 데이터와솔루션을구분하여관리할수있는상황DB + 첨부파일에대한별도의파일저장소가필요.
=> data volume container를사용하여솔루션과 data를분리하면문제없을듯 ( OK )
Check point
- 향후서버이전이용이해야한다.
=> docker만구동가능하다면이전은문제없음.
docker가아니더라도 Automated Build를통한build script에대한 history등이존재하므로Iaas라도재설정등에는별문제없다. ( OK )
- 안정성이중요하다.
=> 버전 1.x 대의 docker니믿고써야..
- 빠르면더좋다.
=> region이 Korea이면더좋지만, Asia 라고하니그나마..
docker에서의속도벤치마킹등은별반차이없으니무난하겠지
Check point
- docker에서 Automated Build 써보자.
=> 실제서비스용으로이미지를구축해본적은거의없어서개인욕심으로끼워넣는데필수는아닌듯.
- 백업및복구가용이해야한다.
=> data volume container를통해 host상에서백업이가능 ( OK )
host상의백업은자동백업되는시스템인 Disk
- 사내 private 시스템이니보안이필요하다.
SSL 지원필요.
=> apache 에서 proxy 연결로처리하면될듯 ( OK
)
Check point
항상그렇듯이제일빠른방법은
가져다쓰기입니다.
hub.docker.com 에서찾습니다.
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
Confluence 도거의동일합니다.
Confluence Dockerfile은아래과정이포함되어있습니다.
1. ubuntu trusty( 14.04 LTS ) 사용2. oracle-java7 (JRE) 설치3. Confluence 환경설정4. confluence user 생성5. Confluence 다운로드및설치6. 실행
이미지만들기Automated build
jira:6.3.6a
confluence:5.6.3oracle-java:7
이미지구성형태
ubuntu:14.04
git repository 생성
root 디렉토리에 Dockerfile 하나만생성해주면끝!
https://registry.hub.docker.com/u/judekim/ubuntu-base/dockerfile/
Source repository 연결
앞서설명한과정들을거쳐repository를아래와같이만듭니다.
ubuntu-baseubuntu-base-
oracle-javajira
confluence
Data volume container
ubuntu-baseubuntu-base-
oracle-javajira
confluence
jira-data
confluence-data
https://docs.docker.com/userguide/dockervolumes/
jira-data Dockerfile
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
nsenter - replace for ssh
https://github.com/jpetazzo/nsenter
= docker exec
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 }
data volume container 실행
#> docker run --name jira-data judekim/jira_data
#> docker run --name confluence-data judekim/confluence_data
#> docker inspect jira-data
jira 실행
#> docker run -d
-p 8080:8080
--volumes-from jira-data
--name jira judekim/jira:6.3.6
* jira container 접속#> ns 2587
환경설정
# docker-01 서버 8080 접속을위한방화벽오픈
접속테스트
여기서잠깐
저는설치시 DB는기존에사용하던 AWS의 RDS를사용.
현재의경우는 Mysql 을별도로설치해야합니다.
일단테스트를위해구글이지원하는 Cloud SQL을사용하겠습니다사용법은 Mysql 과동일합니다. ( 드라이버도동일 )
google - cloud sql 설정
jira 설정
jira 설정
jira 설정
jira 설정
jira 설정
jira 설정
Data volume container는?
( host 에서접근하여확인 )
Nsenter로접근하여확인( jira container )
jira 설치완료
confluence 실행
docker run -d
-p 8090:8090
--volumes-from confluence-data
--name confluence
--link jira:jira.test.com
judekim/confluence:5.6.3
* 나머지설정작업들은 jira와거의동일
confluence 설치완료
Apache 구성
apache-atlassian
apache-data-
atlassian
/data
/data
- apache의환경설정- log
- 실행스크립트- 인증서- 소스
confluencejira
client
https
http:8080
http:8090
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는말그대로컨테이너여야하기때문에실행 )
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 .
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 를실행
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"]
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
1. 먼저서비스분석2. docker를사용하는것이적합한지판단3. data와서비스를분리하는간단한설계4. 업데이트및백업, 복원에대해설계5. 모든것은자동화및기록 ( git 활용 )
6. data volume container, link 기능등은필수7. 기존에만들어진 image들의 Dockerfile 참조8. hub.docker.com 을적절히활용9. 가벼운것부터 ( 중요도가낮은것부터 ) 활용해보자.
( 고객서비스가아닌내부서비스위주.. )
docker를서비스에활용할때
Thank you.