самый простой способ заключается в использовании -link, однако более новые версии докеров удаляются от этого, и фактически этот коммутатор будет удален в ближайшее время.
Приведенная ниже ссылка предлагает приятный способ подключения двух контейнеров. Вы можете пропустить часть прикрепления, так как это просто полезно для добавления элементов в изображения.
https://deis.com/blog/2016/connecting-docker-containers-1/
Часть вас интересует связь между двумя контейнерами. Самый простой способ - обратиться к контейнеру БД по имени из контейнера веб-сервера.
Пример:
вы назвали дб контейнер DB1 и веб-сервер контейнер WEB0. Контейнеры должны находиться в сети моста, что означает, что веб-контейнер должен иметь возможность подключаться к контейнеру БД, ссылаясь на его имя.
Итак, если у вас есть веб-конфигурационный файл для вашего приложения, то для хоста DB вы будете использовать имя DB1.
Если вы используете старую версию докера, то вы должны использовать ссылку.
Пример:
Шаг 1:
затем при запуске веб-приложения. Использование:
Шаг 2: docker run --name web0 --link db1 webapp/webapp:3.0
и веб-приложение будет связано с БД. Однако, как я уже сказал, скоро будет удален переключатель -link.
Вместо этого я буду использовать докеры, которые построят для вас сеть. Однако; вам нужно будет загрузить docker compose для вашей системы. 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 сочинять, так docker-compose --name setup1 down
это, так что вы можете иметь более одного экземпляра веб-сервера и БД, и в этом случае, так что сборщик докеров знает, к какому экземпляру вы хотите запускать команды; и также вы можете иметь более одного запуска одновременно. Отлично подходит для CI/CD, если вы параллельно проводите тестирование на одном сервере.
Docker сочинить также имеет ту же команду, как докер так docker-compose --name setup1 exec webserver do_some_command
лучшая часть, если вы хотите изменить децибел или что-то подобное для модульного тестирования вы можете включить дополнительный файл .yml в командном и он перезапишет любые элементы с похожими именами, я думаю, что это замена ключа =>.
пример:
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.
Я думаю, что это действительно может быть более полезной установкой в вашем случае. так как вы можете установить все переменные, которые вам нужны в файлах yml, и просто запустить команду для компоновки docker, когда они вам понадобятся. Поэтому начните его и забудьте о его настройке.
ПРИМЕЧАНИЕ. Я не использовал команду -port, поскольку для контейнеров-контейнеров не требуется использование портов. Это необходимо, только если вы хотите, чтобы хост подключался к контейнеру или к приложению из-за пределов хоста. Если вы выставляете порт, порт открыт для всех сообщений, разрешенных хостом. Таким образом, просмотр веб-порта на порту 80 аналогичен запуску веб-сервера на физическом хосте и разрешению внешних подключений, если хост его разрешает. Кроме того, если вы хотите запустить больше одного веб-приложения сразу, по какой-либо причине, то выставляя порт 80, вы не сможете запускать дополнительные веб-приложения, если вы попытаетесь разоблачить этот порт. Таким образом, для CI/CD лучше всего не открывать порты, и если использование докера выполняется с помощью ключа -name, все контейнеры будут в их собственной сети, поэтому они не будут сталкиваться. Таким образом, у вас в значительной степени будет контейнер с контейнерами.
Итак, как контейнер для контейнеров, так и контейнер db находятся на главной машине? Если да, то какую версию докера вы используете? Поскольку более старые версии докеров имели один способ сделать это, в то время как новые версии имеют другой способ. Вы также можете использовать docker-compose? Это упростит, но я не хочу давать ответ, используя метод, который вы не можете использовать. – Caperneoignis