在前两篇文章中,我们学习了 Docker 镜像与容器 的基本操作。
但是,单个容器的意义并不大,我们一般需要多个容器协作(如 Nginx + MySQL + 应用服务),这就离不开 网络;同时,容器默认数据是临时的,如何实现 数据持久化 就需要用到存储。
本篇我们就来学习 Docker 的网络与存储。
1. Docker 网络概述
Docker 为容器提供了多种网络模式,用于满足不同场景的需求。
常见网络模式
|
网络模式 |
特点 |
应用场景 |
|
bridge(默认) |
容器使用虚拟网桥,自动分配 IP,容器间可通信 |
绝大多数单机场景 |
|
host |
容器与宿主机共用网络栈,没有隔离 |
需要高性能网络访问 |
|
none |
容器没有网络,只有 loopback |
高安全性、完全自定义网络 |
|
overlay |
跨主机的分布式网络 |
多机集群、Swarm / Kubernetes |
2. Bridge 网络(默认网络)
默认情况下,Docker 容器会加入 bridge 网络。
查看网络:
docker network ls
运行一个容器:
docker run -d –name web1 nginx
进入容器查看 IP:
docker exec -it web1 bash
apt-get update && apt-get install -y iproute2
ip addr
你会看到容器有一个 172.x.x.x 的私有 IP,这就是 bridge 网络分配的地址。
3. 容器端口映射
容器虽然有 IP,但默认无法直接被宿主机外部访问。我们需要端口映射:
docker run -d –name web2 -p 8080:80 nginx
说明:-p 宿主机端口:容器端口
目前你访问 http://localhost:8080 就能看到 Nginx 页面。
4. 自定义网络
使用默认的 bridge 网络时,容器之间需要通过 IP 通信,不方便。我们可以创建一个自定义网络,让容器通过名字相互访问。
# 创建网络
docker network create mynet
# 启动两个容器加入网络
docker run -d –name webapp –network mynet nginx
docker run -it –name client –network mynet busybox sh
在 client 容器中:
ping webapp
你会发现容器可以直接用 容器名作为主机名 通信。
5. Docker 存储概述
Docker 容器的数据默认存储在容器层,一旦容器被删除,数据也会消失。为了实现 数据持久化,我们需要使用存储机制。
存储方式对比
|
类型 |
特点 |
使用场景 |
|
Volume(推荐) |
Docker 自己管理存储,数据保存在 /var/lib/docker/volumes |
大多数生产环境 |
|
Bind Mount |
挂载宿主机的目录到容器 |
开发调试、本地文件共享 |
|
tmpfs |
内存文件系统,数据随容器停止即消失 |
需要高速临时存储 |
6. 使用 Volume(卷)
创建卷:
docker volume create mydata
运行容器时挂载:
docker run -d –name mysql-test
-e MYSQL_ROOT_PASSWORD=123456
-v mydata:/var/lib/mysql
mysql:8.0
即使容器被删除,mydata 卷中的数据库数据依旧保留。
7. 使用 Bind Mount(绑定挂载)
把宿主机目录映射到容器内:
docker run -d –name nginx-test
-p 8080:80
-v /home/user/html:/usr/share/nginx/html
nginx
目前你修改宿主机的
/home/user/html/index.html 文件,容器里的 Nginx 页面会立即更新,超级适合开发调试。
8. 实战:Nginx + MySQL 多容器网络与存储
- 创建自定义网络:
docker network create appnet
- 运行 MySQL 容器:
docker run -d –name mydb
-e MYSQL_ROOT_PASSWORD=123456
–network appnet
-v mydbdata:/var/lib/mysql
mysql:8.0
- 运行 Nginx 容器:
docker run -d –name mynginx
-p 8080:80
–network appnet
nginx
此时 Nginx 与 MySQL 在同一个网络 appnet 中,可以通过容器名直接通信。MySQL 数据也存储在 mydbdata 卷中,容器删除后数据依旧保留。
9. 总结
在本篇文章中,我们学习了:
- Docker 网络模式(bridge、host、none、overlay)。
- 容器端口映射与自定义网络。
- Docker 存储方式:Volume、Bind Mount、tmpfs。
- 实战案例:Nginx + MySQL 容器网络互联与数据持久化。
在下一篇文章中,我们将学习 Dockerfile 与镜像构建,掌握如何定制属于自己的镜像。


















暂无评论内容