Docker Compose 创建自定义网络

在 Docker Compose 中,可以使用 networks 配置项快速且方便地创建自定义网络。

在 docker-compose.yml 文件中定义网络

version: '3'

services:
  # 定义mysql服务
  mysql:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: 12345678
      MYSQL_DATABASE: demo_db
    volumes:
      - /var/data/mysql:/var/lib/mysql
    networks:
      # 加入到自定义的mynetwork网络中,看这里
      - mynetwork
  # 定义nginx服务
  nginx:
    image: nginx:latest
    ports:
      - "8080:80"
    depends_on:
      - mysql
    volumes:
      - /var/data/nginx_config:/etc/nginx/conf.d
      - myvolume:/usr/share/nginx/html
    networks:
      # 加入到自定义的mynetwork网络中,看这里
      - mynetwork

# 自定义网络,看这里
networks:
  mynetwork:
    driver: bridge

volumes:
  myvolume:

上面例子中,首先定义了一个名为 mynetwork 的网络,其驱动类型为 bridge。然后,mysql 和 nginx 服务都加入到自定义的 mynetwork 网络。

启动应用并查看网络

在包含上述docker-compose.yml文件的目录中,运行以下命令启动应用:

// 启动容器
root@hxstrive:~# docker-compose up -d
Creating network "root_mynetwork" with driver "bridge"
Creating root_mysql_1 ... done
Creating root_nginx_1 ... done

可以使用以下命令查看创建的网络:

// 查看网络列表
root@hxstrive:~# docker network ls
NETWORK ID     NAME             DRIVER    SCOPE
ac700a39ff94   bridge           bridge    local
23f832eeba6e   host             host      local
750730ce4667   mynetwork        bridge    local
f83cddfed9c2   none             null      local
efb10cc5a121   root_default     bridge    local
98c408eab28b   root_mynetwork   bridge    local 这就是刚创建的网络

上面将列出所有的 Docker 网络,包括自定义网络 “mynetwork”。

注意,上面名为“root_mynetwork”的网络就是我们定义的“mynetwork”网络,其中“root”是用户名,由 docker compose 自动拼接上去的,用于避免网络名称冲突。

执行 docker network inspect 查看 root_mynetwork 网络详细信息:

root@hxstrive:~# docker network inspect root_mynetwork
[
    {
        "Name": "root_mynetwork",
        "Id": "98c408eab28bca735535621aeffb8739c742d37b380be766f572110f344e43c9",
        "Created": "2024-09-10T15:16:20.124885499+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        // 该网络中包含两个容器
        "Containers": {
            "1ae23e52517815af471e7fd643d320a8cdbbe97fc278fa4f6c548d8bab236fb2": {
                "Name": "root_mysql_1",
                "EndpointID": "f82636a24625bf91d8ee08facec158487ce95f087893ea2a814988f4ccc2e2e1",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            },
            "31406648dcae589264ee8b5e0168acd4661868224ae6a7c486dddb8b2241345d": {
                "Name": "root_nginx_1",
                "EndpointID": "e3a8198de46483b4715941039f9cb3e85c4317d7678ed905d6554c41f75702f1",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "mynetwork",
            "com.docker.compose.project": "root",
            "com.docker.compose.version": "1.29.2"
        }
    }
]

注意,通过创建自定义网络,可以更好地组织和管理容器之间的通信,提高应用程序的可扩展性和可维护性。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号