2016-09-12 2 views
6

간단한 Django 응용 프로그램 (5 개의 컨테이너, 3 개의 이미지)을 설명하는 몇 가지 작성 파일 (docker-compose.yml)이 있습니다.Docker Compose 스택을 프로덕션 환경에서 실행하는 데 권장되는 방법은 무엇입니까?

이 스택을 프로덕션 환경에서 실행하고 싶습니다. 전체 스택을 부팅 할 때 시작하고 컨테이너가 다시 시작되거나 충돌이 발생하면 다시 만들 수 있습니다. 내가 관심을 갖는 볼륨이 없으며 컨테이너는 중요한 상태를 유지하지 않으며 마음대로 재활용 할 수 있습니다.

이와 같은 방식으로 제작자가 특별히 작성한 도커 작성에 대한 많은 정보를 찾지 못했습니다. The documentation은 도움이되지만 부팅시 시작에 대해서는 언급하지 않았으며 Amazon Linux를 사용하고 있으므로 Docker Machine에 액세스 할 수 없습니다. 나는 supervisord를 사용하여 프로세스를 보모하고 부팅시 시작하는지 확인하는 데 익숙해졌지만, Docker 컨테이너로 궁극적으로 Docker 데몬의 감독하에 끝나는 것처럼 생각하지 않습니다.

간단한 시작으로 모든 서비스에 restart: always을 넣고 부팅시 docker-compose up -d 초기화 스크립트를 작성하는 것이 좋습니다. 생산 방식에서 도커 - 작성 스택을 강력하게 관리하기위한 권장 방법이 있습니까?

편집 : 강력한 방법으로 컨테이너 스택에 docker-compose up을 실행하는 '간단한'방법을 찾고 있습니다. 스택에서 선언 된 모든 컨테이너는 동일한 시스템에 상주 할 수 있다는 것을 알고 있습니다. 이 경우 여러 인스턴스에서 동일한 스택의 컨테이너를 조율 할 필요가 없지만이를 알고 있으면 도움이됩니다.

+0

의 경우를 다시 시작 그래서 당신은 반드시 전체 날려 지휘자를하지 않으려는 것이 아니라 보장 단일 서버 것은 일종의 '고정 표시기가 up' 구성 할 때 AWS는 컨테이너를 시작합니다 있어? 도커 작성이나 뭐라구? – Timo

+0

@TimoLehto 이전에 monit과 마주 친 적이 없었지만 한눈에 'monock for docker compose'라고 말하면 내가 찾고있는 것 근처에있을 것입니다. 부팅 할 때 모든 것을 실행하고 컨테이너를 다시 시작하십시오 (이유가 있음).) 실패한 경우 –

답변

7

Compose는 클라이언트 도구이지만 docker-compose up -d을 실행하면 모든 컨테이너 옵션이 엔진으로 보내지고 저장됩니다. restartalways (또는 선호하면 unless-stoppedto give you more flexibility)으로 지정하면 호스트가 부팅 될 때마다 docker-compose up을 실행할 필요가 없습니다.

호스트가 시작될 때 부팅 할 때 configured the Docker daemon이 시작되면 Docker는 다시 시작할 플래그가 지정된 모든 컨테이너를 시작합니다. 따라서 docker-compose up -d번을 번 실행하면 나머지는 Docker가 처리합니다.

Swarm에서 여러 노드의 컨테이너를 조정하는 방법은 선호하는 방법은 Distributed Application Bundles이지만 현재 (Docker 1.12 현재) 실험 중입니다. 기본적으로 분산 시스템을 나타내는 로컬 Compose 파일에서 번들을 만든 다음 원격으로이를 Swarm에 배포합니다. Docker는 빠르게 움직이므로 곧 사용할 수있는 기능을 기대합니다.

+0

이것은 가장 간단한 해결책입니다 - 나는 Docker 데몬을 다시 시작하면서 계속되는'restart : always'를 몰랐습니다! –

1

생산에서 docker-compose 사용에 대한 추가 정보는 documentation에서 찾을 수 있습니다. 그러나 그들이 말한대로 compose은 주로 개발 및 테스트 환경을 목표로합니다.

컨테이너를 프로덕션에서 사용하려면 Kubernetes과 같이 적절한 도구를 사용하여 컨테이너를 조정하는 것이 좋습니다.

+0

연결된 문서가 오래되었습니다. Kubernetes는 재미있어 보이지만 학습 곡선이 가파르게 보임과 함께 독창적으로 작동하지 않는다. –

+0

나는 가장 최근의 문서로 나의 대답을 업데이트했다. – JesusTinoco

1

당신이 swarmkitservice (고정 표시기 1.11+)와 같은 장고 응용 프로그램을 구성 할 수 있습니다 경우 작업하여 응용 프로그램의 실행을 조율 할 수 있습니다.

Swarmkit has a restart policy (swarmctl flags 참조)

다시 정책 : 오케스트레이션 층 작업을 모니터링하고, 특정 정책에 기초하여 결함에 반응한다.
운영자는 재시작 조건, 지연 및 한계 (주어진 시간 창에서 최대 시도 횟수)를 정의 할 수 있습니다. SwarmKit은 다른 컴퓨터에서 작업을 다시 시작하기로 결정할 수 있습니다. 이는 결함 노드가 점차적으로 작업을 포기한다는 것을 의미합니다.

"클러스터"에 하나의 노드 만 있어도 오케스트레이션 계층은 컨테이너가 항상 실행되고 있는지 확인합니다.

1

당신은 AWS를 사용한다고 말하면 왜 당신이 묻는 것을 위해 만들어진 ECS을 사용하지 마십시오. 5 개의 컨테이너 팩인 응용 프로그램을 만듭니다. 클러스터에 원하는 EC2 인스턴스 수와 인스턴스 수를 구성합니다.

docker-compose.yml을 어렵지 않은 특정 Dockerrun.aws.json으로 변환하면됩니다.

배포와도 충돌

+0

ECS는 좋지만이 경우 AWS 인프라를 제어 할 수 없으며 제공된 EC2 인스턴스를 사용해야합니다. –

관련 문제