Skip to content

Docker

约 1733 字大约 6 分钟

运维与部署

2025-11-24

Docker 是一种容器化平台,用来为应用程序提供独立的运行环境

在 Docker 体系里

  1. 运行 Docker 的机器叫做宿主机
  2. 被隔离运行的应用实例叫做容器
  3. 用来创建容器的模板叫做镜像
  4. 用来存储和分发镜像的地方叫做仓库

可以把它理解为:镜像类似 "软件安装包",容器类似 "安装后正在运行的软件实例",仓库类似 "应用商店"

容器和虚拟机的区别

Docker 容器和虚拟机都能提供隔离环境,但实现方式不同。Docker 多个容器共享宿主机内核,资源占用更低,启动速度更快,更适合应用部署和微服务场景。而每个虚拟机都有完整操作系统,隔离更重,启动更慢,资源开销更高

镜像操作

镜像拉取

使用 docker pull 从仓库下载镜像:

docker pull nginx
docker pull n8n/n8n

一个完整镜像名的结构通常为:

[registry/][namespace/]image[:tag]
宿主环境区分

Docker 默认会选择宿主机可运行的镜像版本,但在以下场景要特别注意:

  1. ARM 服务器拉取镜像时,需要确认镜像是否支持 arm64
  2. Apple Silicon 上运行部分 amd64 镜像时,可能依赖模拟层,性能会有损耗。

必要时可以显式指定平台:

docker pull --platform linux/amd64 nginx

查看本地镜像

查看本地镜像通过命令 docker images 命令

字段名称描述
REPOSITORY镜像仓库名
TAG镜像标签
IMAGE ID镜像 ID
SIZE镜像大小

删除镜像

删除镜像通过命令 docker rmi 命令,删除多个镜像使用空格进行分隔

docker rmi nginx
docker rmi IMAGE_ID

构建镜像

在 Dockerfile 所在目录执行:

docker build -t my-node-app .

如果要指定版本:

docker build -t my-node-app:1.0.0 .
构建参数描述
-t指定镜像名称
-f指定 Dockerfile 文件
-v指定构建上下文目录
-p指定构建端口
-e指定构建环境变量
-r指定构建缓存
-m指定构建内存

运行自定义镜像

通过 docker run 命令可以运行自定义镜像

docker run -d \
  --name my-node-app \
  -p 3000:3000 \
  my-node-app:1.0.0

容器操作

创建与运行容器

创建与运行容器通过命令 docker run 命令,如果本地没有这个镜像,Docker 会先自动拉取

docker run nginx
运行参数描述使用场景
-d后台运行终端不会被容器占住,适合服务类应用
-p端口映射容器运行在独立网络环境中,默认无法直接从宿主机访问
-v卷挂载让容器访问宿主机的文件,用于数据持久化
-e环境变量给容器传配置
--name容器名称给容器命名
-it交互模式进入容器交互模式
-rm自动删除适合临时调试容器,退出后容器会自动删除
-restart重启策略生产环境常见配置

删除容器

通过 docker rm 命令可以删除容器。只能删除已经停止的容器

docker rm my-nginx

查看容器

查看正在运行的容器
docker ps

启停容器

通过 docker stopdocker start 命令可以停止和启动容器

docker stop my-nginx
docker start my-nginx

容器第一次通过 docker run 创建后,其端口、环境变量、挂载卷等配置会被保留,后续 start 不需要重新写参数

查看容器日志

通过 docker logs 命令可以查看容器日志

查看容器日志
docker logs my-nginx

查看详细配置

使用 docker inspect 命令可以查看容器详细配置

docker inspect my-nginx

这个命令会输出大量 JSON 信息,包括:网络配置、挂载信息、环境变量、启动命令等

更新容器配置

通过 docker update 命令可以更新容器配置

docker update my-nginx --restart=always

在运行中的容器里执行命令

通过 docker exec 命令可以在运行中的容器里执行命令,就像进入一台 Linux 服务器一样

只能进入正在运行的容器

docker exec -it 容器名 bash
docker logsdocker exec 查看日志的区别

docker logs 用于查看容器主进程输出,docker exec 查看是进入容器自己去找日志文件

构建自定义镜像

Dockerfile 是一份用来描述镜像构建过程的文本文件

指令描述
FROM指定基础镜像
WORKDIR设置工作目录
COPY复制文件到镜像中
RUN在构建阶段执行命令
EXPOSE声明容器内服务端口
CMD定义容器启动时默认执行的命令
完整的 Node.js 示例

Docker Compose

当一个应用由多个服务组成时,比如:前端、后端、MySQL、Redis。如果全部用 docker run 手工管理,命令会非常分散。Docker Compose 的作用就是把多容器定义写进一个 YAML 文件中统一管理

命令描述
docker compose up启动服务
docker compose down停止并删除服务
docker compose stop停止服务
docker compose start重新启动服务
docker compose restart重新启动服务
docker compose logs查看服务日志
docker compose exec在容器中执行命令
Built with VuePress and Plume.