Docker 入门教程(第 3 篇)——网络与存储

在前两篇文章中,我们学习了 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 多容器网络与存储

  1. 创建自定义网络:

docker network create appnet

  1. 运行 MySQL 容器:

docker run -d –name mydb
-e MYSQL_ROOT_PASSWORD=123456
–network appnet
-v mydbdata:/var/lib/mysql
mysql:8.0

  1. 运行 Nginx 容器:

docker run -d –name mynginx
-p 8080:80
–network appnet
nginx

此时 Nginx 与 MySQL 在同一个网络 appnet 中,可以通过容器名直接通信。MySQL 数据也存储在 mydbdata 卷中,容器删除后数据依旧保留。

9. 总结

在本篇文章中,我们学习了:

  1. Docker 网络模式(bridge、host、none、overlay)。
  2. 容器端口映射与自定义网络。
  3. Docker 存储方式:Volume、Bind Mount、tmpfs。
  4. 实战案例:Nginx + MySQL 容器网络互联与数据持久化。

在下一篇文章中,我们将学习 Dockerfile 与镜像构建,掌握如何定制属于自己的镜像。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容