下载安装 docker 桌面

创建一个网络,让所有的容器之间可以相互通讯

docker network create -d bridge my-net

拉取各镜像

docker pull mysql:8
docker pull redis:7
docker pull nginx

启动各镜像

注意:挂载本地目录的时候,需要看容器内的具体目录是什么,比如redis容器是将数据写入到/data目录

# 启动 Redis
docker run --name redis -d -p 6379:6379 --network my-net --mount type=bind,source=D:\shuxiaoyuan\Docker\Redis\7,target=/data --mount type=bind,source=D:\shuxiaoyuan\Docker\Redis\7\redis.conf,target=/etc/redis/redis.conf redis:7 redis-server /etc/redis/redis.conf --appendonly yes

# 启动 MySQL
docker run --name mysql -it -d -p 3306:3306 --network my-net -e MYSQL_ROOT_PASSWORD=123456 --mount type=bind,source=D:\shuxiaoyuan\Docker\MySQL,target=/var/lib/mysql mysql:8

# 启动 PgSQL
docker run --name pgsql --network my-net -e POSTGRES_PASSWORD=123456 -p 5432:5432 --mount type=bind,source=D:\shuxiaoyuan\Docker\Yida\PgData,target=/var/lib/postgresql/data -d postgres:16

# 启动 Nginx
# 注意:nginx 容器和 PHP 容器记得都要挂载代码目录,不然 css、js等静态文件访问会 404
docker run -d -p 80:80 -p 443:443 --name nginx --network my-net --mount type=bind,source=D:\shuxiaoyuan\Docker\MI\Nginx\www,target=/usr/share/nginx/html --mount type=bind,source=D:\shuxiaoyuan\Docker\MI\Nginx\logs,target=/var/log/nginx --mount type=bind,source=D:\MyCode,target=/www --mount type=bind,source=D:\shuxiaoyuan\Docker\MI\Nginx\conf\nginx.conf,target=/etc/nginx/nginx.conf --mount type=bind,source=D:\shuxiaoyuan\Docker\MI\Nginx\conf\conf.d,target=/etc/nginx/conf.d nginx

# 启动 PHP 镜像
docker run --name php80 -d --network my-net --mount type=bind,source=D:\MyCode,target=/www shuxiaoyuan/php:8.0.28.v3

测试

本机用客户端连接 Redis、MySQL

查看网络

docker network inspect my-net

# 如下所示
[
    {
        "Name": "my-net",
        "Id": "294d948a918c81241e0c7e14bcbee7cd24f50a30fa6931914045cadd8f06d749",
        "Created": "2023-03-15T03:06:43.7510048Z",
        "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": {
            "2b2b018062aa22c4653c341d2a58ffb20cbd145e9575a2149c70e9c2defc4d18": {
                "Name": "mysql",
                "EndpointID": "7de0ad75f085532460d413fc18b66219765bfc6b8638a577807990329f487fd8",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            },
            "3408aeef4eec4fb61d64db292c59e2758141214fe5e69b21e17b8319ab06622f": {
                "Name": "ecshop",
                "EndpointID": "4c6414ca0fc2c48e3a388b9d4cf566eab39a170a9983549fbee3dfeff0d75a0a",
                "MacAddress": "02:42:ac:12:00:04",
                "IPv4Address": "172.18.0.4/16",
                "IPv6Address": ""
            },
            "a590f2231f13116322cc1edc79aff07aa70a8d364d17dbb45d4c6b0fd98a3ade": {
                "Name": "redis",
                "EndpointID": "6de904bffdb25b6543b423c816d811f554643d509fe5abb24842c01635508c02",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

容器内互 ping

docker exec -it redis /bin/bash
ping 172.18.0.3

# 若提示么有找到 ping 命令,请自行安装
apt-get update && apt install iputils-ping

代码连接 Redis、MySQL

修改项目的 env 配置即可,看是否能链接成功