가장 쉬운 방법 --link를 사용하는 것이지만, 새로운 버전의 도커는 그 방향에서 멀어지고 있으며 스위치는 곧 제거 될 것입니다.
아래 링크는 두 개의 컨테이너를 연결하는 좋은 방법을 제공합니다. 첨부 부분은 건너 뛸 수 있습니다. 그 부분은 이미지에 항목을 추가하는 데 유용합니다.
https://deis.com/blog/2016/connecting-docker-containers-1/
관심있는 부분은 두 용기 사이의 통신입니다. 가장 쉬운 방법은 웹 컨테이너 컨테이너에서 이름으로 DB 컨테이너를 참조하는 것입니다.
예 :
당신은 DB 컨테이너 DB1 및 웹 서버 컨테이너 WEB0 이름
. 컨테이너는 모두 브리지 네트워크에 있어야합니다. 즉, 웹 컨테이너가 이름을 참조하여 DB 컨테이너에 연결할 수 있어야합니다.
귀하의 앱에 대한 웹 설정 파일이있는 경우 DB 호스트의 경우 DB1 이름을 사용하게됩니다.
이전 버전의 docker를 사용하는 경우 --link를 사용해야합니다.
예 :
1 단계 : 다음 docker run --name db1 oracle/database:12.1.0.2-ee
당신이 웹 응용 프로그램을 시작합니다. 사용 :
2 단계 : docker run --name web0 --link db1 webapp/webapp:3.0
및 웹 응용 프로그램은 DB에 연결됩니다. 그러나, 내가 말한대로 - 링크 스위치는 곧 제거 될 것입니다.
대신 도커 작성 기능을 사용하면 네트워크를 구축 할 수 있습니다. 하나; 시스템에 대한 도커 작성을 다운로드해야합니다. https://docs.docker.com/compose/install/#prerequisites
예 설정은 다음과 같이이다 :
파일 이름이 base.yml입니다
version: "2" services: webserver: image: "moodlehq/moodle-php-apache:7.1 depends_on: - db volumes: - "/var/www/html:/var/www/html" - "/home/some_user/web/apache2_faildumps.conf:/etc/apache2/conf-enabled/apache2_faildumps.conf" environment: MOODLE_DOCKER_DBTYPE: pgsql MOODLE_DOCKER_DBNAME: moodle MOODLE_DOCKER_DBUSER: moodle MOODLE_DOCKER_DBPASS: "[email protected]" HTTP_PROXY: "${HTTP_PROXY}" HTTPS_PROXY: "${HTTPS_PROXY}" NO_PROXY: "${NO_PROXY}" db: image: postgres:9 environment: POSTGRES_USER: moodle POSTGRES_PASSWORD: "[email protected]" POSTGRES_DB: moodle HTTP_PROXY: "${HTTP_PROXY}" HTTPS_PROXY: "${HTTPS_PROXY}" NO_PROXY: "${NO_PROXY}"
이 네트워크에게 일반적인 이름을 이름을 것, 내가의 상단을 기억할 수없는 내 --name 스위치를 사용하지 않는 한 해당 이름을 사용하십시오.
IE docker-compose --name setup1 up base.yml
참고 : --name 스위치를 사용하는 경우, 당신이 이제까지 고정 표시기의 작성을 호출 할 때 그것을 사용해야합니다, 그래서 docker-compose --name setup1 down
이있다 그래서 당신은 웹 서버 및 DB의 두 개 이상의 인스턴스를 가질 수 있습니다, 이 경우 도커 작성은 명령을 실행할 인스턴스를 알고 있습니다. 한 번에 한 번 이상 실행하도록 설정할 수도 있습니다. 동일한 서버에서 동시에 테스트를 실행하는 경우 CI/CD에 적합합니다.
도커는 고정 표시기와 같은 명령이 구성 그래서 docker-compose --name setup1 exec webserver do_some_command
당신이 최대 명령에 추가 .yml 파일을 포함 할 수 단위 테스트에 대한 DB를 나 같은 뭔가를 변경하려는 경우 가장 좋은 부분이고, 비슷한 이름을 가진 항목을 덮어 씁니다. 키 => 값 대체라고 생각합니다.
예 :
db.yml
version: "2" services: webserver: environment: MOODLE_DOCKER_DBTYPE: oci MOODLE_DOCKER_DBNAME: XE db: image: moodlehq/moodle-db-oracle
그런 다음 docker-compose --name setup1 up base.yml db.yml
이 DB를 덮어 쓰게됩니다 호출합니다. 다른 설정으로. 각 컨테이너에서이 서비스에 연결해야하는 경우 서비스중인 이름 집합 (이 경우 webserver 및 db)을 사용합니다.
저는 이것이 실제로 귀하의 경우보다 유용한 설정이라고 생각합니다. 필요한 모든 변수를 yml 파일에 설정하고 시작할 필요가있을 때 docker 작성 명령을 실행하기 만하면됩니다. 그래서 더 시작하고 설정을 잊어 버려.
참고 : 컨테이너 -> 컨테이너 통신에 포트가 필요하지 않으므로 --port 명령을 사용하지 않았습니다. 호스트가 컨테이너 나 호스트 외부의 응용 프로그램에 연결되기를 원하는 경우에만 필요합니다. 포트를 공개하면 포트는 호스트가 허용하는 모든 통신에 열려 있습니다. 따라서 포트 80에서 웹을 노출하는 것은 실제 호스트에서 웹 서버를 시작하는 것과 동일하며 호스트가 허용하는 경우 외부 연결을 허용합니다. 또한 어떤 이유로 든 한 번에 하나의 웹 응용 프로그램을 실행하려는 경우 포트 80을 노출하면 해당 포트에서도 노출을 시도하면 추가 웹 응용 프로그램을 실행할 수 없습니다. 따라서 CI/CD의 경우 포트를 전혀 노출하지 않는 것이 가장 좋습니다. - 도커를 사용하여 --name 스위치를 사용하면 모든 컨테이너가 자체 네트워크에 있으므로 충돌은 발생하지 않습니다. 따라서 컨테이너의 컨테이너를 꽤 많이 가질 것입니다.
웹 컨테이너와 db 컨테이너가 모두 호스트 시스템에 있습니까? 그렇다면 사용하는 도커 버전은 무엇입니까? 이전 버전의 docker에는 한 가지 방법이 있었기 때문에 새 버전에는 다른 방식이 있습니다. 도커 작성 기능을 사용할 수 있습니까? 어느 것이 더 쉽게 만들지 만, 사용할 수없는 방법을 사용하여 답을주고 싶지 않습니다. – Caperneoignis