создать сервис для существующего контейнера в режиме роя в лазури - PullRequest
0 голосов
/ 13 мая 2019

Примечание: я новичок в Docker / Swarm.

Я создал контейнеры WordPress / MySQL в режиме Docker Swarm, работающем в Azure, согласно https://docs.docker.com/compose/wordpress/.

Кластер создансогласно https://docs.docker.com/docker-for-azure/

вот мой dockerfile:

======================
version: '3.3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
       WORDPRESS_DB_NAME: wordpress
volumes:
    db_data: {}
=======================

согласно официальной документации, я могу публиковать порты, используя флаг --published, однако мне нужно знать, как включить этов Dockerfile.


Запуск приложений Теперь вы можете начать создавать контейнеры и службы.

$ docker run hello-world

Вы также можете запускать веб-сайты.Порты, предоставляемые с помощью --publish, автоматически отображаются через балансировщик нагрузки платформы:

$ docker service create --name nginx --publish published=80,target=80 nginx

После запуска найдите выход DefaultDNSTarget на порталах AWS или Azure для доступа к сайту.


Используя docker ps, я вижу, что он прослушивает 0.0.0.0:8000->80, однако без службы он не будет автоматически создавать правило балансировки нагрузки Azure для контейнера.

swarm-manager000000:~/compose$ docker ps
CONTAINER ID        IMAGE                                           COMMAND                  CREATED             STATUS              PORTS                     NAMES
8c94587acd97        wordpress:latest                                "docker-entrypoint.s…"   10 minutes ago      Up 10 minutes       0.0.0.0:8000->80/tcp      compose_wordpress_1
aff61e0022a8        mysql:5.7                                       "docker-entrypoint.s…"   10 minutes ago      Up 10 minutes       3306/tcp, 33060/tcp       compose_db_1
5d2fdb3d75c4        docker4x/l4controller-azure:18.09.2-ce-azure1   "loadbalancer run --…"   2 hours ago         Up 2 hours                                    editions_controller
d5f0a8a91f66        docker4x/meta-azure:18.09.2-ce-azure1           "metaserver -iaas_pr…"   2 hours ago         Up 2 hours          10.0.0.4:9024->8080/tcp   meta-azure
93c6571b6ee6        docker4x/guide-azure:18.09.2-ce-azure1          "/entry.sh"              2 hours ago         Up 2 hours                                    editions_guide
b6cad5676b10        docker4x/logger-azure:18.09.2-ce-azure1         "python /server.py"      2 hours ago         Up 2 hours          0.0.0.0:514->514/udp      editions_logger
d2a74fe21751        docker4x/agent-azure:18.09.2-ce-azure1          "supervisord --confi…"   2 hours ago         Up 2 hours                                    agent
swarm-manager000000:~/compose$

Если, например, я попытался создать сервис, который сопоставлен с новым образом, например: nginx.это немедленно создаст входящее правило в балансировщике нагрузки Azure.

$ docker service create --name nginx --publish published=80,target=80 nginx

Посоветуйте, пожалуйста, как сопоставить службу с существующим контейнером WordPress или как обновить Dockerfile, чтобы создать службу и использовать --published.

Спасибо

1 Ответ

0 голосов
/ 13 мая 2019

У меня нет опыта, который сопоставляет службу докера с существующим контейнером.Как я знаю, в рое он делает то же самое, что и команда docker run.Вы можете взглянуть на описание из них.

Если вы действительно хотите сопоставить службу с контейнером, я предлагаю AKS , чем Docker Swarm в Azure., это более управляемо для вас за услугу и контейнер.Он может сопоставить службу с контейнером, независимо от того, существует ли он, или создать новый.

Для публикации проблемы порта.Вы можете достичь этого, используя параметр --publish в команде docker run, например:

docker run -d -p 80:80 my_image

Или вы можете сделать это в файле compose следующим образом:

ports:
       - "8000:80"

Но вы не можете опубликовать порт в Dockerfile, вы можете просто указать контейнеру, какой порт приложение слушает, используя EXPOSE.Посмотрите на Expose vs publish: команды порта Docker объяснены просто , тогда вы узнаете это.

...