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. 下载 Docker Desktop for Windows 2. 双击安装程序 3. 选择 WSL 2 或 Hyper-V 后端 4. 启动 Docker Desktop 5. 如果使用 WSL 2,在设置里确认 Use WSL 2 based engine 已启用。(Docker Documentation)
macOS ?
Docker Desktop for Mac 支持 当前 macOS 大版本 + 前两个大版本,要求至少 4GB RAM。官方提供图形安装和命令行安装两种方式。(Docker Documentation)
图形安装:
1. 下载适合芯片架构的安装包(Apple Silicon / Intel) 2. 打开 Docker.dmg3. 将 Docker 拖入 Applications4. 双击 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-linuxUbuntu / 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-worldLinux 上 Docker daemon 默认由 root 拥有,普通用户通常需要 sudo 才能运行 Docker 命令。你也可以把用户加入 docker 组,但 Docker 官方明确警告:docker 组等同于 root 级权限。如果你更看重安全,可以考虑 Rootless mode。(Docker Documentation)
sudo usermod -aG docker $USER
newgrp docker
docker run hello-world3. 安装后第一时间该做什么 ✅
建议先跑下面几条命令:
docker version
docker info
docker compose version
docker run hello-world
docker system dfdocker system df 用来查看 Docker daemon 占用的磁盘空间;如果你机器上容器和镜像很多,这条命令非常有用。(Docker Documentation)
4. 最常用的 Docker 命令 ⚡
4.1 镜像相关
docker pull nginx
docker image ls
docker image ls -a
docker rmi nginxdocker 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 webdocker 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.04.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.txtdocker 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.0docker push 会把你打好 tag 的镜像上传到 Docker Hub 或其它 registry。要推送到私有 registry,需要在 tag 里包含 registry 主机名和端口。(Docker Documentation)
10. 清理磁盘:Docker 越用越占空间怎么办??
先看占用:
docker system df再做清理:
docker system prune
docker system prune -a --volumesdocker 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. 先装好 Docker Desktop 或 Docker Engine 2. 跑通 docker run hello-world3. 用 nginx跑第一个 Web 容器4. 学会 logs / exec / ps / stop / rm5. 写一个最小 Dockerfile 6. 再学 Compose,把 Web + DB 一起跑起来。(Docker Documentation)