本文记录 Docker 的下载安装、换源和常用命令,最后用 Dockerfile 和 Docker Compose 跑一个多容器的 WordPress + MySQL 例子,代码都可以直接复制运行。
一、Docker 是干什么的
在没有 Docker 之前,开发和上线最头疼的就是「环境不一致」:本地跑得好好的程序,一放到测试机或服务器就报错;换一台机器,又得重新装系统、配依赖。于是大家想:能不能让软件「带着环境一起打包」?
Docker 的做法是把代码、依赖、配置和系统环境打包进一个可移植的容器,做到「一次封装,到处运行」。它用 Go 语言开发,是一个开源的容器引擎。容器能在本地、测试、生产上跑同样的环境,彼此互不干扰,而且直接复用宿主机内核,启动快、开销小。
虚拟机会把操作系统也虚拟化,隔离更彻底,但更重也更慢;Docker 共享宿主机内核,所以更轻更快。
三个核心概念
| 概念 | 类比 | 说明 |
|---|---|---|
| 镜像 Image | 软件安装包 | 只读模板,包含运行应用所需的全部环境 |
| 容器 Container | 已安装好的软件 | 镜像的运行实例,可启动/停止/删除 |
| 仓库 Repository | 手机应用商店 | 存放镜像的地方,最常用的是 Docker Hub |
| 数据卷 Volume | 独立的 D 盘 | 持久化数据,容器删了数据还在 |
二、Docker 下载地址与安装
2.1 官方下载地址
- Docker 官网:https://www.docker.com/
- Docker Desktop 下载页:https://www.docker.com/products/docker-desktop/
- 官方镜像仓库 Docker Hub:https://hub.docker.com/
2.2 Windows 安装(Win10 2004+ / Win11)
Windows 上 Docker Desktop 依赖 WSL2,所以要先做好准备:
- 开启虚拟化:任务管理器 → 性能 → 查看「虚拟化」是否为「已启用」。若没有,重启进 BIOS 打开
Virtualization Technology。 - 启用 WSL 和虚拟机平台:控制面板 → 程序 → 启用或关闭 Windows 功能,勾选「适用于 Linux 的 Windows 子系统」和「虚拟机平台」,或直接用命令行:
dism.exe/online/enable-feature/featurename:Microsoft-Windows-Subsystem-Linux/all/norestart dism.exe/online/enable-feature/featurename:VirtualMachinePlatform/all/norestart完成后重启电脑。
- 更新 WSL 内核:从 GitHub 下载安装最新版 https://github.com/microsoft/WSL/releases
- 安装 Docker Desktop:双击安装包,一路默认下一步即可,安装过程中若提示修改 host,点「允许」。
- 验证安装:打开终端(CMD 或 PowerShell):
docker--versiondockercompose version两条都能显示版本号,就说明装好了。
2.3 Ubuntu 安装
推荐使用 Docker 官方 apt 仓库,比 Ubuntu 自带源更新:
# 1. 卸载可能存在的旧版本sudoaptremove-ydockerdocker-engine docker.io containerd runc# 2. 安装依赖sudoaptupdatesudoaptinstall-yca-certificatescurlgnupg# 3. 添加 Docker 官方 GPG 密钥sudoinstall-m0755-d/etc/apt/keyringscurl-fsSLhttps://download.docker.com/linux/ubuntu/gpg|sudogpg--dearmor-o/etc/apt/keyrings/docker.gpgsudochmoda+r /etc/apt/keyrings/docker.gpg# 4. 添加仓库echo\"deb [arch=$(dpkg --print-architecture)signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \$(./etc/os-release&&echo$VERSION_CODENAME)stable"|\sudotee/etc/apt/sources.list.d/docker.list>/dev/null# 5. 安装 Docker Engine 和 Compose 插件sudoaptupdatesudoaptinstall-ydocker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin# 6. 验证docker--versiondockercompose version# 7. 免 sudo 运行(执行后需要重新登录)sudousermod-aGdocker$USER说明:官方文档 https://docs.docker.com/engine/install/ubuntu/ 也可参考。
三、换源:给国内加速
默认镜像源在国外,国内拉镜像经常慢甚至超时,换成国内镜像源能明显提速。
3.1 Windows(Docker Desktop)
启动 Docker Desktop → 右上角齿轮「设置」→ 左侧「Docker Engine」,在配置里加入registry-mirrors:
{"registry-mirrors":["https://docker.1ms.run","https://docker.xuanyuan.me","https://docker.m.daocloud.io","https://docker.mirrors.ustc.edu.cn","https://mirror.baidubce.com"]}点右下角「Apply & Restart」应用并重启即可。
3.2 Ubuntu / Linux
编辑(或新建)配置文件:
sudovim/etc/docker/daemon.json写入:
{"registry-mirrors":["https://docker.1ms.run","https://docker.xuanyuan.me","https://docker.m.daocloud.io","https://docker.mirrors.ustc.edu.cn","https://mirror.baidubce.com"]}保存后重启 Docker:
sudosystemctl daemon-reloadsudosystemctl restartdocker验证是否生效,看Registry Mirrors字段:
dockerinfo提示:镜像加速地址随时可能失效,Docker 会按列表顺序依次尝试,某条挂了不影响启动,只要列表里还有一条可用就能拉取。上面这组是较新的地址;中科大 https://docker.mirrors.ustc.edu.cn、百度 https://mirror.baidubce.com 这类老牌源也可以一起放进来做备用。至于网易 https://hub-mirror.c.163.com 这种多年没维护的源,建议直接跳过。
四、Docker 常用命令
4.1 镜像管理
| 命令 | 作用 |
|---|---|
docker pull 镜像名:版本 | 拉取镜像(不写版本默认 latest) |
docker images | 查看本地镜像 |
docker rmi 镜像ID/镜像名 | 删除镜像 |
docker search 关键词 | 在 Docker Hub 搜索镜像 |
docker build -t 名称:版本 . | 基于 Dockerfile 构建镜像 |
docker save -o xx.tar 镜像名 | 导出镜像为 tar(离线传输) |
docker load -i xx.tar | 导入镜像 tar |
4.2 容器管理
| 命令 | 作用 |
|---|---|
docker run [参数] 镜像名 | 创建并启动容器(最核心) |
docker ps | 查看运行中的容器(加-a含已停止的) |
docker start/stop/restart 容器名 | 启动 / 停止 / 重启容器 |
docker rm 容器名 | 删除容器(加-f强制删除运行中的) |
docker exec -it 容器名 bash | 进入容器终端 |
docker logs -f 容器名 | 实时查看容器日志 |
docker inspect 容器名 | 查看容器/镜像详细信息(排障用) |
五、入门实战:用容器跑一个 MySQL
不需要在电脑上装 MySQL,直接从镜像启动一个:
# 拉取镜像dockerpull mysql:8.0.45# 启动容器:后台运行,命名 mysql-db,把主机 9999 端口映射到容器 3306dockerrun-d--namemysql-db-p9999:3306-eMYSQL_ROOT_PASSWORD=123456mysql:8.0.45# 查看容器状态dockerps参数说明:
-d:后台运行--name mysql-db:容器命名,方便后续操作-p 9999:3306:端口映射,格式为主机端口:容器端口-e MYSQL_ROOT_PASSWORD=123456:设置 root 密码,MySQL 镜像必须设置
想确认容器里的 MySQL 是否正常,可以进容器用自带的客户端连一下:
dockerexec-itmysql-db mysql-uroot-p123456六、进阶实战:Dockerfile + Docker Compose
实际开发常用这两个工具:Dockerfile 负责构建自定义镜像,Docker Compose 负责管理多个容器。
6.1 编写 Dockerfile
用一个改过首页的 Nginx 演示如何构建自己的镜像:
# 基于 Nginx 官方镜像 FROM nginx:1.27-alpine # 把本地页面复制到镜像的网站目录 COPY index.html /usr/share/nginx/html/index.html # 声明容器对外端口 EXPOSE 80在同一目录下准备一个index.html,然后构建并运行:
dockerbuild-tmy-nginx:v1.dockerrun-d--namemy-nginx-p8080:80 my-nginx:v1打开 http://localhost:8080 就能看到自己的页面。
6.2 编写 docker-compose.yml
用 Compose 把 WordPress 和 MySQL 两个容器一起管理:
services:db:image:mysql:8.0.45restart:alwaysenvironment:MYSQL_ROOT_PASSWORD:"123456"MYSQL_DATABASE:"wordpress"MYSQL_INITDB_ARGS:"--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci"volumes:-./mysql-data:/var/lib/mysqlhealthcheck:test:["CMD","mysqladmin","ping","-h","localhost","-uroot","-p123456"]interval:5stimeout:3sretries:10start_period:10swordpress:image:wordpress:latestrestart:alwaysdepends_on:db:condition:service_healthyenvironment:WORDPRESS_DB_HOST:"db:3306"WORDPRESS_DB_USER:"root"WORDPRESS_DB_PASSWORD:"123456"WORDPRESS_DB_NAME:"wordpress"ports:-"8080:80"要点:
depends_on+condition: service_healthy:等 MySQL 健康检查通过后再启动 WordPress,避免「数据库未就绪」。- 容器之间用服务名(这里是
db)互相访问,不用 IP。 volumes把数据落到本地目录,容器删了数据还在。
6.3 启动与验证
# 一键启动(首次会自动下载镜像)dockercompose up-d# 查看容器状态dockercomposeps# 实时查看日志dockercompose logs-f浏览器打开 http://localhost:8080,能看到 WordPress 安装页,就说明两个容器都跑起来了。
七、Docker Compose 常用命令
| 分类 | 命令 | 作用 |
|---|---|---|
| 启动 | docker compose up -d | 后台启动全部服务 |
| 启动 | docker compose up -d 服务名 | 只启动指定服务 |
| 停止 | docker compose stop | 停止服务(保留容器) |
| 停止 | docker compose down | 停止并删除容器+网络(保留镜像和数据卷) |
| 查看 | docker compose ps | 查看容器状态 |
| 日志 | docker compose logs -f 服务名 | 实时查看指定服务日志 |
| 构建 | docker compose up -d --build | 重建镜像并启动 |
| 执行 | docker compose exec 服务名 bash | 进入容器 |
| 清理 | docker compose down -v | 连数据卷一起删(慎用) |
| 清理 | docker compose down --rmi all | 连镜像一起删(慎用) |
八、常见问题排查
- Win11 启动 Docker 失败,提示 WSL2 未配置:确认虚拟化和 WSL2 功能已开启、WSL 内核已安装,再重启。
- Compose 报 yaml 格式错误:检查缩进必须用空格(不能用 Tab)、冒号后有空格、引号是英文。
- Ubuntu 执行 docker 报权限不足:
sudo usermod -aG docker $USER后重新登录。 - 拉镜像超时:检查 /etc/docker/daemon.json 或 Docker Desktop 里的镜像加速源是否可用。
- 容器起来后马上退出或反复重启:用
docker logs或docker compose logs看日志定位原因,常见是环境变量没配或端口被占用。 - 浏览器打不开站点、提示连不上数据库:先用
docker compose ps确认相关容器都是 Up,再确认depends_on的健康检查已经通过。
九、小结
Docker 用「镜像 → 容器」把环境标准化,解决了环境不一致的问题。单个容器用docker run跑起来,多个容器交给 Docker Compose 编排。日常开发部署,掌握下载安装、换源、常用命令、Dockerfile 和 Compose 这几块基本就够用。