博主头像
小雨淅沥

Some things were meant to be.

Docker 使用指南

Docker 使用指南

1 基本概念

容器运行所在的计算机上是宿主机

  1. Image 镜像,可以类比成为一个虚拟机器的快照
  2. Container 容器,是 Image 的运行的实例,他们之间隔离
  3. Dockerfile,用于自动化安装的一个文件

2 Docker 基础概念

Docker 概述: Docker 是一种成熟高效的软件部署技术,利用容器化技术为应用程序封装独立的运行环境。每个运行环境即为一个容器,承载容器运行的计算机称为宿主机

容器与虚拟机的区别

Docker 容器: 多个容器共享同一个系统内核。

虚拟机: 每个虚拟机包含一个操作系统的完整内核。

优势: Docker 容器比虚拟机更轻量、占用空间更小、启动速度更快。

镜像 (Image)

定义: 镜像是容器的模板,可类比为软件安装包。

类比: 类似于制作糕点的模具,可用于创建多个糕点(容器),并可分享给他人。

容器 (Container)

定义: 容器是基于镜像运行的应用程序实例,可类比为安装好的软件。

类比: 类似于模具制作出的糕点。

Docker 仓库 (Registry)

定义: 用于存放和分享 Docker 镜像的场所。

Docker Hub: Docker 的官方公共仓库,存储了大量用户分享的 Docker 镜像。

3 Docker 镜像管理命令

3.1 docker pull - 下载镜像

功能: 从 Docker 仓库下载镜像到本地。

镜像构成: 一个完整的镜像名称包含四部分:[registry_address/][namespace/]image_name[:tag]

registry_address: Docker 仓库的注册表地址。docker.io表示 Docker Hub 官方仓库,可省略。

namespace: 命名空间,通常是作者或组织名称。library是 Docker 官方仓库的命名空间,可省略。
image_name: 镜像的名称。
tag: 镜像的标签名,通常表示版本号。latest表示最新版本,可省略。

例如:

# 从Docker Hub官方仓库下载最新版Nginx镜像
docker pull nginx
# 从N8n的私有仓库下载N8n镜像
docker pull n8n/n8n

另外有一个 --platform 参数,可以指定芯片相关的参数,一般来说不用关心,会自动选择最合适的下载

Docker Hub 网站hub.docker.com是官方仓库,可搜索、查看镜像详情(如官方镜像、版本号、使用说明)。

Registry (注册表) 与 Repository (镜像库)

Registry: 整个 Docker Hub 网站可视为一个 Registry 。

Repository: 一个 Repository(如 Nginx)存储了同一个镜像的不同版本

有时候官方网站连不上,可以连接镜像:在 Docker Desktop 的设置中,进入“Docker Engine”配置项,在registry-mirrors中添加镜像站地址,点击“Apply & Restart”。

3.2 docker images - 列出本地镜像

功能: 列出所有已下载到本地的 Docker 镜像。

3.3 docker rmi - 删除镜像

功能: 删除本地的 Docker 镜像。

参数: 可指定镜像名称或 ID 。

4 Docker 容器管理命令

### 容器启动

docker run 

功能: 使用指定的镜像创建并运行一个容器。

自动拉取: 如果本地不存在指定镜像,docker run会先自动拉取镜像,再创建并运行容器。

参数

  1. -d (Detached Mode):让容器在后台执行,不阻塞当前终端窗口。控制台只打印容器 ID,容器日志不会直接输出到终端。
  2. -p (Port Mapping / 端口映射):将宿主机的端口映射到容器内部的端口

    • 语法:-p <宿主端口>:<容器端口>
  3. -v (Volume Mounting / 挂载卷):将宿主机的文件目录与容器内的文件目录进行绑定。

    • 语法-v <宿主机目录路径>:<容器内部目录路径>
  4. -v 命名卷挂载 (Named Volume): 让 Docker 自动创建一个存储空间,并为其命名。

    • 创建命名卷docker volume create <卷名称>
    • 使用命名卷-v <卷名称>:<容器内部目录路径>
    • 特点: 命名卷在第一次使用时,Docker 会将容器的文件夹内容同步到命名卷进行初始化(绑定挂载无此功能)
    1. -e (Environment Variables / 环境变量):向容器内部传递环境变量
    2. 语法-e <KEY>=<VALUE>,可在 Docker Hub 镜像文档或开源项目的 GitHub 仓库中查找可用的环境变量。
  5. --name (自定义容器名称):为容器指定一个自定义的、在宿主机上唯一的名称,方便记忆和管理。
  6. -it (Interactive & TTY / 交互式终端):让控制台进入容器内部,获得一个交互式的命令行环境。

    • 用途: 临时调试容器,执行 Linux 命令。
    • 语法docker run -it <镜像名称> /bin/bash (或/bin/sh)。
  7. --rm (运行结束后自动删除)

    • 功能: 当容器停止时,自动将其从宿主机上删除。
    • 常用组合: 与-it联用,用于临时调试场景。
  8. --restart (重启策略)

    • 功能: 配置容器停止时的重启行为。
    • 常用策略
    • always: 只要容器停止(包括内部错误崩溃、宿主机断电等),就会立即重启。
    • unless-stopped: 除非手动停止容器,否则都会尝试重启。对于生产环境非常有用,可自动重启因意外停止的容器,而手动停止的容器不会再重启。

4.1 挂载卷管理

docker volume

常用管理命令

docker volume ls: 列出所有创建过的卷。

docker volume inspect <卷名称>: 查看卷的详细信息,包括在宿主机的真实目录。

docker volume rm <卷名称>: 删除一个卷。

docker volume prune: 删除所有未被任何容器使用的卷。

4.2 查看运行的容器

docker ps

输出信息包括:Container ID(容器唯一 ID)、Image(基于哪个镜像创建)、Names(容器名称)。

4.2.1 可用参数

  1. -a 查看所有容器

4.3 容器启停

docker stop <容器ID或名称>: 停止一个正在运行的容器。

docker start <容器ID或名称>: 重新启动一个已停止的容器。

参数保留: 使用stopstart启停容器时,之前docker run时设置的端口映射、挂载卷、环境变量等参数都会被 Docker 记录并保留,无需重新设置。

docker inspect <容器ID或名称>: 查看容器的详细配置信息。输出内容复杂,可借助 AI 辅助分析。

docker create <镜像名称>: 只创建容器,但不立即启动。若要启动,需后续执行docker start命令

### 容器内部操作与调试

docker logs <容器ID或名称>: 查看容器的运行日志。

-f: 滚动查看日志,实时刷新。

Docker 技术原理简述

Cgroups (Control Groups): 用于限制和隔离进程的资源使用(CPU 、内存、网络带宽等),确保容器资源消耗不影响宿主机或其他容器。

Namespaces: 用于隔离进程的资源视图,使得容器只能看到自己内部的进程 ID 、网络资源和文件目录,而看不到宿主机的。

本质: Docker 容器本质上是一个特殊的进程,但进入容器内部后,其表现如同一个独立的操作系统。

docker exec - 在容器内部执行命令

功能: 在一个正在运行的 Docker 容器内部执行 Linux 命令。

语法docker exec <容器ID或名称> <命令>

示例docker exec my_nginx ps -ef查看容器内进程。

进入交互式环境docker exec -it <容器ID或名称> /bin/sh(或/bin/bash)可进入容器内部获得交互式命令行环境,进行文件系统查看、进程管理或深入调试。

注意: 容器内部通常是极简操作系统,可能缺失vi等常用工具,需要自行安装(如 Debian 系容器使用apt updateapt install vim)。

5 Dockerfile 构建镜像

定义: Dockerfile 是一个文本文件,详细列出了如何制作 Docker 镜像的步骤和指令,可类比为制作模具的图纸。

基本结构与指令

FROM <基础镜像>: 所有 Dockerfile 的第一行,选择一个基础镜像,表示新镜像在此基础上构建。

WORKDIR <目录路径>: 设置镜像内的工作目录,后续命令在此目录下执行。

COPY <源路径> <目标路径>: 将宿主机的文件或目录拷贝到镜像内的指定路径。

RUN <命令>: 在镜像构建过程中执行的命令(例如安装依赖)。

EXPOSE <端口号>: 声明镜像提供服务的端口(仅为声明,非强制,实际端口映射仍由-p参数决定)。

CMD <命令>: 容器运行时默认执行的启动命令。一个 Dockerfile 只能有一个CMD指令。

ENTRYPOINT <命令>: 与CMD类似,但优先级更高,不易被docker run命令覆盖。

docker build - 构建镜像

功能: 根据 Dockerfile 构建 Docker 镜像。

语法docker build -t <镜像名称>[:<版本号>] <Dockerfile所在目录>

示例docker build -t docker-test . (在当前目录构建名为docker-test的镜像)。

镜像推送至 Docker Hub

  1. 登录 Docker Hubdocker login
  2. 重新标记镜像docker tag <本地镜像名称> <你的用户名>/<镜像名称>[:<版本号>]。推送时镜像名称必须包含用户名作为命名空间。
  3. 推送镜像docker push <你的用户名>/<镜像名称>[:<版本号>]
  4. 验证: 在 Docker Hub 网站上可搜索到已推送的镜像,其他用户即可通过docker pull下载使用。

6 Docker 网络模式

### Bridge (桥接模式)

默认模式: 所有容器默认连接到此网络。

内部 IP: 每个容器被分配一个内部 IP 地址(通常是172.17.x.x开头)。

通信: 同一 Bridge 网络内的容器可以通过内部 IP 地址互相访问。容器网络与宿主机网络默认隔离,需通过端口映射(-p)才能从宿主机访问。

自定义子网

创建docker network create <子网名称>

加入docker run --network <子网名称> ...

优势

同一子网内的容器可以使用容器名称互相访问(Docker 内部 DNS 机制)。

不同子网之间默认隔离。

### Host (主机模式)

功能: Docker 容器直接共享宿主机的网络命名空间。

IP 地址: 容器直接使用宿主机的 IP 地址。

端口: 无需端口映射(-p),容器内的服务直接运行在宿主机的端口上,通过宿主机的 IP 和端口即可访问。

用途: 解决一些复杂的网络问题。

语法docker run --network host ...

### None (无网络模式)

功能: 容器不连接任何网络,完全隔离。

语法docker run --network none ...

网络管理命令

docker network ls: 列出所有 Docker 网络(包括默认的 bridge 、 host 、 none 以及自定义子网)。

docker network rm <网络名称>: 删除自定义子网(默认网络不可删除)。

Docker 使用指南
https://rainerseventeen.cn/index.php/Toolkits/31.html
本文作者 Rainer
发布时间 2025-11-11
许可协议 CC BY-NC-SA 4.0
发表新评论