좋은 docker webdev 워크 플로우는 무엇입니까?


121

커가 내 webdev 워크 플로를 크게 향상시킬 수 있다는 직감이 있습니다. 하지만 스택에 도커를 추가하는 프로젝트에 접근하는 방법에 대해 머리를 감쌀 수는 없습니다.

기본 소프트웨어 스택은 다음과 같습니다.

소프트웨어

  • 커스텀 LAMP 스택을 제공하는 Docker 이미지

    • 여러 모듈이있는 Apache
    • MYSQL
    • PHP
    • 일부 CMS, 예 : Silverstripe
  • GIT

워크 플로우

워크 플로가 다음과 같이 보일 것이라고 상상할 수 있습니다.

개발

  1. Dockerfile위에 명시된 요구 사항을 충족하는 LAMP 컨테이너를 정의하는 작성
    • REQ : 컴퓨터는 부팅 직후 apache / mysql을 시작해야합니다.
  2. Docker 이미지 빌드
  3. CMS를 실행하는 데 필요한 파일을 예 : ~/dev/cmsdir
    • 넣어 ~/dev/cmsdir/버전 통제
  4. 고정 표시기 컨테이너를 실행하고 어떻게 든 마운트 ~/dev/cmsdir/var/www/컨테이너에
  5. 데이터베이스 채우기
  6. 일하기 /dev/cmsdir/
  7. Docker 컨테이너 커밋 및 종료

전개

  1. 원격 호스트 설정 (예 : ansible 사용)
  2. 컨테이너 이미지를 원격 호스트로 푸시
  3. cmsdirgit을 통해 -project 가져 오기
  4. Docker 컨테이너를 실행하고 데이터베이스를 가져 와서 마운트합니다. cmsdir 와서/var/www

자, 이것은 종이 상으로는 아주 멋지게 보이지만 이것이 올바른 접근 방식인지는 확실하지 않습니다.

질문 :

  1. 로컬에서 개발하는 동안 컨테이너 인스턴스 재부팅 사이에 데이터베이스를 유지하려면 어떻게해야합니까? 아니면 컨테이너를 회전시키기 전에 매번 sql-dump를 실행해야합니까?

  2. db와 apache 서버에 대해 별도의 컨테이너 인스턴스가 있어야합니까? 아니면 위의 사용 사례에 대해 하나의 컨테이너로 충분할까요?

  3. 데이터베이스와 서버에 별도의 컨테이너를 사용하는 경우 동시에 회전을 자동화하려면 어떻게해야합니까?

  4. 실제로 /dev/cmsdir/컨테이너 /var/www/디렉토리에 어떻게 마운트 합니까? 이를 위해 데이터 볼륨 을 활용해야합니까 ?

  5. 함정을 놓쳤습니까? 단순화 할 수있는 것이 있습니까?


1
이 질문은 꽤 많은 사람들에게 흥미로운 것 같습니다. 누군가 최근에 주제에 대한 블로그 포스트 시리즈를 작성한 것 같습니다. 지금은 완료되지 않았
으므로이

답변:


46
  1. CMS 컨테이너와 관계없이 데이터베이스 지속성이 필요한 경우 MySQL 용 컨테이너 하나와 CMS 용 컨테이너 하나를 사용할 수 있습니다. 이 경우 MySQL 컨테이너를 계속 실행하고 원하는만큼 독립적으로 CMS를 재배포 할 수 있습니다.

    개발의 경우-또 다른 옵션은 데이터 볼륨을 사용하여 호스트 / 개발 머신에서 mysql 데이터 디렉토리를 매핑하는 것입니다. 이렇게하면 git (호스트에서)을 사용하여 mysql (도커에서)에 대한 데이터 파일을 관리 할 수 ​​있으며 언제든지 원할 때 (mysql 컨테이너를 시작하기 전에) 초기 상태를 "다시로드"할 수 있습니다.

  2. 예, db에 대한 별도의 컨테이너가 있어야한다고 생각합니다.

  3. 기본 스크립트 만 사용하고 있습니다.

    #!/bin/bash
    
    $JOB1 = (docker run ... /usr/sbin/mysqld)
    $JOB2 = (docker run ... /usr/sbin/apache2)
    echo MySql=$JOB1, Apache=$JOB2
    
  4. 예, data-volumes -v 스위치를 사용할 수 있습니다. 나는 이것을 개발에 사용할 것입니다. 읽기 전용 마운트를 사용할 수 있으므로 원하는 경우이 디렉토리를 변경하지 않습니다 (어쨌든 앱은 데이터를 다른 곳에 저장해야 함).

    docker run -v=/home/user/dev/cmsdir:/var/www/cmsdir:ro image /usr/sbin/apache2
    

    어쨌든 최종 배포를 위해 Dockerfile을 사용하여 빌드하고 이미지화합니다. ADD /home/user/dev/cmsdir /var/www/cmsdir

  5. 모르겠어요 :-)


6
내가 구현 당신이 # 1에서 무슨 말을하는지 MySQL의 컨테이너 작성에 대한 자습서를 썼다 txt.fliglio.com/2013/11/creating-a-mysql-docker-container
벤 슈워츠

48
이 프로세스에 대한 더 많은 자습서 / 모범 사례가 필요합니다. :(
Reza S

이 튜토리얼은 당신에게 방향을 제시 할 수 ..
Pithikos

Docker의 Github에서 코드를 가져 오는 경우이 링크는 읽기 전용 SSH 키를 제안합니다 (따라서 Docker 이미지를 공개적으로 나열 할 수 있음) slash-dev-blog.me/docker-git.html
jhtong

4
@RoyTruelove는 2015 년, 그림 이제 고정 표시기-작성에 찬성되지 않습니다
allan.simon


4

이 게시물이 현재 1 년이 넘었 음을 이해합니다. 그러나 최근 저에게 매우 유사한 질문을했고 귀하의 질문에 대한 몇 가지 훌륭한 답변을 제공합니다.

  1. MySQL Docker 인스턴스를 설정하고 상태 비 저장 데이터 컨테이너에 데이터를 유지할 수 있습니다. 즉, 데이터 컨테이너가 활발하게 실행될 필요가 없습니다.

  2. 예, 웹 서버와 데이터베이스에 대해 별도의 인스턴스를 사용하는 것이 좋습니다. 이것이 Docker의 힘입니다.

  3. 내가 구축 하고있는 이 저장소를 확인하십시오 . 기본적으로 make build& 만큼 간단 make run하며 웹 서버와 데이터베이스 컨테이너를 로컬에서 실행할 수 있습니다.

  4. -v컨테이너를 처음 실행할 때 인수를 사용하면 컨테이너의 특정 폴더가 컨테이너를 실행하는 호스트에 연결됩니다.

  5. 귀하의 아이디어가 훌륭하고 현재 귀하가 요구하는 모든 것을 달성 할 수 있다고 생각합니다 .

여기에 나열된 모든 요구 사항을 충족 하는 턴키 솔루션 이 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.