Docker 备忘单:终极指南 (2026版)

作为一名开发者,我们深知在现代软件开发流程中,环境一致性往往是最棘手的问题之一。你是否也曾遇到过这种情况:代码在本地运行完美,但一旦部署到测试或生产环境就报错?这就是我们通常所说的“在我机器上能跑”的问题。

为了解决这个问题,我们将深入探讨 Docker —— 一个彻底改变了我们构建、交付和运行应用程序方式的强大工具。在这篇文章中,我们将为你提供一份详尽的 Docker 备忘单(Docker Cheat Sheet),不仅涵盖基础命令,还将深入探讨实际应用场景、最佳实践以及那些让我们的工作流更加顺畅的高级技巧。

为什么我们需要 Docker?

在深入命令之前,让我们先达成一个共识:容器化技术不仅仅是运维的专利,更是开发者的福音。

Docker 允许我们将应用程序及其依赖项(如代码、运行时、系统工具、系统库和设置)打包到一个轻量级、可移植的容器中。这与虚拟机(VM)不同,容器不需要运行完整的操作系统内核,它们直接共享主机的内核。这意味着容器启动速度极快(通常是秒级),且占用的资源非常少。

这种松散隔离的环境带来了巨大的好处:

  • 一致性:无论是开发环境还是生产环境,应用运行表现完全一致。
  • 可移植性:“一次构建,到处运行”。你可以在笔记本电脑上构建容器,然后无缝将其部署到云服务器或任何支持 Docker 的机器上。
  • 资源效率:由于容器共享内核,我们可以在同一台主机上运行比虚拟机多得多的服务实例。

前置知识:快速导航

为了最大化这份备忘单的效用,建议你具备以下基本概念。如果你对某些术语感到陌生,不妨先花点时间了解一下,这将帮助我们后续的学习更加顺畅:

  • Docker: 核心容器平台。
  • Docker Hub: Docker 的官方镜像仓库,类似于代码界的 GitHub,我们可以在这里找到数百万现成的镜像。

本指南将涵盖以下核心领域:

  • 安装与环境配置:从零开始。
  • 镜像管理:构建、拉取与推送。
  • 容器生命周期:运行、停止、删除与调试。
  • 存储与网络:数据持久化与容器间通信。
  • 编排工具:Docker Compose 与 Swarm 基础。

—

1. 安装与环境配置

一切始于安装。虽然我们可以通过包管理器(如 INLINECODE8cbdee32 或 INLINECODE0b89ccc4)安装,但使用 Docker 官方提供的便捷脚本是快速上手的最简单方法。

安装命令

操作名称

命令

说明 —

—

— Linux 快速安装

curl -fsSL https://get.docker.com/ -o get-docker.sh \&\& sudo sh get-docker.sh

此脚本会自动检测你的 Linux 发行版并安装最新版的 Docker 引擎。适合快速测试或开发环境。

> 注意:在生产环境中,我们建议遵循官方文档的步骤,添加 Docker 官方的 GPG 密钥和源,以便更好地管理版本更新和安全性。

认证与登录

在我们要拉取私有镜像或推送自己的镜像到 Docker Hub 之前,需要先进行身份验证。

操作名称

命令

—

—

登录到 Registry

INLINECODEfd9aa61c

登出

INLINECODEb06c0e60实战场景:

# 输入命令后,系统会提示你输入用户名和密码
# 登录成功后,你的凭据会被保存在 ~/.docker/config.json 文件中
docker login

—

2. 镜像管理:核心概念深入

Docker 镜像是只读的模板。我们可以把它想象成应用程序的“源代码”或者“快照”。当我们运行一个容器时,实际上是在镜像的基础上添加了一层可写的“容器层”。

基础镜像命令

操作名称

命令

备注 —

—

— 构建镜像

INLINECODE9efd6ab0

INLINECODEff8275b2 用于给镜像打标签,. 表示使用当前目录的 Dockerfile 拉取镜像

docker pull :

如果不指定标签,默认为 latest 列出本地镜像

INLINECODEa97d7070 或 INLINECODEeb1008ba

查看本机已存储的镜像 删除镜像

docker rmi

注意:必须在没有容器使用该镜像的情况下才能删除

实战案例:构建一个定制化的 Nginx 镜像

让我们来做一个实际的练习。假设我们想要修改 Nginx 的默认首页,并将其打包成自己的镜像。

第一步:创建一个目录并编写 index.html。

Hello, Docker World!

第二步:在同一目录下创建 Dockerfile。

# 使用官方 Nginx 镜像作为基础
FROM nginx:alpine
# 将我们的自定义页面复制到 Nginx 的默认 html 目录
COPY index.html /usr/share/nginx/html/index.html

第三步:构建镜像。

# 这里的 -t 给我们的镜像起名为 my-nginx,版本号为 v1
docker build -t my-nginx:v1 .

工作原理:

Docker 引擎读取 INLINECODEc7a6b0dc 中的指令。INLINECODEa20d42f9 告诉它起点是哪个镜像,COPY 指令将本地文件系统中的文件注入到镜像的文件系统中。构建完成后,我们就拥有了一个包含自定义内容的新镜像。

镜像传输:发布你的作品

操作名称

命令

—

—

推送镜像

INLINECODEf9041d68

推送示例

INLINECODE5f6a91b0常见错误与解决:

  • denied: requested access to the resource is denied

* 原因:你没有登录,或者你的镜像命名不符合 Hub 的要求。Docker Hub 要求推送的镜像名必须以你的 Docker Hub 用户名作为前缀(例如 username/my-nginx:v1)。

* 解决:使用 INLINECODEa1f6970c 命令给镜像重新打标,例如 INLINECODEe2a7654d,然后再推送。

—

3. 容器管理:掌控运行时

镜像是静态的,容器是动态的运行实例。这是我们日常工作中交互最频繁的部分。

常用运行命令

操作名称

命令

实用见解 —

—

— 运行容器

docker run [OPTIONS]

最核心的命令,后面会详解 后台运行

INLINECODE7d2fd33d

INLINECODEe05e17b1 代表 detached(分离模式),让容器在后台运行 交互式运行

INLINECODE0b7907cf

INLINECODE825fc4f7 保持 STDIN 打开,-t 分配一个伪终端。非常适合调试 端口映射

docker run -p 8080:80 nginx

将主机的 8080 端口映射到容器的 80 端口 挂载卷

docker run -v /host/path:/container/path nginx

实现数据持久化,修改容器内的文件不会丢失 命名容器

docker run --name my-web-server nginx

给容器起个有意义的名字,方便后续管理

深入理解:docker run 的魔法

让我们看一个更复杂的例子,这通常是我们启动生产级 Web 服务的标准方式:

docker run -d \
  --name my-website \
  -p 80:80 \
  -v /my/html/files:/usr/share/nginx/html:ro \
  --restart always \
  nginx:alpine

代码解析:

  • -d:我们在后台启动它,终端不会被占用。
  • --restart always:这是一个生产环境必备参数。它告诉 Docker,如果容器崩溃了(或者 Docker 守护进程重启了),请自动重启这个容器。这大大提高了服务的可用性。
  • INLINECODE32fe825f:我们将主机的 INLINECODEe12f2f05 目录挂载到容器内。注意 :ro (Read Only) 参数,这是一个安全最佳实践。我们只需要容器读取文件提供 Web 服务,不需要它修改这些文件。

容器生命周期管理

操作名称

命令

—

—

列出运行中容器

INLINECODEf3c75b75

列出所有容器

INLINECODE16547542

包含已停止的容器 停止容器

docker stop

发送 SIGTERM 信号,优雅关闭 强制停止

docker kill

发送 SIGKILL 信号,立即终止 删除容器

INLINECODE2950f724

只能删除已停止的容器。若要删除运行中的,加 INLINECODE5a308bb5 强制标志

—

4. 系统运维与清理

随着我们不断测试和部署,本地会积累大量悬空镜像和停止的容器,占用宝贵的磁盘空间。

清理命令

操作名称

命令

警告 —

—

— 清理停止的容器

docker container prune

安全,只清理已停止的 清理未使用的镜像

INLINECODEea27e948

使用 INLINECODEc249372a 会删除所有未被任何容器使用的镜像,不仅仅是悬空的 终极清理

docker system prune -a --volumes

非常危险!它会删除所有停止的容器、所有未使用的网络、所有悬空镜像以及所有未使用的卷。在执行前请务必确认!

—

5. 网络与存储:进阶必备

默认情况下,容器是隔离的。为了让它们相互通信或者持久化数据,我们需要掌握网络和卷。

Docker 网络

操作名称

命令

—

—

列出网络

INLINECODE7bdc201e

创建网络

INLINECODEb4b7b6bc

连接容器到网络

docker network connect 实战见解:

默认情况下,Docker 创建三个网络:INLINECODE5f78ecaa, INLINECODE51cfb680, INLINECODEeb508126。当我们运行 INLINECODE5a8d342a 时,默认连接到 bridge 网络。但是,在生产环境中,我们强烈建议创建自定义网络。

在自定义网络中,容器可以通过容器名作为 DNS 进行解析。例如,如果你有一个数据库容器名为 INLINECODE7bf8bd3e,你的 Web 应用容器可以直接通过 INLINECODEc7514b47 找到它,而无需知道它的 IP 地址(因为容器重启后 IP 可能会变)。

Docker 卷

操作名称

命令

—

—

创建卷

INLINECODE67fe9e02

列出卷

INLINECODEd9e73ec1

删除未使用的卷

docker volume prune### 文件复制

有时候我们需要在本地和容器之间快速传输文件,而不需要挂载卷。

操作名称

命令

—

—

从容器复制到主机

INLINECODE18838481

从主机复制到容器

INLINECODE580c662c—

6. 多容器编排:Docker Compose 入门

当我们需要同时运行 Web 服务器、数据库和缓存时,手动一个个 docker run 会变得非常繁琐且难以管理。这时我们需要 Docker Compose。

docker-compose 命令是 Docker 引擎之外的二进制文件,通常需要单独安装。它通过一个 YAML 文件来定义多容器应用。

操作名称

命令

—

—

启动服务

docker-compose up -d

根据 docker-compose.yml 启动所有服务 停止服务

docker-compose down

停止并删除容器、网络 查看日志

docker-compose logs -f

同时查看所有服务的日志流 执行命令

docker-compose exec web bash

进入指定服务的容器内部

—

总结与下一步

在这份 Docker 备忘单中,我们不仅涵盖了从安装、构建、运行到清理的基础命令,还深入探讨了端口映射、卷挂载、自定义网络以及清理策略等关键细节。掌握这些命令,你将能够应对绝大多数日常开发和运维场景。

关键要点回顾:

  • 镜像 vs 容器:镜像是蓝图,容器是实例。
  • 安全性:生产环境中尽量使用 INLINECODE1adca26d,对挂载目录使用 INLINECODE9a611605 (只读) 权限。
  • 清理:养成定期执行 docker system prune 的习惯,保持环境整洁。
  • 网络:使用自定义网络实现容器间的 DNS 解析,避免硬编码 IP。

下一步建议:

  • 深入 Dockerfile:学习多阶段构建 来减小最终镜像的体积,这对生产部署至关重要。
  • 探索 Docker Hub:去看看其他优秀项目的 Dockerfile 是怎么写的。
  • 容器安全:了解如何扫描镜像漏洞(Docker Scout)。

Docker 的学习曲线虽然略有起伏,但一旦你习惯了“以容器为中心”的思维模式,你的开发效率将迎来质的飞跃。希望这份指南能成为你桌面上最常翻阅的参考工具。如果你在实战中遇到任何问题,不妨回头看看这些基础命令,通常答案就隐藏在细节之中。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/43944.html
点赞
0.00 平均评分 (0% 分数) - 0 票