By masiyi, 21 March, 2024
Forums

为了实现将MySQL数据库和Drupal网站分开的能力(MySQL一个容器,Drupal一个容器,通过Docker的network将他们桥接起来)

1.创建一个自定义网络:docker network create my_network
[masiyi@Nuts-Login ~]$ docker network create msy_network
a31b02a31834293307b83c2590fb476917f9d96c0293d0e628fe7242241efbe8
[masiyi@Nuts-Login ~]$ docker network ls
NETWORK ID     NAME          DRIVER    SCOPE
5443b10973ad   bridge        bridge    local
55a1c111a6e4   host          host      local
a31b02a31834   msy_network   bridge    local
c2e728e30564   none          null      local

可以看到我们创建的msy_network的ID等信息,我们也可以通过下面的命令查看我们创建的network详细的创建时间、Ip等

[masiyi@Nuts-Login ~]$ docker network inspect msy_network 
[
    {
        "Name": "msy_network",
        "Id": "a31b02a31834293307b83c2590fb476917f9d96c0293d0e628fe7242241efbe8",
        "Created": "2024-03-11T20:12:47.655246491+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]

如果想查看特定的容器连接到了哪个网络,可以使用:docker network inspect bridge(network的名字) --format='{{range $key, $value := .Containers}}{{$key}} {{end}}'

[masiyi@Nuts-Login ~]$ docker network inspect bridge(network的名字) --format='{{range $key, $value := .Containers}}{{$key}} {{end}}'
01ae3f6dcf841f183a37482eea9f3ca2cc122e0cac13f36d5b21c70052a31688 18a7de0350e4100aadd577e4088089e5481372ed3abd5fb0b163e8dc0b47e102 20b9d80ba2285533adacf03ebfde1e32962514237152c420480d81ec642ac019 9fa74ddef7a5439ed49e127048546820fe96f931c986ca2992f2134048c12ded b09d1f5e1d441951435e46978d010f8e987f4d2361668b2309ee9f765a6cab9c b3cfc2fd084c39a60dc42aaa83e30329fb40d114fc6dbea3dc177fc0fdfa20c2 b8c6f00da4d94109a14ed6669c7b52e9885bfae094a97bb43ff6d19ce19e1a8b bb28305ebc4c2554f1c919be2a405e734001d3fee442b15ddd790ea9a921ec44 d788f5832d54e7355f4ea4800c0233c828c98283fbade7678989a0c147223d4d dcf59c8aae23d993ceab1fe192d6c461be524eb9b7eb5f6ed17df290e91c7b63 e1e718c4e57cc7a69c9db40974be9123e40bdbcf26fee9443ef60ebe0291e9a6 ef709f287233865ebc5a8bb6a8227f68330530b70fb49e9c883807567e120797 f6f5e8d1a851231272781c08866e96ab85e8af46b7b67ca9f862a10a06d51aa5 f75c04f6f661a5a674ac12e5fe0cab02338cf6b41f8e56716c89766dc42d4724 f845b400013bebb11aab5a473b1d50a59f5b4403c72b6b509dd756a99ad1aa3c

如果只是想筛选特定容器的IP可以使用:docker inspect pagd_test(容器名字) --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'

[masiyi@Nuts-Login ~]$ docker inspect drupal10 --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'
172.18.0.3
2.然后就可以启动容器并且将其连接到自定义网络,这里以MySQL为例
[masiyi@Nuts-Login ~]$ docker run --network=msy_network --name drupal_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=zhanglab2014 -d mysql:latest
0df2979ada29aac80918ae2ba8219f172d07126f1b16f747204a8ae164c85261

然后将网站(以Drupal10为例)与MySQL连接起来

[masiyi@Nuts-Login ~]$ docker run -it -p 6044:80 --name drupal10 -d --network msy_network drupal /bin/bash
cbb8b6ef03ac7be219ee946ac249ad02adb78464d0722c7cd4aceecf6f314326
[masiyi@Nuts-Login ~]$ docker ps
CONTAINER ID   IMAGE                           COMMAND                  CREATED          STATUS          PORTS                                                                                                                  NAMES
cbb8b6ef03ac   drupal                          "docker-php-entrypoi…"   4 seconds ago    Up 3 seconds    0.0.0.0:6044->80/tcp, :::6044->80/tcp                                                                                  drupal10

现在再查看我们自己创建的network,里面就出现了我们新连接进去的MySQL与Drupal10

[masiyi@Nuts-Login ~]$ docker network inspect msy_network 
[
    {
        "Name": "msy_network",
        "Id": "a31b02a31834293307b83c2590fb476917f9d96c0293d0e628fe7242241efbe8",
        "Created": "2024-03-11T20:12:47.655246491+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "0df2979ada29aac80918ae2ba8219f172d07126f1b16f747204a8ae164c85261": {
                "Name": "drupal_mysql",
                "EndpointID": "2db8097423feacd7d6a97ab168c333bcaee2e24451cf6b55d4069967ea83c074",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            },
            "cbb8b6ef03ac7be219ee946ac249ad02adb78464d0722c7cd4aceecf6f314326": {
                "Name": "drupal10",
                "EndpointID": "6c6f4b35537e85ac25a42dda8970cc66213ddf30ab57a6c33157e3694d922fe9",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]