2017-03-21 1 views
4

Docker-Compose를 사용하여 Docker에서 심포니 애플리케이션을 구현하고자합니다. 내가 가진 것 적어도 다음과 같은 용기 :Docker 환경에서 Symfony를 사용하여 생산 용

  • Nginx에
  • Rabbitmq 서버
  • PHP-FPM
  • MySQL의
  • SOLR 현재

우리가 위의 사용하여 개발 환경을 설정도.

Symfony 응용 프로그램은 로컬 (호스트)에 저장되고 응용 프로그램을 읽을 수 있도록 PHP-FPM 컨테이너에 볼륨이 사용됩니다. 우리는 bash을 php-fpm 컨테이너에 넣어 composer/app/console 명령을 실행합니다.

또한 rabbitmq 서버의 메시지를 사용하는 소비자 (Symfony 명령)도 수동으로 실행합니다.

프로덕션에서 사용할 수있는 옵션은 무엇입니까?

1) 응용 프로그램을 실행하는 단일 컨테이너를 만든 다음 다른 컨테이너에서 사용할 수 있습니까? php-fpm 컨테이너에 애플리케이션 코드에 대한 액세스가 필요하다는 것을 알았지 만 컨슈머를 실행하기위한 컨테 이너를 만들고 싶습니다. 컨테이너로 실행하는 서비스의 이름을 전달합니다. 즉 단일 이미지를 가질 수 있습니다. 모든 대기열에서 메시지를 처리하기 위해 유연하게 실행될 수 있습니다. 이 옵션에서 로그/캐시는 어떻게됩니까?

2) 응용 프로그램을 필요로하는 각 이미지 내에 저장합니까? 이것은 내가 가장 선호하는 옵션으로 애플리케이션을 업데이트하기 위해 각 이미지를 빌드해야합니다.

3) 아직 조사하지 않은 항목이 있습니까?

어플 리케이션을 쉽게 업데이트 할 수 있도록 허용하고 싶습니다.하지만 다운 타임을 최소화하고 싶습니다. haproxy 또는 이와 유사한 것을 사용하면됩니다. 다른 사람이 멀티 컨테이너 심포니를 실행 한 경험이 있습니까? 생산에 응용 프로그램?

+0

우리는 현재 2 – Matteo

+0

@Matteo 옵션 번호가 어떻게 응용 프로그램에 대한 업데이트를 수행 할 채택 고정 표시기-compose.yml의 발췌 한 것입니까? 모든 종류의 이미지를 재구성하는 스크립트? 컨테이너를 다시 시작 하시겠습니까? – ManseUK

+0

우리는 github 훅으로 컨테이너를 재건축하는 도커 - 클라우드를 사용합니다. – Matteo

답변

2

각 서비스마다 컨테이너를 실행합니다. Docker 원칙 중 하나는 "관심사 분리"라는 점을 기억하십시오.

같은 컨테이너에 Nginx + PHP-FPM이있을 수도 있습니다.

모든 서비스를 시작하려면 (dev 환경 또는 prod 환경에서) docker-compose 및 "SYMFONY_ENV = dev"마법 환경 변수를 사용하여 모든 것을 시작하십시오. 별도의 conainer에서 소비자를 시작하는 것이 좋지만 다른 프로젝트/로그/캐시 경로를 사용하는 것이 좋습니다. 실제 CPU/메모리/디스크를 사용하여 실행중인 경우 온라인 성능에 영향을 줄 수있는 제품을 생산 중이라고 간주하십시오.

현재 웹 응용 프로그램을 배포/배포 한 대안 인 { }이 최선의 해결책은 이제 간단한 진입 점 bash 스크립트 ("docker run -d myimage php_entrypoint.SH "라는 :

  1. 은 CDN에 환경을
  2. 다운로드 및 업데이트 업체
  3. 동기화 자원을 준비, 업데이트 DB 스키마 등
  4. 내가 사용,이 경우 응용 프로그램 서버 (PHP-FPM을 실행

    #$OPTIMIZE is an ENV-propagated or a calulated variable 
    
    su -c "php composer.phar install $OPTIMIZE" webmgr 
    
    cp -f web/HTACCESS_${SYMFONY_ENV} web/.htaccess 
    
    /usr/bin/supervisord -c /etc/supervisord/supervisord.conf 
    
    ,691 :

그것은이 같은 결과) 작업을 할 supervisord

내가 supervisord를 사용하는 이유는 필자가 실행해야하는 [program :] 섹션을 복사/마운트해야하므로 php-fpm 및 CLI/소비자 작업 모두에 좋은 단일 PHP 이미지를 유지해야하기 때문입니다. 나는 또한 컨테이너를 죽이지 않고 php appserver를 재시작 할 수있다. 또한 supervisord는 "데몬화된"프로세스를 관리하는 데 아주 영리합니다.

업데이트]

웹 애플리케이션은 볼륨으로 장착 및 고정 표시기 - compose.yml가 고정 표시기 이미지 구성과 심포니 프로젝트가 포함 된 프로젝트 루트 디렉토리에 있습니다. 이

webapp_fpm: 
    image: ... 
    volumes: 
    - ./symfony:/var/www/html 
    - ./docker-conf/supervisord:/etc/supervisord 
    - /var/log/appname/symfony:/var/log/symfony 
    entrypoint: "/bin/bash php_entrypoint.sh" 
+0

애플리케이션은 어디에 저장되어 있습니까? 이미지에서? 또는 진입 점의 일부로 복제 되었습니까? – ManseUK

+0

원래 응답을 편집하여 한 곳에서 모든 것을 처리하고 도움이되기를 바랍니다. – cernio

관련 문제