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 기반 개발환경 구축 - XE Open seminar #2

179 views

Published on

Docker를 이용해서 XE3 Image를 만들어 보고 개발 환경 적용

Published in: Technology
  • Be the first to comment

Docker 기반 개발환경 구축 - XE Open seminar #2

  1. 1. XEHub 박웅빈 Docker 기반 개발환경 구축
  2. 2. 1. Docker? 2. Image & Container 사용법 3. XE3 Image 만들기 4. Dockerfile로 XE3 Image 만들기 5. Docker-compose로 XE3 바로 사용하기
  3. 3. Docker?
  4. 4. - container 기반의 오픈소스 가상화 플랫폼 Docker? XE3 & XEHub - 기존의 가상화 방식에 비해서 성능의 손실이 거의 없음 - 2003년에 발표, Go 언어로 작성된 오픈 소스 - https://www.docker.com
  5. 5. Image & Container 사용법
  6. 6. - Docker Hub에서 image를 검색 docker search [OPTIONS] TERM XE3 & XEHub Container & Image 사용법
  7. 7. - Docker Hub에서 image를 다운로드 docker pull [OPTIONS] NAME[:TAG|@DIGEST] - image 이름 뒤에 태그가 없으면 기본으로
 latest 이미지를 다운로드 XE3 & XEHub [image의 특정 버전이나 태그를 지정해서 다운로드] Container & Image 사용법 docker images [OPTIONS] [REPOSITORY[:TAG]]] - 다운로드 받은 image의 목록을 출력
  8. 8. - image를 container로 생성 docker create [OPTIONS] IMAGE [COMMAND] [ARG...] XE3 & XEHub Container & Image 사용법 -i : container에 STDIN을 연결 -t : container에 터미널을 할당 — name : container에 이름을 지정 - container의 목록 출력 docker ps [OPTIONS] -a : 모든 상태의 container 출력
  9. 9. - 정지 상태인 container를 시작 docker start [OPTIONS] CONTAINER [CONTAINER...] XE3 & XEHub Container & Image 사용법 - 실행 상태인 container에 접근 docker attach [OPTIONS] CONTAINER
  10. 10. - image를 새로운 container로 만들어서 실행 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] [이미지가 저장되어 있는 상태에서 run 했을 때] XE3 & XEHub [그냥 실행 했을 때와 command를 지정 했을 때의 차이] Container & Image 사용법
  11. 11. XE3 & XEHub - container 관리 docker container COMMAND prune : 종료된 모든 container 삭제 Container & Image 사용법
  12. 12. XE3 Image 만들기
  13. 13. XE3 Image 만들기 진행 과정 XE3 & XEHub - ubuntu image에 php 설치 - XE3:0.1 image에 composer 설치 - XE3:0.2 image에 XE3 download - XE3:0.3 image에 apache 설치 & 설정 XE3:0.1 XE3:0.2 XE3:0.3 XE3:0.4 - XE3:0.4 container와 mysql container연결
  14. 14. XE3 & XEHub - apt-get update - apt-get install php php-fpm php-mbstring php-dom php-zip php-pdo php-tokenizer php-xml php-ctype php-json php-mysql php-curl php-gd php-cgi php-cli -y XE3 Image 만들기 [ubuntu container 생성하고 php install]
  15. 15. docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] XE3 Image 만들기 XE3 & XEHub [php가 설치된 container image로 만들기] - container를 image로 생성 -m : 변경 내역을 메시지를 저장
  16. 16. - Docker Hub(https://hub.docker.com) 회원가입 XE3 Image 만들기 XE3 & XEHub [생성한 image를 Docker Hub에 push] - docker에 login
  17. 17. - 생성한 image를 docker hub로 Push docker push [OPTIONS] NAME[:TAG] XE3 Image 만들기 XE3 & XEHub [생성한 image를 Docker Hub에 push] [push한 image가 추가된 repository]
  18. 18. [repository 상세 페이지에서 short description 작성] XE3 Image 만들기 XE3 & XEHub [생성한 image를 Docker Hub에 push]
  19. 19. [composer가 설치된 image] XE3 Image 만들기 XE3 & XEHub [생성한 image를 container로 생성해서 composer 설치] - apt-get install curl -y - curl -sS https://getcomposer.org/installer | php - mv composer.phar /usr/local/bin/composer
  20. 20. - 이미지의 상세 정보를 출력 docker inspect [OPTIONS] NAME|ID [NAME|ID...] XE3 Image 만들기 XE3 & XEHub [Image Layer]
  21. 21. [ubuntu:latest의 layer] XE3 Image 만들기 XE3 & XEHub [Image Layer] [sirwoongke/xe3:0.1의 layer] [sirwoongke/xe3:0.2의 layer] [php install] [php install] [composer install]
  22. 22. XE3 Image 만들기 XE3 & XEHub [Image Layer] ubuntu:latest ubuntu:latest php install ubuntu:latest php install composer install [ubuntu:latest] [sirwoongke/xe3:0.1] [sirwoongke/xe3:0.2]
  23. 23. XE3 Image 만들기 XE3 & XEHub [Image Layer]
  24. 24. - 저장된 image를 삭제 docker rmi [OPTIONS] IMAGE [IMAGE...] XE3 Image 만들기 XE3 & XEHub [Image Layer]
  25. 25. XE3 Image 만들기 XE3 & XEHub [Image Layer]
  26. 26. XE3 Image 만들기 XE3 & XEHub [Image Layer]
  27. 27. XE3 Image 만들기 XE3 & XEHub [xe download 이미지 생성하기] - cd /var/www - apt-get install git vim -y - git clone https://github.com/xpressengine/xpressengine.git - cd xpressengine - composer install
  28. 28. XE3 Image 만들기 XE3 & XEHub [xe download 이미지 생성하기] [XE3:0.3 image commit, push]
  29. 29. [container에서 사용중인 포트 조회] XE3 Image 만들기 XE3 & XEHub [image에 apache 설치하기] docker run -p : 로컬 컴퓨터의 포트와 container의 포트를 연결 ctrl + pq
  30. 30. XE3 Image 만들기 XE3 & XEHub [image에 apache 설치하기] - apt-get install apache2 -y - cd /etc/apache2/sites-available/ - vi xe.conf <VirtualHost *:80> ServerName yourdomain.tld ServerAdmin webmaster@localhost DocumentRoot /var/www/xpressengine <Directory /var/www/xpressengine> AllowOverride All </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> - a2dissite 000-default.conf - a2ensite xe.conf - a2enmod rewrite - chgrp -R www-data /var/www/xpressengine - chmod -R 775 /var/www/xpressengine - service apache2 restart [xe.conf 파일 내용]
  31. 31. XE3 Image 만들기 XE3 & XEHub [image에 apache 설치하기] [127.0.0.1로 접속 했을 때 XE3 설치 페이지가 출력]
  32. 32. XE3 Image 만들기 XE3 & XEHub [image에 apache 설치하기]
  33. 33. XE3 Image 만들기 XE3 & XEHub [xe container와 mysql container 연결] -d : deattach mode로 실행 -e : 환경변수를 설정 [mysql container가 실행 중]
  34. 34. - 실행중인 container에 command를 실행 docker exec [OPTIONS] CONTAINER COMMAND [ARG...] [-e MYSQL_DATABASE로 XE3 Image 만들기 XE3 & XEHub [xe container와 mysql container 연결] 지정한 테이블이 생성]
  35. 35. - service apache2 start XE3 Image 만들기 XE3 & XEHub [ubuntu Image 생성하고 php install] —link : 다른 container와의 연결을 추가 - 127.0.0.1 접속 후 xe 설치 - Database Host는 mysql container의 이름
  36. 36. Dockerfile로 XE3 이미지 만들기
  37. 37. - 설치해야 하는 패키지, 실행해야 되는 명령어 등을 작성하는 파일 Dockerfile? Dockerfile로 XE3 이미지 만들기 XE3 & XEHub - 작성된 내용으로 build해서 image 생성 - build된 이미지의 구성 요소를 확인 가능
  38. 38. Dockerfile로 XE3 이미지 만들기 XE3 & XEHub <VirtualHost *:80> ServerName yourdomain.tld ServerAdmin webmaster@localhost DocumentRoot /var/www/xpressengine <Directory /var/www/xpressengine> AllowOverride All </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> [xe.conf 파일 내용]
  39. 39. FROM : 생성할 image의 base image Dockerfile로 XE3 이미지 만들기 XE3 & XEHub FROM ubuntu:latest LABEL "maintainer"="sirwoongke" ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update RUN apt-get install php php-fpm php-mbstring php-dom php-zip php-pdo php-tokenizer php-xml php-ctype php-json php-mysql php-curl php-gd php-cgi php- cli -y RUN apt-get install curl git apache2 -y RUN curl -sS https://getcomposer.org/installer | php RUN mv composer.phar /usr/local/bin/composer WORKDIR /var/www RUN git clone https://github.com/xpressengine/xpressengine.git WORKDIR /var/www/xpressengine RUN composer install RUN chgrp -R www-data /var/www/xpressengine RUN chmod -R 775 /var/www/xpressengine ADD xe.conf /etc/apache2/sites-available RUN a2dissite 000-default.conf RUN a2ensite xe.conf RUN a2enmod rewrite RUN service apache2 restart CMD apachectl -DFOREGROUND LABEL : image의 meta-data ENV : Dockerfile에서 사용할 환경변수 지정 RUN : build 과정 중 container 내부에서 실행할 명령 ENV : Dockerfile에서 사용할 환경변수 지정 WORKDIR : 명령어를 실행할 디렉터리를 지정 RUN 명령어로 cd를 할 경우 다음 실행할 명령어 실행 전에 root 디렉터리로 이동하기 때문에 디렉터리 이동은 WORKDIR 명령어를 사용 ADD : 로컬에 있는 파일을 지정한 image의 경로에 추가 CMD : container가 시작될 때 실행한 명령어 docker run에서 받는 command로 무시 될 수 있음
  40. 40. [Dockerfile build] Dockerfile로 XE3 이미지 만들기 XE3 & XEHub - Dockerfile을 image로 build docker build [OPTIONS] PATH | URL | - -t : image의 tag를 지정
  41. 41. [github repository 생성] [Automated Build 설정] Dockerfile로 XE3 이미지 만들기 XE3 & XEHub
  42. 42. - 추가한 repository를 선택 [Automated Build 설정] Dockerfile로 XE3 이미지 만들기 XE3 & XEHub - 간단한 설명 작성 및 설정 후 생성
  43. 43. [생성된 Automated Build Repository] [Automated Build 설정] Dockerfile로 XE3 이미지 만들기 XE3 & XEHub [작성한 Dockerfile을 github에 push]
  44. 44. [Automated Build 설정] Dockerfile로 XE3 이미지 만들기 XE3 & XEHub - 연동된 repository에 Dockerfile이 push 되면 자동으로 build 시작
  45. 45. docker-compose로 XE3, Mysql 바로 사용하기
  46. 46. docker-compose로 XE3 바로 사용하기 XE3 & XEHub - 여러 개의 container를 사용해서 애플리케이션을 실행 할 때 하나의 서비스로 정의해서 관리 docker-compose? - docker-compose.yml 작성된 설정 내용으로 container를 생성
  47. 47. docker-compose로 XE3 바로 사용하기 XE3 & XEHub version: '3.0' services: xe: image: sirwoongke/xe3:0.4 ports: - "80:80" links: - xe_db:db command: apachectl -DFOREGROUND xe_db: image: mysql:5.7 ports: - "3306:3306" environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=xe [docker-compose.yml] version : yml 파일 포맷의 버전 services : 생성될 container의 목록 작성 xe, xe_db : 생성될 container의 이름 [XE3 Image를 사용]
  48. 48. docker-compose로 XE3 바로 사용하기 XE3 & XEHub version: '3.0' services: xe: build: context: . dockerfile: ./Dockerfile image: xe_build_image links: - xe_db ports: - "80:80" xe_db: image: mysql:5.7 environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=xe [docker-compose.yml] build : Dockerfile에 관련된 정보를 작성 context : Dockerfile이 존재 하는 경로 작성 dockerfile : Dockerfile의 이름 [XE3 Dockerfile을 사용]
  49. 49. - docker-compose.yml에 작성된 내용으로 container를 생성 docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...] docker-compose로 XE3 바로 사용하기 XE3 & XEHub
  50. 50. docker-compose로 XE3 바로 사용하기 XE3 & XEHub - docker-compose로 실행된 container의 목록 출력 docker-compose ps [options] [SERVICE...]
  51. 51. - docker-compose up으로 생성된 container를 종료하게 삭제 docker-compose down [options] docker-compose로 XE3 바로 사용하기 XE3 & XEHub
  52. 52. 부록 A. 개발환경과 source code 분리하기
  53. 53. - 앞서 작성한 image나 Dockerfile을 사용하면 container가 종료 되면서 database의 data가 손실되고 source code를 수정 하기가 불편하다는 문제가 있음 XE3 & XEHub 개발 환경과 source code 분리하기 - 개발에 필요한 php, apache, composer 등 인프라 부분은 container를 활용하고 source code는 host에서 작업하는 분리가 필요 - 개발 환경 공유는 개발 환경에 대한 설정을 작성한 image나 Dockerfile을 공유해서 개발 환경을 공유 - database의 손실은 database data의 저장을 local에 저장 해서 database container가 다시 시작 되더라도 기존에 저장된 database data를 사용하도록 설정
  54. 54. - php, apache가 설치된 image 생성 xpressengine : source code가 저장된 폴더 XE3 & XEHub 개발 환경과 source code 분리하기 database : database의 data가 저장될 폴더
  55. 55. -v : 호스트와 volume을 공유 XE3 & XEHub 개발 환경과 source code 분리하기 [database data local에 저장] : 명령어 줄바꿈
  56. 56. XE3 & XEHub 개발 환경과 source code 분리하기 [개발 환경이 설정된 container와 source code 연결]
  57. 57. XE3 & XEHub 개발 환경과 source code 분리하기
  58. 58. XE3 & XEHub 개발 환경과 source code 분리하기 version: '3.0' services: server: image: volume_test:1.1 ports: - "80:80" links: - xe_db:db volumes: - /Users/sirwoongke/source/docker/appendix/xpressengine:/var/www/xpressengine command: apachectl -DFOREGROUND xe_db: image: mysql:5.7 ports: - "3306:3306" environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=xe volumes: - /Users/sirwoongke/source/docker/appendix/database:/var/lib/mysql [docker-compose.yml] [docker-compose로 volume 연결]
  59. 59. XE3 & XEHub 개발 환경과 source code 분리하기
  60. 60. Q & A

×