【问题标题】:create a service for an existing container in swarm mode in azure在 azure 中以 swarm 模式为现有容器创建服务
【发布时间】:2019-05-12 22:51:08
【问题描述】:

注意:我是 docker/swarm 的新手。

我已经按照https://docs.docker.com/compose/wordpress/ 在 Azure 上运行的 docker swarm 模式下创建了一个 WordPress/mysql 容器。

集群是根据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

一旦启动,在 AWS 或 Azure 门户中找到 DefaultDNSTarget 输出以访问该站点。


使用 docker ps,我可以看到它正在侦听 0.0.0.0:8000->80,但是,如果没有服务,它不会自动为容器创建天蓝色负载平衡规则。

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

谢谢

【问题讨论】:

    标签: docker docker-compose dockerfile swarm azure-load-balancer


    【解决方案1】:

    我没有将 docker 服务映射到现有容器的经验。据我所知,它在 swarm 中的作用与 docker run 命令相同。你可以看看其中的description

    如果你真的喜欢将服务映射到容器,我建议使用AKS,而不是 Azure 中的 Docker Swarm,它对服务和容器来说更易于管理。它可以将服务映射到容器,无论它是现有的还是创建一个新的。

    对于发布端口的问题。您可以通过在docker run 命令中使用参数--publish 来实现它,如下所示:

    docker run -d -p 80:80 my_image
    

    或者你可以在 compose 文件中这样做:

    ports:
           - "8000:80"
    

    但是你不能在 Dockerfile 中发布端口,你可以通过 EXPOSE 告诉容器应用程序监听哪个端口。看看Expose vs publish: Docker port commands explained simply就知道了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-30
      • 2016-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-20
      • 1970-01-01
      • 2019-02-03
      相关资源
      最近更新 更多