第 21 步:Docker 网络基础原理
第 21 步:Docker 网络基础原理

Docker 默认提供三种网络驱动:

网络模式特点适用场景
bridge默认网络,容器通过 NAT 访问外网,容器间需端口映射单机、简单场景
host容器直接使用宿主机网络栈(无隔离)性能敏感、端口不冲突
none无网络完全隔离、特殊安全场景
overlay跨多台宿主机通信(Swarm/K8s)集群场景

你之前用的默认 bridge 网络的问题:

  • 容器间不能直接用容器名通信(只能用 IP)

  • 需要手动 --link(已废弃)

自定义 bridge 网络的好处:

  • 容器间可以通过容器名互相访问(内置 DNS)

  • 更好的隔离性

  • 可以指定子网 IP 范围

第 21 步操作:对比默认网络 vs 自定义网络

1. 查看当前网络列表

root@docker-test:~# docker network ls
NETWORK ID     NAME          DRIVER    SCOPE
4a4b5163ad07   bridge        bridge    local
f536a0a68643   host          host      local
41df356c148c   none          null      local
root@docker-test:~# 
你会看到 bridge(默认)、hostnone 三个默认网络。

2. 创建自定义网络

root@docker-test:~# docker network create my-net
644572449ffbff417dc8ed3fd9068c3c63a654e62db73485d6856ba5bf1c550c
root@docker-test:~# 

3. 查看网络详情

root@docker-test:~# docker network inspect my-net
[
    {
        "Name": "my-net",
        "Id": "644572449ffbff417dc8ed3fd9068c3c63a654e62db73485d6856ba5bf1c550c",
        "Created": "2026-05-12T09:14:11.843230888Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv4": true,
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.19.0.0/16",
                    "Gateway": "172.19.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]

4. 运行两个容器在自定义网络上

root@docker-test:~# docker run -d --name ping-box-1 --network my-net alpine sleep infinity
053f6d5f720d52f0b369c12295807362f6a7253167bc3d0a23bf6bbd7d3c9932
root@docker-test:~# docker run -d --name ping-box-2 --network my-net alpine sleep infinity
230658b18cb41ada2086431c4db5086ef235bf6948f862e51ca92c1f8004d678
root@docker-test:~# 

5. 测试容器间通过名称通信

root@docker-test:~# docker exec ping-box-1 ping -c 2 ping-box-2
PING ping-box-2 (172.19.0.3): 56 data bytes
64 bytes from 172.19.0.3: seq=0 ttl=64 time=0.083 ms
64 bytes from 172.19.0.3: seq=1 ttl=64 time=0.080 ms

--- ping-box-2 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.080/0.081/0.083 ms
root@docker-test:~#

6. 测试默认 bridge 网络(不支持名称解析)

root@docker-test:~# docker run -d --name ping-box-3 alpine sleep infinity
292eafedaebae6ef8697cdc257d32e5cb37284301f7e8b7da119457452c3fa47
root@docker-test:~# docker run -d --name ping-box-4 alpine sleep infinity
de7720518172c0336025e65233b17f65b6bbd95f5adac5b599d9c646d654b0c8
root@docker-test:~# docker exec ping-box-3 ping -c 2 ping-box-4
ping: bad address 'ping-box-4'
root@docker-test:~#
这应该会失败(bad address 'ping-box-4')。



推荐阅读

docker volume

第一步:创建数据卷 docker volume create my-data 部分含义docker volumeDocker 数据卷管理命令create创建新数据卷my-data数据卷名称(可自定义)作用:在 /var/lib/docker/volumes/my-data/_data 创建一个目录,用来持久化数据。第二步:查看数据卷docker volume ls第三步:查看数据卷详情docker volume inspect my

90 0 赞2026-05-20分享技术分享

24步:常用操作

容器日志问题默认情况下,容器将 stdout/stderr 输出到 json-file 日志驱动,日志文件存在宿主机 /var/lib/docker/containers/<container-id>/<container-id>-json.log。如果不加限制,日志会无限增长,占满磁盘。1. 查看日志 docker logs <容器名> # 打印全部 docker logs --tail 100

58 0 赞2026-05-13分享技术专题

23步:Docker 技能验证测试

第 1 题:基础命令(10分)题目: 拉取 ubuntu:22.04 镜像,并运行一个交互式容器,进入 /tmp 目录,创建一个名为 test.txt 的文件,内容为 hello docker,然后退出容器。请写出完整命令: [root@localhost ~]# docker pull ubuntu:22.04 22.04: Pulling from library/ubuntu f63eb04151bc: Pull compl

101 0 赞2026-05-13分享技术专题

第 22 步:端口映射与网络隔离原理

关键理解:默认 bridge 网络:容器 IP 是 172.17.0.x,宿主机无法直接访问容器端口,必须用 -p 8080:80 做端口映射自定义 bridge 网络:容器间可以通信,但外界访问仍需端口映射为什么刚才的 my-net 容器不能从外部访问?因为它们没有 -p 参数,宿主机不知道如何转发流量第 22 步操作:测试端口映射 + 自定义网络1. 运行一个 Nginx

89 0 赞2026-05-12分享技术专题

第 18 -19步:Docker Compose 原理

问题场景:一个 Web 应用通常需要:Nginx(前端)+ Python/Node(后端)+ MySQL/Redis(数据库)手动启动 3 个容器,还要配置网络、卷、依赖顺序 → 繁琐且容易出错解决方案:docker-compose.yml一个 YAML 文件定义所有容器的配置(镜像、端口、卷、网络、依赖)一条命令 docker compose up -d 启动全部一条命令 docker compose d

96 0 赞2026-05-12分享技术专题

第 20 步:修改代码并热更新(使用 Compose)

在生产开发中,你修改代码后希望快速看到效果,有两种方式:重建镜像:docker compose up -d --build(会重新构建 web 镜像)挂载源码:开发时把代码目录挂载进去,改代码自动生效(无需重建)我们演示第二种(更接近真正的开发体验)。

85 0 赞2026-05-12分享技术专题

第 17 步:上传镜像到 Docker Hub(分享给别人)

前提: 在 https://hub.docker.com 注册一个免费账号(如果还没有)原理:Docker Hub 是公共镜像仓库(类似 GitHub for 镜像)上传命令:docker push 用户名/镜像名:标签上传前需要先 docker tag 打上正确标签第 17 步操作(如果你有 Docker Hub 账号)1. 登录 Docker Hubbash docker logi

92 0 赞2026-05-12分享技术专题

第 16 步:更新镜像 - 修改代码后重新构建

场景: 你修改了代码,需要更新容器。核心原则: 不要手动进入容器改文件,而是重新构建镜像 → 删除旧容器 → 运行新容器。第 16 步操作1. 修改 app.py,改变返回内容bash cd ~/my-python-app cat > app.py << 'EOF' from http.server import HTTPServer, BaseHTTPRequestHandler i

91 0 赞2026-05-12分享技术专题

第 15 步:优化 Dockerfile(减小体积 + 利用缓存)

当前 Dockerfile 的问题:任何代码修改都会导致 COPY . /app 重新运行,但 apt 之类的不需要重新安装镜像包含 Python 编译工具链(slim 已经较小,但还可以更小)优化技巧:问题优化方法体积大使用 alpine 基础镜像(约 50MB vs 122MB)依赖变化频繁先 COPY requirements.txt 安装依

88 0 赞2026-05-12分享技术专题

第 14 步:Dockerfile 基础原理

制作自己的镜像 是 Docker 最核心的技能,也是从“使用者”变成“创造者”的关键一步

59 0 赞2026-05-12分享技术专题
admin

发文31·粉丝0

目录

沉浸

点赞

分享

收藏

文章目录
广告