我需要在 docker 中创建多主机网络吗?

Do I need to create multi host network in docker?

对于以下 docker-动态构建 docker 文件:

version: '2'

volumes:
  jenkins_home:
    external: true

services:
  jenkins:
    build:
      context: .
      args:
        DOCKER_GID: ${DOCKER_GID}
        DOCKER_ENGINE: ${DOCKER_ENGINE}
        DOCKER_COMPOSE: ${DOCKER_COMPOSE}
    volumes:
      - jenkins_home:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - "8080:8080"

创建网桥类型网络(project1_default)已创建:

$ docker network ls
NETWORK ID          NAME                     DRIVER              SCOPE
....
f1b7ca7c6dfe        project1_default         bridge              local
....

在 运行 以下命令之后:

$ docker-compose -p project1 up -d

启动并连接到 master jenkins 后,我们使用 master jenkins 的 EC2 plugin 在单独的 EC2 主机上配置和创建 slave jenkins。

但是,以上网络(project1_default)是单主机网络,可以允许数据包在单主机内传输。下面是我对桥式网络的可视化 (project1_default)...

因此,我们需要启动并配置 master jenkins 以使用 EC2 插件在单独的 EC2 主机上启动 slave jenkins,


  1. 我需要创建多主机网络(swarm)类型吗?而不是桥接类型 (project1_default)...

  2. 如果是,如何创建多主机网络?

这三个都应该 运行 在一个容器中?另外,容器 运行ning 在单独的 ec2 实例上,对吗?

您可以向底层主机 IP 公开必要的端口。这会将 Jenkins 容器暴露给您的网络,您将能够与之交互,就像它直接安装在 ec2 实例上(而不是在容器中)一样。

举个例子

docker run -p 80:8080 ubuntu bash

这会将容器中的端口 8080 暴露给主机上的端口 80。从您的主服务器开始,然后是从服务器,然后使用 ec2 实例的 IP 和您为从服务器公开的端口,就像在非容器设置中一样添加您的从服务器。

您可以在此处找到有关端口发布的更多信息