Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

1,787 views

Published on

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

Published in: Software
  • Be the first to comment

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

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

×