跳转至

Docker

本文记录 Docker 的学习笔记。官方文档见 Docker Docs

Warning

若遇到网络问题请自行配置代理,这里不敢展开。

Docker 是一个开源的容器化平台,可以把应用程序和它需要的所有依赖打包在一起,形成一个标准化的单元,方便在不同环境中运行,解决了「在我电脑上能运行,为什么到你电脑上就不行了」这个经典问题。同时,Docker 让应用部署变得非常简单快速,不需要复杂的安装配置过程,直接启动容器就能运行应用。

与虚拟机需要包含完整操作系统且启动时间久、占用空间大不同,容器是在操作系统层面进行虚拟化。多个容器共享同一个操作系统内核,启动时间较短,占用空间较小。可以通俗地类比为租房的场景:虚拟机就是单独租了一间房,卧室、卫生间、厨房一应俱全;而容器就是合租,卫生间、厨房都要和别人共用,通过操作系统的调度,让你洗澡、做饭不和其他合租户冲突,看上去就像独租。

Docker 主要由镜像 (Image)、容器 (Container) 和仓库 (Registry) 三部分组成:

  • 镜像 (Image) 是一个只读的应用模板,包含了运行应用所需的一切——代码、运行环境、系统工具、库文件等。为了保证环境的一致性,镜像一旦创建就不能修改,如果需要更新,就要重新构建一个新的镜像。同一个软件的所有镜像通过版本标签来管理,比如 nginx:1.21nginx:latest 代表 nginx 的不同版本。
  • 容器 (Container) 是镜像运行起来后的实例(运行时,Runtime)。同一个镜像可以创建多个容器,它们互不干扰,各自拥有独立的文件系统和网络环境。
  • 仓库 (Registry) 是集中存放镜像的地方,用来分发和管理各个用户或组织上传的镜像,类似于 GitHub 之于代码、应用商店之于软件。最常用的是 Docker Hub 官方仓库,企业也可以搭建私有仓库来存放内部的镜像。

最佳实践:

  1. 使用 .dockerignore 文件:排除不需要的文件,减小镜像体积;
  2. 最小化镜像层数:合并 RUN 命令,减少镜像大小;
  3. 使用多阶段构建:分离构建环境和运行环境;
  4. 不要在容器中存储重要数据:始终使用数据卷持久化;
  5. 使用健康检查:确保容器正常运行;
  6. 限制容器资源:避免单个容器占用过多资源;
  7. 定期更新镜像:保持安全性和稳定性;
  8. 使用标签管理镜像版本:避免使用 latest 标签。

安全建议:

  1. 不要以 root 用户运行容器;
  2. 定期扫描镜像漏洞;
  3. 使用官方或可信镜像;
  4. 限制容器权限(例如 --cap-drop);
  5. 使用网络隔离;
  6. 加密敏感数据(使用 Docker Secrets)。