type
status
date
slug
summary
category
tags
create_time
Aug 2, 2025 06:08 PM
icon
password
my_create_time

📝 前言

容器技术已经逐渐成为现代应用部署的主流方式,尤其在微服务、DevOps 和云原生架构中扮演核心角色。
回顾上一篇《第二部分:Docker 基础篇(构建你的第一个容器)》内容,我们在掌握了 Docker 的基本概念和操作后,虽然可以完成日常任务,但实际生产环境往往涉及更多高级功能。
例如:如何管理容器产生的数据,如何让容器之间通信,如何限制资源防止滥用等。
因此我们需要进一步探索其高级功能,以充分发挥 Docker 的潜力。
本篇文章将深入介绍 Docker 的进阶功能,包括存储、网络、监控、日志管理、资源限制以及远程 API 的使用,帮助读者在实际项目中更加灵活高效地使用 Docker。

📋 前提条件

在阅读本文之前,建议读者已经具备以下知识和环境:
  • 熟悉 Docker 的基本概念和架构
  • 了解 Docker 镜像和容器的基本操作
  • 掌握 Dockerfile 的基本编写方法
  • 熟悉 Linux 基本命令和操作系统概念

🧠 本章知识卡片

notion image

🚀 文章小节

1️⃣ Docker 存储

Docker 容器默认是无状态的,无状态又可以理解为无长期记忆(类似金鱼的7秒钟记忆),容器的记忆只在它的生命周期范围内有效(从创建到销毁),一旦容器销毁后,其中产生的数据也会一并跟着被清理。
这在微服务架构中非常有用,可以快速批量的进行横向扩容。
但是如果容器跑的是有状态应用,比如 MySQL 数据库这种呢,应该没有人期望数据库会被随时清空,因此就诞生 Docker 存储。
通过 Docker 存储,我们可以将容器内的数据进行持久化,不会随着其生命周期的结束而被清理。
Docker 提供了三种主要的存储方式:
  • Volumes(数据卷):数据卷是 Docker 推荐的持久化数据存储方式,生命周期独立于容器,适合生产环境。
  • Bind Mounts(绑定挂载):可以将宿主机目录映射到容器中,适合开发调试。
  • tmpfs:只存在于内存中,容器退出即消失,适合存储临时文件。
Volumes(数据卷)
创建和使用数据卷的基本命令如下:
数据卷默认的存储位置是在本机的该目录下面:
通过 tree 命令可以查看其存储目录结构:
/var/lib/docker/volumes/ ├── _metadata # 卷元数据数据库 ├── my_volume # 数据卷名称 │ └── _data # 实际数据目录 │ ├── file1 │ └── subdir └── a1b2c3... # 匿名卷(自动生成的哈希ID) └── _data
Bind Mounts(绑定挂载)
绑定挂载通常用于开发、测试环境或需要直接访问主机文件系统的场景,其使用方式如下:
这其实也是一种比较常用的方式,但是可能会涉及到文件权限控制问题。
tmpfs 挂载
对于只需要临时存储在内存中的数据,可以使用 tmpfs 挂载,这个一般使用的不多:

2️⃣ Docker 网络

Docker 容器跑起来,当有多个容器在跑时,容器与容器之间是如何通信的呢?我们在外部又是与容器如何进行通信呢?
这里就涉及到 Docker 网络知识。
Docker 常用的网络模式为以下几种:
  • bridge:默认网络模式,为每个容器分配独立的网络命名空间
  • host:容器直接使用主机的网络栈
  • none:禁用网络功能,无法在外部访问到容器
为了解决上面提到的问题,我们可以通过 docker network create 创建自定义网络,实现容器与容器之间的互相通信。
示例命令:
当我们需要在容器外部访问容器时,有两种策略:
  • 使用 host 网络模式(--network=host):容器内直接复用主机的网络,包括端口占用。
示例命令:
  • 使用 端口映射参数(-p/--publish):网络模式还是使用默认的 bridge,但是可以将某个指定端口映射到容器内。
示例命令:

3️⃣ Docker 监控

监控 Docker 容器的资源使用对于维护系统稳定性至关重要,我们需要了解哪些容器占用了多少资源,进而有针对性的进行优化。
Docker 提供了内置的 stats 命令可以用于查看容器的资源使用情况,示例如下:
通常一般在生产环境需要结合 cAdvisor + Prometheus + Grafana 使用,这个在后续章节会介绍到。

4️⃣ Docker 日志

有效的日志管理是排查问题的重要依据,Docker 默认的日志驱动是 json-file,可通过 docker logs 查看容器输出:
默认 Docker 日志配置如下:
配置项
默认值
说明
日志文件最大大小
-1(无限制)
但实际受宿主机磁盘空间限制
单个日志文件上限
20MB
超过此大小会自动滚动创建新文件
保留的日志文件数
5
即最多保留 5个 日志文件(如 container-id-json.log.1 ~ .5
日志格式
JSON
每行日志记录为 JSON 格式
我们也可以通过修改配置,达到自定义日志限制的目的,用于节省磁盘空间。
修改 vim /etc/docker/daemon.json(若不存在则创建):
保存后,重启 Docker 生效:

5️⃣ Docker 资源限制

Docker 容器默认是共享主机的所有资源,但是我们的业务通常是有区分核心和边缘服务,合理限制容器资源可以防止边缘容器占用过多资源影响其他核心服务。
CPU 限制
内存限制
也可以两者结合使用:

6️⃣ Docker 远程 API

Docker 提供 REST 风格的 Remote API,可以远程控制容器生命周期。
这在管理多台主机容器的场景中非常有用。
默认 Docker 只在本地开启了 UNIX Socket,如果需要远程访问,可以修改配置绑定 TCP。
修改 docker 服务:vim /usr/lib/systemd/system/docker.service
重启服务生效:
调用 API 接口:

✅ 总结

最后总结一下,本文深入探讨了 Docker 的进阶功能,包括:
  • 多种存储方案的选择和配置
  • 网络模式的理解和自定义网络创建
  • 容器监控方法和命令
  • 容器日志查看和配置
  • 资源限制的重要性和实现方法
  • 远程 API 的配置和使用
掌握这些进阶功能将帮助您在生产环境中更高效、更安全地使用 Docker,构建稳定可靠的容器化应用。
💡
有关文章的任何疑问,欢迎您在底部评论区留言,一起交流~
若文章对您有帮助,欢迎 请我喝杯咖啡~
上一篇
Nginx+ACME服务器搭建
下一篇
第二部分:Docker 基础篇(构建你的第一个容器)

评论
Loading...