O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

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

201 visualizações

Publicada em

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

Publicada em: Tecnologia
  • Seja o primeiro a comentar

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

×