2016-10-18 4 views
0

현재 현재 수많은 패키지로 구성된 하나의 응용 프로그램 인 golang 웹 응용 프로그램에서 작업 중이며 개별 도커 컨테이너에 배포됩니다. 나는 redis 인스턴스와 mysql 인스턴스를 별도의 컨테이너로 전개하고 링크했다. 그들의 주소를 얻기 위해, 나는 docker에 의해 설정된 환경 변수에서 그것들을 가져온다. 나는 다른 서비스에 프록시 요청을하는 'api'라고 불리는 HTTP 포트 (HTTP의 경우 80, https의 경우 443)를 노출시키는 하나의 서비스가있는 API 게이트웨이 패턴을 구현하고 싶습니다. 다른 서비스는 공개적으로 포트를 공개하는 것이 아니라 자신이 의존하는 서비스와 직접 연결되는 것이 이상적입니다.api 게이트웨이 용 http를 통한 연결된 도커 컨테이너 간의 통신

그래서 api는 mysql과 redis를 제외한 모든 서비스와 연결됩니다. 사용자의 세션 정보를 확인해야하는 서비스는 사용자 서비스 등과 연결됩니다. 내 질문은 http 서버가 도커가 컨테이너 사이를 링크하는 포트에서 HTTP 요청을 수신하도록하는 방법입니다.

답변

2

가장 간단한 방법은 Docker Compose입니다. 원하는 서비스를 간단하게 정의 할 수 있으며 Docker Compose는 전용 네트워크에서 자동으로 연결합니다. goapp, redismysql 인스턴스가 있고 역방향 프록시로 nginx을 사용한다고 가정합니다. 다음과 같이 docker-compose.yml 파일은 같습니다

services: 
    redis: 
    image: redis 
    mysql: 
    image: mysql 
    goapp: 
    image: myrepo/goapp 
    nginx: 
    image: nginx 
    volumes: 
     - /PATH/TO/MY/CONF/api.conf:/etc/nginx/conf.d/api.conf 
    ports: 
     - "443:443" 
     - "80:80" 

장점은 당신의 이름으로 다른 서비스에서 모든 서비스를 참조 할 수 있다는 것입니다. 따라서 goapp에서 호스트 이름 mysql 등으로 MySQL 서버에 접속할 수 있습니다. 노출 된 포트 (예 : 호스트 시스템에서 연결할 수 있음)는 443이고 80nginx 컨테이너입니다.

docker-compose up으로 전체 시스템을 시작할 수 있습니다!

+0

굉장! 감사합니다 –

+0

@ LoganShire 내가 도울 수있어서 기뻐요 :) –

+0

goapp의 포트를 설정하지 않고 goapp에 nginx 업스트림 서버를 설정하는 방법을 파악하려고합니다. api.conf 예제를 게시 할 수 있습니까? (또는 바람직하게, nginx.conf) –