导航菜单

Docker使用指南

陆兴东 2026-04-09 167 浏览 Docker

1. Docker 是什么??

Docker 是一个用于开发、打包、分发和运行应用的平台。执行 docker run 时,本质上是在宿主机上启动一个隔离进程,这个进程有自己的文件系统、网络和进程树。(Docker Documentation)

先记住这几个核心概念:

  • • Image(镜像):应用模板,像“可重复使用的安装包” ?
  • • Container(容器):镜像运行后的实例 ?
  • • Volume(卷):持久化数据 ?
  • • Network(网络):容器间通信 ?
  • • Compose:用一个 YAML 文件管理多容器应用 ?

2. 不同平台如何安装 Docker ?️

Windows ?

Docker Desktop for Windows 支持基于 WSL 2 或 Hyper-V 的安装方式。官方要求里,WSL 路线至少需要 WSL 2.1.5+、64 位 Windows、4GB RAM 和 BIOS/UEFI 虚拟化;Docker Desktop 不支持 Windows Server。另外,如果你要跑 Windows 容器,需要 Windows 10/11 Pro 或 Enterprise;Home / Education 只能运行 Linux 容器。(Docker Documentation)

安装步骤:

  1. 1. 下载 Docker Desktop for Windows
  2. 2. 双击安装程序
  3. 3. 选择 WSL 2 或 Hyper-V 后端
  4. 4. 启动 Docker Desktop
  5. 5. 如果使用 WSL 2,在设置里确认 Use WSL 2 based engine 已启用。(Docker Documentation)

macOS ?

Docker Desktop for Mac 支持 当前 macOS 大版本 + 前两个大版本,要求至少 4GB RAM。官方提供图形安装和命令行安装两种方式。(Docker Documentation)

图形安装:

  1. 1. 下载适合芯片架构的安装包(Apple Silicon / Intel)
  2. 2. 打开 Docker.dmg
  3. 3. 将 Docker 拖入 Applications
  4. 4. 双击 Docker.app 启动。(Docker Documentation)

命令行安装:

sudo hdiutil attach Docker.dmg
sudo /Volumes/Docker/Docker.app/Contents/MacOS/install
sudo hdiutil detach /Volumes/Docker

上面这组命令是 Docker 官方文档给出的 macOS 命令行安装方式。(Docker Documentation)


Linux 桌面版 ?

如果你是 Linux 桌面开发环境,可以安装 Docker Desktop for Linux。它运行在一个 VM 里,并会创建一个独立的 Docker context:desktop-linux。这意味着你之前本机 Docker Engine 里的镜像和容器,不会自动出现在 Docker Desktop 里。(Docker Documentation)

Docker Desktop for Linux 的通用要求包括:64 位虚拟化支持、KVM、QEMU 5.2+、systemd、至少 4GB RAM。(Docker Documentation)

你可以这样查看和切换 context:

docker context ls
docker context use default
docker context use desktop-linux

Ubuntu / Linux 服务器 ☁️

服务器环境更常见的是直接安装 Docker Engine。截至 2026-03-11,Ubuntu 官方安装页列出的支持版本包括 25.10、24.04 LTS、22.04 LTS。安装前需要先卸载冲突包;官方也明确写了,convenience script 只建议用于测试和开发环境。(Docker Documentation)

推荐思路:用官方 apt 仓库安装。

# 1) 卸载冲突包
sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc | cut -f1)

# 2) 按官方文档添加 Docker apt 仓库

# 3) 安装
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

上面的包名和安装方式来自 Ubuntu 官方安装页;其中 docker-buildx-plugin 和 docker-compose-plugin 也是官方推荐一并安装的。(Docker Documentation)

安装完成后可以验证:

sudo systemctl start docker
sudo systemctl status docker
sudo docker run hello-world

Linux 上 Docker daemon 默认由 root 拥有,普通用户通常需要 sudo 才能运行 Docker 命令。你也可以把用户加入 docker 组,但 Docker 官方明确警告:docker 组等同于 root 级权限。如果你更看重安全,可以考虑 Rootless mode。(Docker Documentation)

sudo usermod -aG docker $USER
newgrp docker
docker run hello-world

3. 安装后第一时间该做什么 ✅

建议先跑下面几条命令:

docker version
docker info
docker compose version
docker run hello-world
docker system df

docker system df 用来查看 Docker daemon 占用的磁盘空间;如果你机器上容器和镜像很多,这条命令非常有用。(Docker Documentation)


4. 最常用的 Docker 命令 ⚡

4.1 镜像相关

docker pull nginx
docker image ls
docker image ls -a
docker rmi nginx

docker pull 用来拉取镜像;如果你不写 tag,Docker 默认会使用 :latest。docker image ls -a 会把默认隐藏的 中间层镜像 和 dangling 镜像 一起显示出来。docker rmi 用来删除本地镜像。(Docker Documentation)


4.2 容器生命周期

docker run -d --name web -p 8080:80 nginx:alpine
docker ps
docker ps -a
docker stop web
docker start web
docker rm web

docker run 会在需要时自动拉取镜像并启动容器。docker ps 默认只显示运行中的容器,而 docker ps -a 会显示全部容器。docker stop 支持发送停止信号和设置超时时间,docker start 用来重新启动已停止的容器。(Docker Documentation)

常见参数你至少要记住这些:

  • • -d:后台运行
  • • --name:指定容器名
  • • -p 主机端口:容器端口:端口映射
  • • -e:传环境变量
  • • -v 或 --mount:挂载卷或目录
  • • --restart unless-stopped:设置重启策略。Docker 官方也建议优先用重启策略而不是额外套进程管理器。(Docker Documentation)

例如:

docker run -d \
  --name app \
  -p 8000:8000 \
  -e APP_ENV=prod \
  -v appdata:/data \
  --restart unless-stopped \
  myapp:1.0

4.3 日志、进入容器、看详情、拷文件

docker logs -f web
docker exec -it web sh
docker inspect web
docker stats web
docker cp web:/etc/nginx/nginx.conf .
docker cp ./local.txt web:/tmp/local.txt

docker logs 默认查看容器的 STDOUT/STDERR,加 -f 会持续追踪输出。docker exec -it 常用于进入容器执行交互式命令。docker inspect 默认返回 JSON 结构。docker stats 会持续显示 CPU、内存、网络 I/O 等运行时指标。docker cp 支持容器与宿主机双向拷贝,而且目标容器可以是运行中或停止状态。(Docker Documentation)


5. 数据持久化:Volume 怎么用??

Docker 容器本身是偏“临时”的:写入容器可写层的数据,在容器销毁后不会保留。官方推荐用 Volume 持久化数据;相比 bind mount,volume 由 Docker 管理,更独立于宿主机目录结构。(Docker Documentation)

常见写法:

docker volume create pgdata
docker run -d \
  --name db \
  -e POSTGRES_PASSWORD=secret \
  -v pgdata:/var/lib/postgresql/data \
  postgres:16

如果是数据库、日志、上传文件这类需要长期保存的数据,优先考虑 volume。(Docker Documentation)


6. 网络:容器之间怎么通信??

Docker 容器默认就有网络能力。对于单机多容器场景,最常用的是 bridge 网络。官方文档明确说明:用户自定义 bridge 网络 比默认 bridge 更好,因为它支持容器间按名称自动解析;而默认 bridge 上容器通常只能通过 IP 通信。(Docker Documentation)

示例:

docker network create appnet

docker run -d --name api --network appnet myapi:latest
docker run -d --name web --network appnet nginx:alpine

如果你把多个服务放进同一个用户自定义网络,就可以直接用容器名互相访问,比如 http://api:8000。 (Docker Documentation)


7. Dockerfile:自己构建镜像 ?

Dockerfile 是一个文本文件,用来描述如何构建镜像。Dockerfile 中的指令按顺序执行,并且必须以 FROM 开始(前面最多只有注释、parser 指令或全局 ARG)。(Docker Documentation)

最小示例:

FROM python:3.12-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .
EXPOSE 8000
CMD ["python", "app.py"]

构建命令:

docker build -t myapp:1.0 .

这里最后那个 . 是 build context,表示把当前目录作为构建上下文传给构建器。现在在 Docker Desktop 和 Docker Engine 23+ 上,默认构建后端已经是 BuildKit;docker build 底层会通过 Buildx 发起构建。(Docker Documentation)

如果想继续优化镜像,优先考虑:

  • • 选择体积小、可信的基础镜像
  • • 把依赖安装和源码复制分层,利用缓存
  • • 使用 multi-stage build 减小最终镜像体积。(Docker Documentation)

8. Docker Compose:管理多容器应用 ?

当你的应用不止一个容器,比如 Web + API + MySQL + Redis,继续手写很多条 docker run 会很痛苦。Docker Compose 的作用,就是把服务、网络、卷都写进一个 YAML 文件里,用一条命令管理整套应用。Compose 在 Docker Desktop 中原生可用,也可以作为 Engine 插件安装。(Docker Documentation)

8.1 一个最小的 compose.yaml

services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"

  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: secret
    volumes:
      - dbdata:/var/lib/postgresql/data

volumes:
  dbdata:

Compose 文件可以定义 services、networks、volumes 等内容。默认情况下,Compose 会为应用创建一个默认网络,每个服务都会加入这个网络,并且可以通过服务名被其它服务发现。(Docker Documentation)

8.2 最常用的 Compose 命令

docker compose up -d
docker compose ps
docker compose logs -f
docker compose down
  • • docker compose up -d:后台启动整套应用
  • • docker compose ps:查看服务状态
  • • docker compose logs -f:追踪日志
  • • docker compose down:停止并移除容器与网络。(Docker Documentation)

docker compose up 在检测到服务配置或镜像变化时,会停止并重建相关容器,同时保留已挂载的卷。docker compose down 默认会移除该 Compose 文件创建的容器和网络,但不会删除 external 网络/卷,匿名卷也默认不会删。(Docker Documentation)


9. 发布镜像到 Docker Hub 或私有仓库 ?

先登录:

docker login

对 Docker Hub 来说,docker login 默认会走 device code 登录流程;如果你传 --username,则走用户名方式。官方文档也说明,你可以使用 username + access token 或 password 进行认证。(Docker Documentation)

给镜像打 tag:

docker tag myapp:1.0 yourname/myapp:1.0

推送到仓库:

docker push yourname/myapp:1.0

docker push 会把你打好 tag 的镜像上传到 Docker Hub 或其它 registry。要推送到私有 registry,需要在 tag 里包含 registry 主机名和端口。(Docker Documentation)


10. 清理磁盘:Docker 越用越占空间怎么办??

先看占用:

docker system df

再做清理:

docker system prune
docker system prune -a --volumes

docker system df 用来查看 Docker 占用空间。docker system prune -a --volumes 会删除:停止的容器、未使用网络、未使用匿名卷、无容器引用的镜像以及构建缓存,所以执行前一定要确认。(Docker Documentation)


11. 实用建议和避坑 ⚠️

11.1 优先选可信基础镜像

Docker 官方建议优先使用 Docker Official Images 作为基础镜像或起点。这类镜像文档清晰、遵循最佳实践、更新也更规律。(Docker Documentation)


11.2 Linux 上不要轻视权限问题

把用户加入 docker 组确实方便,但它等同于给了 root 级别权限;如果你的环境比较敏感,更稳妥的方向是 Rootless mode。(Docker Documentation)


11.3 日志别放任不管

Docker 默认使用 json-file 日志驱动,而且默认不做 log rotation。官方建议为了避免磁盘被打满,可以考虑 local 日志驱动,或者把日志发到远端聚合系统。(Docker Documentation)


11.4 注意防火墙和端口暴露

在 Ubuntu / Debian 一类系统上,如果你使用 ufw 或 firewalld,Docker 暴露端口时可能会绕过你原有的防火墙规则。官方建议把规则加到 DOCKER-USER 链,并注意 iptables / ip6tables 兼容性。(Docker Documentation)


12. 一套新手最值得记住的命令清单 ?

# 拉镜像
docker pull nginx

# 跑容器
docker run -d --name web -p 8080:80 nginx

# 看容器
docker ps
docker ps -a

# 看日志
docker logs -f web

# 进容器
docker exec -it web sh

# 停止 / 启动 / 删除
docker stop web
docker start web
docker rm web

# 看镜像
docker image ls
docker image ls -a

# 构建镜像
docker build -t myapp:1.0 .

# Compose
docker compose up -d
docker compose ps
docker compose logs -f
docker compose down

# 看空间 / 清理
docker system df
docker system prune -a --volumes

这组命令基本覆盖了:拉镜像、起容器、查日志、进容器、构建镜像、跑多容器、清理空间。对应的行为和默认语义都可以在官方 CLI 文档中找到。(Docker Documentation)


13. 你现在最推荐的学习路线 ?

  1. 1. 先装好 Docker Desktop 或 Docker Engine
  2. 2. 跑通 docker run hello-world
  3. 3. 用 nginx 跑第一个 Web 容器
  4. 4. 学会 logs / exec / ps / stop / rm
  5. 5. 写一个最小 Dockerfile
  6. 6. 再学 Compose,把 Web + DB 一起跑起来。(Docker Documentation)