【Linux运维大神系列】Docker详解(二)

目录

容器的启动和停止

1)启动容器

2)停止容器

3)重启容器

温馨提示:

容器启动时指定自定义命令

1)查看容器的启动命令

2)启动容器自定义命令

3)连接正在运行的容器

查看容器的详细信息

1)查看容器所有详细信息

2)查看容器的进程ID

3)查看容器ID

4)查看容器IP地址

docker容器的重启策略

容器退出时自动删除容器

将宿主机的路径挂载到容器的指定路径

多个容器挂载相同宿主机的挂载点

1)指定宿主机的路径挂载

2)基于--volumes-from实现和指定容器相同的挂载信息

3)一个容器挂载多个挂载点

docker的存储卷挂载

1)查看本地的存储卷

2)创建存储卷

2.1创建匿名存储卷(随机存储卷)

2.2创建自定义名称的存储卷

2.3查看底层的存储目录

3)查看存储卷的详细信息

4)删除存储卷

4.1删除指定的存储卷

4.2删除所有未使用的存储卷

5)运行容器挂载已有的存储卷

5.1提前创建存储卷

5.2运行容器使用已有的存储卷

6)运行容器挂载不存在的存储卷

7)不指定存储卷时会随机生成匿名存储卷

8)查看容器的挂载点

温馨提示

docker存储卷案例练习

1)启动数据库

2)启动wordpress

​编辑3)删除容器

4)重启容器,观察是否可以正常访问

docker的单机网络类型

1)docker默认有五种单机网络类型

2)案例实战

2.1查看现有的网络类型

2.2启动容器

2.3检查各节点容器的ip地址

单机网络通信的三种方案

1)添加hosts解析

2)使用--link关联

3)自定义网络

3.1查看现有的网络列表

3.2创建自定义网路

3.3查看网络的信息

3.4启动容器指定自定义网络

3.5验证自定义网络容器的通信

3.6删除未使用的网络

3.7删除指定网络

3.8创建网络时可以自定义网关,ip地址范围,子网范围,网络类型等

①创建自定义子网

②查看自定义网络信息

③指定自定义网络

④手动分配IP地址

容器的启动和停止

1)启动容器

bash 复制代码
#查看所有容器,全部处于Exited
[root@docker101 ~]#docker ps -a
CONTAINER ID   IMAGE                COMMAND                  CREATED       STATUS                      PORTS     NAMES
74011d62e837   wordpress            "docker-entrypoint.s..."   3 hours ago   Exited (0) 11 minutes ago             wp
bf1262a00395   mysql:8.3.0-oracle   "docker-entrypoint.s..."   3 hours ago   Exited (0) 11 minutes ago             mysql-server

#按照容器名字启动
[root@docker101 ~]#docker start wp
time="2025-12-08T21:00:00.484967410+08:00" level=info msg="loading plugin \"io.containerd.event.v1.publisher\"..." runtime=io.containerd.runc.v2 type=io.containerd.event.v1
time="2025-12-08T21:00:00.485073529+08:00" level=info msg="loading plugin \"io.containerd.internal.v1.shutdown\"..." runtime=io.containerd.runc.v2 type=io.containerd.internal.v1
time="2025-12-08T21:00:00.485090911+08:00" level=info msg="loading plugin \"io.containerd.ttrpc.v1.task\"..." runtime=io.containerd.runc.v2 type=io.containerd.ttrpc.v1
time="2025-12-08T21:00:00.485213561+08:00" level=info msg="loading plugin \"io.containerd.ttrpc.v1.pause\"..." runtime=io.containerd.runc.v2 type=io.containerd.ttrpc.v1
wp

#按照容器ID启动
[root@docker101 ~]#docker start bf1262a00395
time="2025-12-08T21:00:18.817459910+08:00" level=info msg="loading plugin \"io.containerd.event.v1.publisher\"..." runtime=io.containerd.runc.v2 type=io.containerd.event.v1
time="2025-12-08T21:00:18.817572661+08:00" level=info msg="loading plugin \"io.containerd.internal.v1.shutdown\"..." runtime=io.containerd.runc.v2 type=io.containerd.internal.v1
time="2025-12-08T21:00:18.817590935+08:00" level=info msg="loading plugin \"io.containerd.ttrpc.v1.task\"..." runtime=io.containerd.runc.v2 type=io.containerd.ttrpc.v1
time="2025-12-08T21:00:18.817699859+08:00" level=info msg="loading plugin \"io.containerd.ttrpc.v1.pause\"..." runtime=io.containerd.runc.v2 type=io.containerd.ttrpc.v1
bf1262a00395

#查看容器,处于UP状态
[root@docker101 ~]#docker ps
CONTAINER ID   IMAGE                COMMAND                  CREATED       STATUS          PORTS                                                    NAMES
74011d62e837   wordpress            "docker-entrypoint.s..."   3 hours ago   Up 22 seconds   0.0.0.0:88->80/tcp, :::88->80/tcp                        wp
bf1262a00395   mysql:8.3.0-oracle   "docker-entrypoint.s..."   3 hours ago   Up 4 seconds    33060/tcp, 0.0.0.0:13306->3306/tcp, :::13306->3306/tcp   mysql-server

2)停止容器

bash 复制代码
[root@docker101 ~]#docker ps -a
CONTAINER ID   IMAGE                COMMAND                  CREATED       STATUS          PORTS                                                    NAMES
74011d62e837   wordpress            "docker-entrypoint.s..."   4 hours ago   Up 52 minutes   0.0.0.0:88->80/tcp, :::88->80/tcp                        wp
bf1262a00395   mysql:8.3.0-oracle   "docker-entrypoint.s..."   4 hours ago   Up 31 minutes   33060/tcp, 0.0.0.0:13306->3306/tcp, :::13306->3306/tcp   mysql-server

#按照容器名字停止
[root@docker101 ~]#docker stop -t 0 wp    #-t表示指定等待多久开始发送kill指令。如果停止服务较长,默认等待10s。
wp

#按照容器ID停止
[root@docker101 ~]#docker stop bf1262a00395
bf1262a00395

[root@docker101 ~]#docker ps -a
CONTAINER ID   IMAGE                COMMAND                  CREATED       STATUS                        PORTS     NAMES
74011d62e837   wordpress            "docker-entrypoint.s..."   4 hours ago   Exited (137) 12 seconds ago             wp
bf1262a00395   mysql:8.3.0-oracle   "docker-entrypoint.s..."   4 hours ago   Exited (0) 3 seconds ago                mysql-server

3)重启容器

bash 复制代码
[root@docker101 ~]#docker ps -a
CONTAINER ID   IMAGE                COMMAND                  CREATED       STATUS                        PORTS     NAMES
74011d62e837   wordpress            "docker-entrypoint.s..."   4 hours ago   Exited (137) 12 seconds ago             wp
bf1262a00395   mysql:8.3.0-oracle   "docker-entrypoint.s..."   4 hours ago   Exited (0) 3 seconds ago                mysql-server

#重启容器
[root@docker101 ~]#docker restart wp
wp
[root@docker101 ~]#docker restart mysql-server 
mysql-server


[root@docker101 ~]#docker ps -a
CONTAINER ID   IMAGE                COMMAND                  CREATED       STATUS          PORTS                                                    NAMES
74011d62e837   wordpress            "docker-entrypoint.s..."   4 hours ago   Up 14 seconds   0.0.0.0:88->80/tcp, :::88->80/tcp                        wp
bf1262a00395   mysql:8.3.0-oracle   "docker-entrypoint.s..."   4 hours ago   Up 10 seconds   33060/tcp, 0.0.0.0:13306->3306/tcp, :::13306->3306/tcp   mysql-server

注意:重启本质本质就是停止再启动。只要停止容器就会重新对STATUS进行重新计数。

温馨提示:

bash 复制代码
1.docker stop命令本质是调用的是docker kill表示杀死容器的进程ID。
[root@docker101 ~]#docker ps -a
CONTAINER ID   IMAGE                COMMAND                  CREATED       STATUS          PORTS                                                    NAMES
74011d62e837   wordpress            "docker-entrypoint.s..."   4 hours ago   Up 14 seconds   0.0.0.0:88->80/tcp, :::88->80/tcp                        wp
bf1262a00395   mysql:8.3.0-oracle   "docker-entrypoint.s..."   4 hours ago   Up 10 seconds   33060/tcp, 0.0.0.0:13306->3306/tcp, :::13306->3306/tcp   mysql-server

[root@docker101 ~]#docker kill wp
wp

[root@docker101 ~]#docker ps -a
CONTAINER ID   IMAGE                COMMAND                  CREATED       STATUS                       PORTS                                                    NAMES
74011d62e837   wordpress            "docker-entrypoint.s..."   4 hours ago   Exited (137) 7 seconds ago                                                            wp
bf1262a00395   mysql:8.3.0-oracle   "docker-entrypoint.s..."   4 hours ago   Up 4 minutes                 33060/tcp, 0.0.0.0:13306->3306/tcp, :::13306->3306/tcp   mysql-server

2.容器启动本质上是在宿主机上启动了一个进程ID

容器启动时指定自定义命令

1)查看容器的启动命令

bash 复制代码
[root@docker101 ~]#docker run -d -p 81:80 --name c1 registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
07d1252a5bae38499b039bb3e0cdc375c3a71d24f79f53140320a270c8168227

[root@docker101 ~]#docker ps -l
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED              STATUS              PORTS                               NAMES
07d1252a5bae   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   About a minute ago   Up About a minute   0.0.0.0:81->80/tcp, :::81->80/tcp   c1

[root@docker101 ~]#docker ps -l --no-trunc    #不截断输出,显示全部
CONTAINER ID                                                       IMAGE                                                       COMMAND                                          CREATED          STATUS          PORTS                               NAMES
07d1252a5bae38499b039bb3e0cdc375c3a71d24f79f53140320a270c8168227   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.sh nginx -g 'daemon off;'"   31 seconds ago   Up 30 seconds   0.0.0.0:81->80/tcp, :::81->80/tcp   c1

2)启动容器自定义命令

bash 复制代码
[root@docker101 ~]#docker run -d --name c2 -p 82:80 registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1 sleep 120    #在镜像后面加了一个sleep 120的主进程
c6144c7135c2e014f65807abd7e88ed035d3047c5044157d135126899eb5fac6

#查看发现,容器的主进程变为了/docker-entrypoint.sh sleep 120
[root@docker101 ~]#docker ps -l --no-trunc
CONTAINER ID                                                       IMAGE                                                       COMMAND                             CREATED          STATUS          PORTS                               NAMES
c6144c7135c2e014f65807abd7e88ed035d3047c5044157d135126899eb5fac6   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.sh sleep 120"   17 seconds ago   Up 17 seconds   0.0.0.0:82->80/tcp, :::82->80/tcp   c2

3)连接正在运行的容器

bash 复制代码
#进入容器,查看进程,发现主进程为sleep 120
[root@docker101 ~]#docker exec -it c2 sh
/ # ps -ef
PID   USER     TIME  COMMAND
    1 root      0:00 sleep 120
    7 root      0:00 sh
   13 root      0:00 ps -ef
/ # 
/ # nginx    #运行nginx服务
2025/12/08 14:32:38 [notice] 14#14: using the "epoll" event method
2025/12/08 14:32:38 [notice] 14#14: nginx/1.20.1
2025/12/08 14:32:38 [notice] 14#14: built by gcc 10.2.1 20201203 (Alpine 10.2.1_pre1) 
2025/12/08 14:32:38 [notice] 14#14: OS: Linux 3.10.0-1127.el7.x86_64
2025/12/08 14:32:38 [notice] 14#14: getrlimit(RLIMIT_NOFILE): 65535:65535
2025/12/08 14:32:38 [notice] 15#15: start worker processes
2025/12/08 14:32:38 [notice] 15#15: start worker process 16
2025/12/08 14:32:38 [notice] 15#15: start worker process 17
/ # ps -ef    #很明显,启动后,nginx进程产生
PID   USER     TIME  COMMAND
    1 root      0:00 sleep 120
    7 root      0:00 sh
   15 root      0:00 nginx: master process nginx
   16 nginx     0:00 nginx: worker process
   17 nginx     0:00 nginx: worker process
   18 root      0:00 ps -ef
/ # nginx -s stop         #停止nginx进程并不会影响容器退出
2024/07/22 02:06:52 [notice] 21#21: signal process started
2024/07/22 02:06:52 [error] 21#21: open() "/var/run/nginx.pid" failed (2: No such file or directory)
nginx: [error] open() "/var/run/nginx.pid" failed (2: No such file or directory)
/ # 
/ # ps -ef        #nginx进程没有了,但是容器没有退出
PID   USER     TIME  COMMAND
    1 root      0:00 sleep 120
    7 root      0:00 sh
   15 root      0:00 [nginx]
   20 root      0:00 ps -ef
/ # 
/ # 
root@docker102:~# docker ps -l  # 当容器的主进程退出时,则容器也会退出。
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED         STATUS                      PORTS     NAMES
1ddfe6525afc   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   2 minutes ago   Exited (0) 38 seconds ago             c2
root@docker102:~# 


注意:
     1.容器在启动时,可以修改容器的启动命令,当修改了启动命令后,会覆盖掉默认的启动命令;
     2.容器的启动命令退出时,容器也会被停止;
     

查看容器的详细信息

1)查看容器所有详细信息

bash 复制代码
[root@docker101 ~]#docker container inspect c1
[
    {
        "Id": "3a11a09ae17f971d6cbfc9f0f5053a040a9e53e6321528c6cf37ef98ef917fa8",
        "Created": "2025-12-08T14:26:06.446248892Z",
        "Path": "/docker-entrypoint.sh",
        "Args": [
            "nginx",
            "-g",
            "daemon off;"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 52552,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2025-12-08T14:26:06.563347935Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
...

2)查看容器的进程ID

bash 复制代码
[root@docker101 ~]#docker inspect -f "{{.State.Pid}}" c1
52552

3)查看容器ID

bash 复制代码
[root@docker101 ~]#docker inspect -f "{{.ID}}" c1
3a11a09ae17f971d6cbfc9f0f5053a040a9e53e6321528c6cf37ef98ef917fa8

4)查看容器IP地址

bash 复制代码
#查看ip
[root@docker101 ~]#docker inspect -f "{{.NetworkSettings.IPAddress}}" c1
172.17.0.4

#查看ip
[root@docker101 ~]#docker inspect -f "{{.NetworkSettings.Networks.bridge.IPAddress}}" c1
172.17.0.4

#查看ip
[root@docker101 ~]#docker container inspect -f "{{ range .NetworkSettings.Networks }}{{ .IPAddress }}{{end}}" c1
172.17.0.3

#查看网关
[root@docker101 ~]#docker container inspect -f "{{ range .NetworkSettings.Networks }}{{ .Gateway }}{{end}}" c1
172.17.0.1

#查看mac地址
[root@docker101 ~]#docker container inspect -f "{{ range .NetworkSettings.Networks }}{{ .MacAddress }}{{end}}" c1
02:42:ac:11:00:03

#查看最近一个容器创建的IP地址
[root@docker101 ~]#docker container inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" `docker container ps -lq`
172.17.0.5

docker容器的重启策略

bash 复制代码
[root@docker101 ~]#docker run -d --name restart-no --restart no registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
e1c80573afae7ac710b19a738b42cbc2e512a8f16050bfa008a6bdcad2ff277e

[root@docker101 ~]#docker run -d --name restart-always --restart always registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
77edc3f40b81e580cf0c74316926ee

[root@docker101 ~]#docker run -d --name restart-unless --restart unless-stopped registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
9e5c7dfeb4cb2523a4c204043e6546175ebf3d52782ce092fe331ea877da4481

[root@docker101 ~]#docker run -d --name restart-on-failure --restart on-failure:3 registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
8e758f6624df5415f0db008cb976f4be7fc27263b3a8ec3e904afddbbe697136

参数选项:
    --restart:设置容器的重启策略
        no:
            容器退出,始终不重启容器

        always:
            容器退出,始终重启容器

        policy-on-failure[:max]
            若指定次数,则当容器异常退出时会自动重启,到达指定次数后,就不再重启
            若不指定次数,异常退出时始终重启,但正常退出时不会重启。

        unless-stopped:
            重启服务之前·,若容器处于运行状态,则重启docker服务后,该容器也会被启动。
            相反,若重启服务前,容器处于退出状态,则重启docker服务后,该容器不会被重启。

容器退出时自动删除容器

bash 复制代码
[root@docker101 ~]#docker run -d --name c1 --rm registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1 sleep 10
73935148f4d26ba0dfdcf256fee26ae14c472a1138f58db50cdccf3ad954265f
[root@docker101 ~]#docker ps -a
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED          STATUS         PORTS     NAMES
73935148f4d2   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   10 seconds ago   Up 9 seconds   80/tcp    c1
[root@docker101 ~]#docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

参数选项:
    --rm    在容器退出时删除容器

将宿主机的路径挂载到容器的指定路径

bash 复制代码
#将宿主机的/joren目录挂载到容器的/joren:/usr/share/nginx/html目录
[root@docker101 ~]#docker run -d --name c1 -v /joren:/usr/share/nginx/html registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
2554fb1fc0dcdb79c6f2d7ff403185bd60dd4b1dd11b550b76f1143346ec94a0

#在/joren目录创建一个index.html文件
[root@docker101 ~]#echo 1111111 >/joren/index.html
[root@docker101 ~]#cat /joren/index.html 
1111111

#进入容器查看
[root@docker101 ~]#docker exec -it c1 sh
/ # cat /usr/share/nginx/html/index.html 
1111111
/ # 

#查看容器ip地址
[root@docker101 ~]#docker container inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" `docker container ps -lq`
172.17.0.2

[root@docker101 ~]#curl 172.17.0.2
1111111

参数选项:
    -v [宿主机目录:容器目录]:将宿主机目录挂载到容器目录

注意:
    1.当删除容器时,宿主机的挂载目录不会被删除
    2.如果容器的挂载点之前有数据,宿主机的数据目录会直接覆盖掉之前容器挂载点的数据

多个容器挂载相同宿主机的挂载点

1)指定宿主机的路径挂载

bash 复制代码
[root@docker101 ~]#docker contdocker run -d --name c1 -v /joren:/usr/share/nginx/html registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
03ee47115dd9d4a7f9b24bca0a2ed51dd30ccc2d52161dabcb4797808d9b2094

[root@docker101 ~]#docker run -d --name c2 -v /joren:/usr/share/nginx/html registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
ce80e1f637d4f6e7a36a91ae47cd4642b9b2540aabcf7ae04be2688c7fdb8325

[root@docker101 ~]#docker container inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" c1
172.17.0.2

[root@docker101 ~]#docker container inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" c2
172.17.0.3

[root@docker101 ~]#curl 172.17.0.2
1111111
[root@docker101 ~]#curl 172.17.0.3
1111111
[root@docker10

2)基于--volumes-from实现和指定容器相同的挂载信息

bash 复制代码
[root@docker101 ~]#docker contdocker run -d --name c1 -v /joren:/usr/share/nginx/html registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
eefd400c6e4727c17fcc0807ad8db5c9f3738183a046a9887ed246b2ebd66e32

[root@docker101 ~]#docker run docker run -d --name c2 --volumes-from c1 registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
67559e34c90aa0816ca5173266cb801d9f9a418d2e615317431f14fb9dce486f

[root@docker101 ~]#docker container inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" c1
172.17.0.2

[root@docker101 ~]#docker container inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" c2
172.17.0.3

[root@docker101 ~]#curl 172.17.0.2
1111111
[root@docker101 ~]#curl 172.17.0.3
1111111

3)一个容器挂载多个挂载点

bash 复制代码
[root@docker101 ~]#docker run -d --name c3 -v /joren01:/usr/share/nginx/html -v /joren02:/balbala -v /joren03:/xixi registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
6ee87f8c46001530bc74cd6dfc55323dee4dbd92979b176525a54aa3e0baf605

[root@docker101 ~]#echo 111 >/joren01/1.txt
[root@docker101 ~]#echo 222 >/joren02/2.txt
[root@docker101 ~]#echo 333 >/joren03/3.txt

[root@docker101 ~]#docker exec c3 cat /usr/share/nginx/html/1.txt
111
[root@docker101 ~]#docker exec c3 cat /balbala/2.txt
222
[root@docker101 ~]#docker exec c3 cat /xixi/3.txt
333

docker的存储卷挂载

1)查看本地的存储卷

bash 复制代码
[root@docker101 ~]#docker volume ls
DRIVER    VOLUME NAME

2)创建存储卷

2.1创建匿名存储卷(随机存储卷)

bash 复制代码
[root@docker101 ~]#docker volume create
65ebdb9647d2539cf93ec437984d2ff4784ff713d3791a209101f0355dd4037a

[root@docker101 ~]#docker volume ls
DRIVER    VOLUME NAME
local     65ebdb9647d2539cf93ec437984d2ff4784ff713d3791a209101f0355dd4037a

2.2创建自定义名称的存储卷

bash 复制代码
[root@docker101 ~]#docker volume create joren
joren

[root@docker101 ~]#docker volume ls
DRIVER    VOLUME NAME
local     65ebdb9647d2539cf93ec437984d2ff4784ff713d3791a209101f0355dd4037a
local     joren

2.3查看底层的存储目录

bash 复制代码
[root@docker101 ~]#ll /var/lib/docker/volumes/
total 32
drwx-----x 3 root root    19 Dec 13 22:42 65ebdb9647d2539cf93ec437984d2ff4784ff713d3791a209101f0355dd4037a
brw------- 1 root root  8, 3 Dec  8 20:47 backingFsBlockDev
drwx-----x 3 root root    19 Dec 13 22:43 joren
-rw------- 1 root root 65536 Dec 13 22:43 metadata.db

3)查看存储卷的详细信息

bash 复制代码
[root@docker101 ~]#docker volume inspect 65ebdb9647d2539cf93ec437984d2ff4784ff713d3791a209101f0355dd4037a
[
    {
        "CreatedAt": "2025-12-13T22:42:22+08:00",
        "Driver": "local",
        "Labels": {
            "com.docker.volume.anonymous": ""
        },
        "Mountpoint": "/var/lib/docker/volumes/65ebdb9647d2539cf93ec437984d2ff4784ff713d3791a209101f0355dd4037a/_data",
        "Name": "65ebdb9647d2539cf93ec437984d2ff4784ff713d3791a209101f0355dd4037a",
        "Options": null,
        "Scope": "local"
    }
]


[root@docker101 ~]#docker volume inspect joren
[
    {
        "CreatedAt": "2025-12-13T22:43:53+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/joren/_data",
        "Name": "joren",
        "Options": null,
        "Scope": "local"
    }
]
[root@docker101 ~]#

4)删除存储卷

4.1删除指定的存储卷

bash 复制代码
[root@docker101 ~]#docker volume rm 65ebdb9647d2539cf93ec437984d2ff4784ff713d3791a209101f0355dd4037a
65ebdb9647d2539cf93ec437984d2ff4784ff713d3791a209101f0355dd4037a

[root@docker101 ~]#docker volume ls
DRIVER    VOLUME NAME
local     joren

4.2删除所有未使用的存储卷

bash 复制代码
[root@docker101 ~]#docker volume create
036cdd79861d8d526399c10460e5fa0ec0db1fd316399d9983f5c805e06e07e0

[root@docker101 ~]#docker volume create
e820ab16565ced612e748c21baa88ea772a218f9885120faacf986fbd1f9fe46

[root@docker101 ~]#docker volume ls
DRIVER    VOLUME NAME
local     036cdd79861d8d526399c10460e5fa0ec0db1fd316399d9983f5c805e06e07e0
local     e820ab16565ced612e748c21baa88ea772a218f9885120faacf986fbd1f9fe46

[root@docker101 ~]#docker volume prune
WARNING! This will remove anonymous local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
036cdd79861d8d526399c10460e5fa0ec0db1fd316399d9983f5c805e06e07e0
e820ab16565ced612e748c21baa88ea772a218f9885120faacf986fbd1f9fe46

Total reclaimed space: 0B

[root@docker101 ~]#docker volume prune -f    #可以强制删除,无交互


#注意:如果删除容器的同时想要删除匿名存储卷,可以使用-v选项
[root@docker101 ~]#docker volume ls
DRIVER    VOLUME NAME
local     298b14c11e83b03693140fd81ed760b033f9e4c5b76dfaea2cf6f3e0004e6e65
[root@docker101 ~]#docker rm -fv `docker ps -qa`
ea0c295cf14c
[root@docker101 ~]#docker volume ls
DRIVER    VOLUME NAME

5)运行容器挂载已有的存储卷

5.1提前创建存储卷

bash 复制代码
[root@docker101 ~]#docker volume create joren
joren

[root@docker101 ~]#docker volume inspect joren
[
    {
        "CreatedAt": "2025-12-13T23:00:59+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/joren/_data",
        "Name": "joren",
        "Options": null,
        "Scope": "local"
    }
]

[root@docker101 ~]#echo 1111 >/var/lib/docker/volumes/joren/_data/index.html
[root@docker101 ~]#

[root@docker101 ~]#ll /var/lib/docker/volumes/
total 32
brw------- 1 root root  8, 3 Dec  8 20:47 backingFsBlockDev
drwx-----x 3 root root    19 Dec 13 23:00 joren
-rw------- 1 root root 65536 Dec 13 23:00 metadata.db
[root@docker101 ~]#

5.2运行容器使用已有的存储卷

bash 复制代码
[root@docker101 ~]#docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

[root@docker101 ~]#docker run -d --name c1 -v joren:/usr/share/nginx/html registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v
e79f0d876743087f2828477574b70b96cccd7b3b1c8eac8316f50d90fd3ffc6a

[root@docker101 ~]#docker exec c1 cat /usr/share/nginx/html/index.html
1111

6)运行容器挂载不存在的存储卷

bash 复制代码
[root@docker101 ~]#docker run -d --name c2 -v joren02:/usr/share/nginx/html registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps
250f077ed1c130751a8e318ddc0fc482bf37cc014e3bcfbc9e0b8b6c1045f0b6

[root@docker101 ~]#docker volume ls
DRIVER    VOLUME NAME
local     joren
local     joren02

[root@docker101 ~]#docker volume inspect joren02
[
    {
        "CreatedAt": "2025-12-13T23:07:19+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/joren02/_data",
        "Name": "joren02",
        "Options": null,
        "Scope": "local"
    }
]

7)不指定存储卷时会随机生成匿名存储卷

bash 复制代码
[root@docker101 ~]#docker volume ls
DRIVER    VOLUME NAME

[root@docker101 ~]#docker run -d --name c1 -v /usr/share/nginx/html registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
ea0c295cf14c2b4bfb6c9b09e12e68ca31a0cac2cc07674e644797b0533d2ee9

[root@docker101 ~]#docker volume ls
DRIVER    VOLUME NAME
local     298b14c11e83b03693140fd81ed760b033f9e4c5b76dfaea2cf6f3e0004e6e65

8)查看容器的挂载点

bash 复制代码
[root@docker101 ~]#docker container inspect -f "{{range .Mounts}}容器挂载地址:{{.Destination}}宿主机地址:{{.Source}}{{end}}" c1 
容器挂载地址:/usr/share/nginx/html宿主机地址:/var/lib/docker/volumes/298b14c11e83b03693140fd81ed760b033f9e4c5b76dfaea2cf6f3e0004e6e65/_data

温馨提示

bash 复制代码
1.只要存储卷被容器使用,尽管该容器已经停止,使用"docker volume prune -f"是无法消除数据的,因此"docker volume prune -f"命令只能删除未被使用的存储卷;
2.若启动容器时,存储卷不存在则会自动创建
3.不指定存储卷时会随机生成匿名存储卷
4.若存储卷不存在且容器原有的挂载点有数据则会将之前的数据拷贝到存储卷中
5.若存储卷存储,尽管容器的挂载点之前有数据,也会直接覆盖原有的数据
6.如果想要查看已经运行的容器挂在信息可以使用"docker container inspect"进行进一步查看

docker存储卷案例练习

1)启动数据库

sql 复制代码
#查看mysql挂载地址:
mysql> show variables like "%datadir%"
    -> ;
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.26 sec)

#启动mysql
[root@docker101 ~]#docker run --name mysql-server \
> -e MYSQL_ALLOW_EMPTY_PASSWORD=yes \
> -e MYSQL_DATABASE=wordpress \
> -e MYSQL_USER=joren \
> -e MYSQL_PASSWORD=123456 \
> -v mysql_joren:/var/lib/mysql/ \
> -d \
> -p 13306:3306 \
> mysql:8.3.0-oracle
31e6c5a3acacf61f01e62550b533c8bbcc5470572240bdea57bc30237f1bf38b

[root@docker101 ~]#docker ps 
CONTAINER ID   IMAGE                COMMAND                  CREATED          STATUS          PORTS                                                    NAMES
31e6c5a3acac   mysql:8.3.0-oracle   "docker-entrypoint.s..."   11 seconds ago   Up 10 seconds   33060/tcp, 0.0.0.0:13306->3306/tcp, :::13306->3306/tcp   mysql-server

注意:需要使用-v做持久化

2)启动wordpress

bash 复制代码
[root@docker102 ~]#docker container inspect -f "{{range .Mounts}}容器地址:{{.Destination}}{{end}}" wp
容器地址:/var/www/html

[root@docker102 ~]#docker run \
> -d \
> -p 88:80 \
> --name wp \
> -e WORDPRESS_DB_HOST=10.0.0.101:13306 \
> -e WORDPRESS_DB_USER=joren \
> -e WORDPRESS_DB_PASSWORD=123456 \
> -e WORDPRESS_DB_NAME=wordpress \
> -v wordpress_joren:/var/www/html \
> wordpress
e3a0e6a9c426e8c598befee874342dcaee621778d74d6f2c115f10c9c75ef108
[root@docker102 ~]#docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS                               NAMES
e3a0e6a9c426   wordpress   "docker-entrypoint.s..."   5 seconds ago   Up 5 seconds   0.0.0.0:88->80/tcp, :::88->80/tcp   wp

访问网址:10.0.0.102:88 发布博客进行测试

3)删除容器

bash 复制代码
[root@docker101 ~]#docker container rm -f `docker ps -qa`
d51e4aa36cfe

[root@docker102 ~]#docker container rm -f `docker ps -qa`
0231d1df36c2

4)重启容器,观察是否可以正常访问

参考步骤1,2,可以正常访问

docker的单机网络类型

1)docker默认有五种单机网络类型

bash 复制代码
none:
    不分配任何网路,只有本地回环网卡lo
bridge:
    桥接网络,默认容器的网络类型就是桥接网络,会创建虚拟设备对
host:
    使用宿主机网络,不会创建虚拟设备对,而是和宿主机共用网络名称空间,因此此中网络效率最高
container:
    不会创建新的虚拟设备对,和一个已经存在的容器使用相同的网络名称空间
custom network:
    自定义docker网络类型,需要创建网络,该自定义网络支持基于容器名称访问彼此。相当于内置DNS功能

2)案例实战

2.1查看现有的网络类型

bash 复制代码
[root@docker101 ~]#docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
8ce2d108ce71   bridge    bridge    local
dde83ce0ade1   host      host      local
d2b2e36d8f63   none      null      local

2.2启动容器

bash 复制代码
root@docker102:~# docker run -d --name c1-none --network none registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1 
336bec5d53caa1dcdb156c52f533d3c27a59cf916850e10465c021f255da85f4
root@docker102:~# 
root@docker102:~# docker run -d --name c2-bridge --network bridge registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1 
3ed25ff5b4773e94232cc81a59848f306470f26fe018327cc7b0aedffc778710
root@docker102:~# 
root@docker102:~# docker run -d --name c3  registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1 
8cef6f986773bcc382e08c52d034dc4eaa2b983308f796a3a2e992a816db243a
root@docker102:~# 
root@docker102:~# docker run -d --name c4-host --network host  registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1 
2133ed2fc3e54191dc701801950f6c6bf891c4cf2a98caeffedc493a920c7628
root@docker102:~# 
root@docker102:~# docker run -d --name c5-container --network container:c3  registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1 sleep 3600
29cb1f07753940a9dca02d39e886d1e454a3c2dfa55922bf7c427145eb2cc2f2
root@docker102:~# 
root@docker102:~# docker ps 
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED              STATUS              PORTS     NAMES
29cb1f077539   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   3 seconds ago        Up 3 seconds                  c5-container
2133ed2fc3e5   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   About a minute ago   Up About a minute             c4-host
8cef6f986773   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   About a minute ago   Up About a minute   80/tcp    c3
3ed25ff5b477   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   About a minute ago   Up About a minute   80/tcp    c2-bridge
336bec5d53ca   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   2 minutes ago        Up 2 minutes   

选项参数:
    --network    设置网络容器类型

2.3检查各节点容器的ip地址

bash 复制代码
root@docker102:~# docker exec c1-none ifconfig -a
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
 
root@docker102:~# 
 
root@docker102:~# docker exec c2-bridge ifconfig -a
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:02  
          inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:13 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1086 (1.0 KiB)  TX bytes:0 (0.0 B)
 
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
 
root@docker102:~# 
 
root@docker102:~# docker exec c3 ifconfig -a
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:03  
          inet addr:172.17.0.3  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:11 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:866 (866.0 B)  TX bytes:0 (0.0 B)
 
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
 
root@docker102:~# 
 
 
 
root@docker102:~# docker exec c4-host ifconfig -a
docker0   Link encap:Ethernet  HWaddr 02:42:A1:A3:A6:BD  
          inet addr:172.17.0.1  Bcast:172.17.255.255  Mask:255.255.0.0
          inet6 addr: fe80::42:a1ff:fea3:a6bd/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3846 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4772 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:2586641 (2.4 MiB)  TX bytes:930475 (908.6 KiB)
 
ens33     Link encap:Ethernet  HWaddr 00:0C:29:2B:AC:B6  
          inet addr:10.0.0.102  Bcast:10.0.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe2b:acb6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:32810 errors:0 dropped:0 overruns:0 frame:0
          TX packets:39744 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:3083850 (2.9 MiB)  TX bytes:6246741 (5.9 MiB)
 
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:36091 errors:0 dropped:0 overruns:0 frame:0
          TX packets:36091 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2841778 (2.7 MiB)  TX bytes:2841778 (2.7 MiB)
 
veth78864b7 Link encap:Ethernet  HWaddr 22:1A:47:47:97:8F  
          inet6 addr: fe80::201a:47ff:fe47:978f/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:1086 (1.0 KiB)
 
vetheef9220 Link encap:Ethernet  HWaddr AE:36:9D:8A:8F:62  
          inet6 addr: fe80::ac36:9dff:fe8a:8f62/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:866 (866.0 B)
 
root@docker102:~# 
root@docker102:~# 
root@docker102:~# ifconfig 
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:a1ff:fea3:a6bd  prefixlen 64  scopeid 0x20<link>
        ether 02:42:a1:a3:a6:bd  txqueuelen 0  (Ethernet)
        RX packets 3846  bytes 2586641 (2.5 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4772  bytes 930475 (930.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.102  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::20c:29ff:fe2b:acb6  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:2b:ac:b6  txqueuelen 1000  (Ethernet)
        RX packets 32829  bytes 3085260 (3.0 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 39758  bytes 6250245 (6.2 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 36093  bytes 2841920 (2.8 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 36093  bytes 2841920 (2.8 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
veth78864b7: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::201a:47ff:fe47:978f  prefixlen 64  scopeid 0x20<link>
        ether 22:1a:47:47:97:8f  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 13  bytes 1086 (1.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
vetheef9220: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::ac36:9dff:fe8a:8f62  prefixlen 64  scopeid 0x20<link>
        ether ae:36:9d:8a:8f:62  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 11  bytes 866 (866.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
root@docker102:~# 
 
 
 
root@docker102:~# docker exec c5-container ifconfig -a
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:03  
          inet addr:172.17.0.3  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:12 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:936 (936.0 B)  TX bytes:0 (0.0 B)
 
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
 
注意:
    1.使用宿主机的网络效率最高,因为减少了2次报文的封装
    2.如果多个容器使用同一个网络,一定要避免端口冲突问题,否则可能导致容器无法启动

单机网络通信的三种方案

1)添加hosts解析

bash 复制代码
[root@docker101 ~]#docker run -d --name c1 registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
7739cdbaf6a2bdcf9b3968841aa41090a2089d40e340a04f5602a750315ba731

[root@docker101 ~]#docker run -d --name c2 registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
43d999348ae833805479ad1ac39a58bc8ce89b6613f7e8fd7e4c5fe9af812747

[root@docker101 ~]#docker exec -it c1 sh
/ # ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:02  
          inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:12 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1016 (1016.0 B)  TX bytes:208 (208.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

/ # 
[root@docker101 ~]#docker exec -it c2 sh
/ # ping c1
ping: bad address 'c1'
/ # echo 172.17.0.2 c1 >> /etc/hosts
/ # ping c1
PING c1 (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.155 ms
64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.118 ms
^C
--- c1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.118/0.136/0.155 ms

2)使用--link关联

bash 复制代码
[root@docker101 ~]#docker run -d --narun -d --name c1 registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1^C
[root@docker101 ~]#docker run -d --network bridge --name c1 registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
616407a01451aca195b94782093e10affb1818e246536d1f1d232189c0dfc7ce
[root@docker101 ~]#docker run -d --name c2 --link c1 registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
c99a3e8adddd4e83aae18aba23d8bf4346aea57aa7a00e9e352ac36a12ca9bd2
[root@docker101 ~]#docker ps
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED          STATUS          PORTS     NAMES
c99a3e8adddd   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   3 seconds ago    Up 2 seconds    80/tcp    c2
616407a01451   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   37 seconds ago   Up 37 seconds   80/tcp    c1

[root@docker101 ~]#docker exec -it c2 sh
/ # ping -c 3 c1
PING c1 (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.143 ms
64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.135 ms
64 bytes from 172.17.0.2: seq=2 ttl=64 time=0.070 ms

--- c1 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.070/0.116/0.143 ms
/ # cat /etc/hosts 
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.17.0.2	c1 616407a01451
172.17.0.3	c99a3e8adddd

选项参数:
    --link    添加hosts关联

注意:
    1.使用hists解析的方案当容器的ip地址发生变化时,需要手动修改hosts文件
    2.使用--link关联容器时,被关联的容器重启ip地址变化时,会自动更新hosts映射ip
    3.使用使用"--link"有个缺陷就是被关联的容器必须运行,若没有运行,则容器无法启动;

3)自定义网络

3.1查看现有的网络列表

bash 复制代码
[root@docker101 ~]#docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
8ce2d108ce71   bridge    bridge    local
dde83ce0ade1   host      host      local
d2b2e36d8f63   none      null      local

3.2创建自定义网路

bash 复制代码
[root@docker101 ~]#docker network create joren
4e97fc3fb032427ca2c27ee7e06421eab6ffe826a709205fcfd9e9339fe0ced8
[root@docker101 ~]#docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
8ce2d108ce71   bridge    bridge    local
dde83ce0ade1   host      host      local
4e97fc3fb032   joren     bridge    local
d2b2e36d8f63   none      null      local

3.3查看网络的信息

bash 复制代码
[root@docker101 ~]#docker network inspect joren
[
    {
        "Name": "joren",
        "Id": "4e97fc3fb032427ca2c27ee7e06421eab6ffe826a709205fcfd9e9339fe0ced8",
        "Created": "2025-12-20T15:49:17.768407303+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": {}
    }
]

3.4启动容器指定自定义网络

bash 复制代码
[root@docker101 ~]#docker run -d --name c1 --network joren registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
d6045b25f1fe1ebb91bde2c09f1fb33247e3b8fc27d59e41a0373de3bf579971
[root@docker101 ~]#docker run -d --name c2 --network joren registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
3ce009ad1da21f373a23ae5361a7f0c778c23ca8c7b5400ffc3db26641d29085

[root@docker101 ~]#docker container inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" c1
172.18.0.2
[root@docker101 ~]#docker container inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" c2
172.18.0.3

3.5验证自定义网络容器的通信

bash 复制代码
[root@docker101 ~]#docker exec -it c1 sh
/ # cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.18.0.2	d6045b25f1fe
/ # ping c2 -c 3
PING c2 (172.18.0.3): 56 data bytes
64 bytes from 172.18.0.3: seq=0 ttl=64 time=0.071 ms
64 bytes from 172.18.0.3: seq=1 ttl=64 time=0.145 ms
64 bytes from 172.18.0.3: seq=2 ttl=64 time=0.108 ms

--- c2 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.071/0.108/0.145 ms

3.6删除未使用的网络

bash 复制代码
[root@docker101 ~]#docker network create xixi
3324825ffc48df2dd427d6a1e48f2e9cb4f24f58e762b3080a7c8fe8da70ffb1
[root@docker101 ~]#docker network create haha
bb490c42cd5a853f2418da61409775b6128e8893e3b7184f7e97a6c4542c0ae3
[root@docker101 ~]#docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
8ce2d108ce71   bridge    bridge    local
bb490c42cd5a   haha      bridge    local
dde83ce0ade1   host      host      local
4e97fc3fb032   joren     bridge    local
d2b2e36d8f63   none      null      local
3324825ffc48   xixi      bridge    local
[root@docker101 ~]#docker network prune -f
Deleted Networks:
xixi
haha

[root@docker101 ~]#docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
8ce2d108ce71   bridge    bridge    local
dde83ce0ade1   host      host      local
4e97fc3fb032   joren     bridge    local
d2b2e36d8f63   none      null      local

注意:
    使用"docker network prune -f"只会删除未被使用的自定义网络

3.7删除指定网络

bash 复制代码
[root@docker101 ~]#docker network create xixi
f5572bf0f25603a9a3eaa59c5502b96401b1552fe70ec84f20cd515e19001b34
[root@docker101 ~]#docker network create haha
7526f2bf86a0aec1578c98440d62e12f30116ce0649c7b41c14e24b342828733
[root@docker101 ~]#docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
8ce2d108ce71   bridge    bridge    local
7526f2bf86a0   haha      bridge    local
dde83ce0ade1   host      host      local
4e97fc3fb032   joren     bridge    local
d2b2e36d8f63   none      null      local
f5572bf0f256   xixi      bridge    local
[root@docker101 ~]#docker network rm xixi haha
xixi
haha
[root@docker101 ~]#docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
8ce2d108ce71   bridge    bridge    local
dde83ce0ade1   host      host      local
4e97fc3fb032   joren     bridge    local
d2b2e36d8f63   none      null      local

3.8创建网络时可以自定义网关,ip地址范围,子网范围,网络类型等

①创建自定义子网
bash 复制代码
[root@docker101 ~]#docker network create -d bridge --gateway 172.21.0.254 --ip-range 172.21.100.0/24 --subnet 172.21.0.0/16 joren02
c01938e13b49c182dd151894cbf3ec2fe97822686e7ae993c93fa26b106ee129
[root@docker101 ~]#docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
8ce2d108ce71   bridge    bridge    local
dde83ce0ade1   host      host      local
4e97fc3fb032   joren     bridge    local
c01938e13b49   joren02   bridge    local
d2b2e36d8f63   none      null      local
②查看自定义网络信息
bash 复制代码
[root@docker101 ~]#docker network inspect joren02
[
    {
        "Name": "joren02",
        "Id": "c01938e13b49c182dd151894cbf3ec2fe97822686e7ae993c93fa26b106ee129",
        "Created": "2025-12-20T16:01:08.997039993+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.21.0.0/16",
                    "IPRange": "172.21.100.0/24",
                    "Gateway": "172.21.0.254"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]
[root@docker101 ~]#
③指定自定义网络
bash 复制代码
[root@docker101 ~]#docker run -d --name c1 --network joren02 registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
4a2c03f657d67bbb0eb1dde047c782569b73b7095beb64ef5fa4a56071c21e1d
[root@docker101 ~]#docker run -d --name c2 --network joren02 registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
d5f04a7ec074b8c0b11cf9b40b334e6c8a6b412dc46ecd02f6caee556f2746e7
[root@docker101 ~]#docker exec c1 ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:15:64:00  
          inet addr:172.21.100.0  Bcast:172.21.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:13 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1102 (1.0 KiB)  TX bytes:0 (0.0 B)

[root@docker101 ~]#docker exec c2 ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:15:64:01  
          inet addr:172.21.100.1  Bcast:172.21.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:656 (656.0 B)  TX bytes:0 (0.0 B)
④手动分配IP地址
bash 复制代码
[root@docker101 ~]#docker run -d --name c3 --network joren02 --ip 172.21.1.102 registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
0d6e96d26a70e61db35095c290af082a6c9e3e59807c1f76c1bbc47e2691ca1e
[root@docker101 ~]#docker run -d --naexec c3 ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:15:01:66  
          inet addr:172.21.1.102  Bcast:172.21.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:516 (516.0 B)  TX bytes:0 (0.0 B)

⑤检测容器和IP的连通性

bash 复制代码
[root@docker101 ~]#docker exec c3 ping -c 3 c1
PING c1 (172.21.100.0): 56 data bytes
64 bytes from 172.21.100.0: seq=0 ttl=64 time=0.072 ms
64 bytes from 172.21.100.0: seq=1 ttl=64 time=0.070 ms
64 bytes from 172.21.100.0: seq=2 ttl=64 time=0.105 ms

--- c1 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.070/0.082/0.105 ms
相关推荐
Crkylin2 小时前
尚硅谷Linux应用层学习笔记(一)GCC编译
linux·笔记·学习
Fortune_yangyang2 小时前
Docker 入门指南:从 “容器小白” 到快速上手
运维·docker·容器
Lueeee.2 小时前
具体掌握字符设备驱动
linux
HIT_Weston3 小时前
68、【Ubuntu】【Hugo】搭建私人博客:方案分析(二)
linux·运维·ubuntu
wdfk_prog3 小时前
[Linux]学习笔记系列 -- [fs]ext4
linux·笔记·学习
程序员老舅3 小时前
C++ STL 算法:从原理到工程实践
linux·c++·stl·c/c++·数据结构与算法
chenyuhao20243 小时前
Linux系统编程:线程概念与控制
linux·服务器·开发语言·c++·后端
cws2004013 小时前
HeidiSQL 使用操作说明书
运维·数据库·windows·mysql·heidisql
Pyeako4 小时前
MySQL基础知识&Linux导入导出数据
linux·数据库·mysql·sql查询·sql分类