Docker 快速上手教程
Docker 快速上手建议按"装好 → 跑通 hello-world → 跑一个 Nginx → 写 Dockerfile → 用 Compose 编排"这条主线,20 分钟就能跑通完整流程。
1. 安装 Docker
macOS(你当前环境)
# 方式一:Homebrew(推荐)
brew install --cask docker
# 方式二:手动安装
# 去 docker.com/products/docker-desktop 下载 Apple Silicon 版本,拖入 Applications启动 Docker Desktop,等状态栏鲸鱼图标变绿即可。验证:
docker --version
docker run hello-world看到 Hello from Docker! 即成功。
Windows
# 管理员 PowerShell
wsl --install
wsl --set-default-version 2然后下载 Docker Desktop for Windows,安装时勾选 "Use WSL 2 instead of Hyper-V"。
Linux(Ubuntu)
sudo apt update
sudo apt install -y docker.io docker-compose-v2
sudo systemctl enable --now docker
sudo usermod -aG docker $USER # 免 sudo,需重新登录国内服务器建议配镜像加速,编辑 /etc/docker/daemon.json:
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.1ms.run"
]
}2. 核心概念一句话
| 概念 | 类比 |
|---|---|
| 镜像(Image) | 软件安装包 / 类 |
| 容器(Container) | 运行中的实例 / 对象 |
| 仓库(Registry) | App Store / Docker Hub |
| Dockerfile | 安装说明书 |
| Compose | 多服务编排剧本 |
3. 跑第一个容器:Nginx
# 拉镜像
docker pull nginx:1.27-alpine
# 后台运行,8080 映射到容器 80
docker run -d --name my-nginx -p 8080:80 nginx:1.27-alpine
# 浏览器打开 http://localhost:8080 看到 Welcome to nginx!常用运维命令:
docker ps # 查看运行中的容器
docker logs -f my-nginx # 实时看日志
docker exec -it my-nginx sh # 进入容器内部
docker stop my-nginx # 停止
docker rm my-nginx # 删除
docker images # 查看本地镜像
docker system df # 看磁盘占用
docker system prune # 清理无用资源4. 写一个 Dockerfile
创建项目目录 my-app/:
my-app/
├── Dockerfile
└── index.htmlindex.html:
<h1>Hello from my Docker image!</h1>Dockerfile:
FROM nginx:1.27-alpine
COPY index.html /usr/share/nginx/html/index.html
EXPOSE 80构建并运行:
cd my-app
docker build -t my-app:v1 .
docker run -d --name my-app -p 8081:80 my-app:v1访问 http://localhost:8081 即可看到自定义页面。
Dockerfile 最佳实践:
- 基础镜像尽量用
alpine或slim减小体积 - 多阶段构建(
FROM ... AS builder→FROM ...)分离编译和运行 - 用
.dockerignore排除node_modules、.git等 - 不要以 root 运行应用(
USER appuser)
5. 数据持久化:Volume
容器删除后数据会丢失,必须用 Volume 或挂载目录:
# 挂载宿主机目录
docker run -d --name db \
-v $(pwd)/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=secret \
mysql:8.4
# 或用命名 Volume(推荐)
docker volume create mysql-data
docker run -d --name db \
-v mysql-data:/var/lib/mysql \
mysql:8.46. Docker Compose 多服务编排
docker-compose.yml:
services:
web:
build: .
ports:
- "8080:80"
depends_on:
- db
db:
image: postgres:16-alpine
environment:
POSTGRES_PASSWORD: secret
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:一键启动/停止:
docker compose up -d # 后台启动所有服务
docker compose logs -f # 看所有服务日志
docker compose down # 停止并删除容器
docker compose down -v # 连 Volume 一起删(谨慎!)7. 生产环境要点
- 锁版本:
nginx:1.27-alpine而非nginx:latest - 资源限制:
--memory="512m" --cpus="1.0"防止拖垮宿主机 - 日志轮转:在
daemon.json中配置log-driver: json-file+max-size - 健康检查:Dockerfile 中加
HEALTHCHECK,Compose 中用healthcheck - 安全:敏感信息用环境变量或 secret,不要硬编码在镜像里