2017-01-16 1 views
1

docker swarm 모드에서 webapp를 데이터베이스에 연결하는 방법을 알고 싶습니다. 저는 도커 모드를 사용하는 데있어 매우 익숙하며 로컬 컴퓨터에서 기본 클러스터 설정을했습니다. 모든 링크가 좋을 것입니다.Docker Swarm 모드에서 앱 연결

예 : drupal 응용 프로그램 호스팅 (drupal CMS 컨테이너에 mysql 데이터베이스 컨테이너가 연결됨).

감사 고정 표시기의 링크를 사용하여

답변

2

수정, 사용자 정의 네트워크를 사용하는 것은 앞으로 방법입니다 도움이됩니다. 아주 간단한 예를 들어 보겠습니다.

"오버레이"네트워크를 만듭니다 (오버레이 네트워크는 컨테이너가 웜의 다른 노드에서 실행 중이더라도 통신 할 수 있습니다).

docker network create --driver=overlay my-network 

my-db라는 이름의 데이터베이스 서비스를 만들고, 그것은 my-network 네트워크에 연결합니다. drupal은 my-network 네트워크를 통해 데이터베이스에 연결하기 때문에 데이터베이스 포트를 "게시"할 필요가 없습니다. 데이터베이스에 공개적으로 액세스하려면 데이터베이스 포트만 게시하십시오.

docker service create \ 
    --name=my-db \ 
    -e MYSQL_ROOT_PASSWORD=topsecret \ 
    -e MYSQL_DATABASE=drupal\ 
    -e MYSQL_USER=drupal-user \ 
    -e MYSQL_PASSWORD=secret \ 
    --network=my-network \ 
    mysql:5.7 

drupal 서비스 (이름이 mysite)를 만들고 동일한 네트워크에 연결하십시오. 당신이 서비스가 만들어

docker service create \ 
    --name=mysite \ 
    --network=my-network \ 
    --publish=8080:80 \ 
    drupal:8.2-apache 

후 공개적으로 액세스 할 수 있도록 원하기 때문에, 사이트의 포트를 게시하고, 용기는 (당신이 docker service ls와 상태를 확인할 수 있습니다), 당신은 당신의 브라우저에서 <host-ip>:8080를 방문 할 수 있습니다 실행하고 있습니다. 스웜 모드에서 <host-ip>의 IP 주소가 될 수 있습니다. 호스트에 있습니다. "라우팅 메쉬"는 컨테이너가 실행되는 노드에 네트워크 연결을 자동으로 라우팅합니다. 이제

, 당신은 MYSQL_USERMYSQL_PASSWORD에서 설정 한 사용자 이름/암호를 사용하고 (고급 옵션에서) 데이터베이스에 대한 호스트 이름으로 my-db를 사용하여, 드루팔을 구성 할 수 - 고정 표시기 네트워크를 사용하는 경우, 같은 다른 서비스에 연결할 수 있습니다 네트워크를 구성 할 수 있습니다.

drupal configuration

이 그냥 아주 간단한 예이다. 들여다 볼 수있는 것들이 있습니다.

  • 볼륨
  • 비밀 (컨테이너를 업데이트 할 때 정보가 지속될 수 있도록 볼륨에서 업로드 및 사용자 데이터를 저장); 환경 변수로 사용자 이름과 암호를 전달하는 것은 안전하지 않습니다. Docker 1.13은 docker secrets을 도입하여보다 안전한 방법으로 데이터베이스 자격 증명을 전달할 수 있습니다. 문서가 아직 게시되지 않았지만 할 수 있습니다. find them on GitHub