Docker 部署指南
Docker 中的三个概念,镜像(Image)、容器(Container)、仓库(Repository)。
核心概念
| 概念 | 说明 |
|---|---|
| 镜像 (Image) | 只读模板,包含运行应用所需的一切 |
| 容器 (Container) | 镜像的运行实例 |
| 仓库 (Repository) | 存放镜像的地方(Docker Hub、阿里云等) |
Docker 安装
Windows
- 下载 Docker Desktop
- 启用 WSL 2 或 Hyper-V
- 运行安装程序
Linux (Ubuntu)
# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 安装依赖
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
# 添加 Docker 官方 GPG key
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# 添加 Docker 仓库
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" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 启动 Docker
sudo systemctl start docker
sudo systemctl enable docker
验证安装
docker --version
docker run hello-world
常用命令
镜像操作
# 拉取镜像
docker pull nginx:latest
# 列出本地镜像
docker images
# 删除镜像
docker rmi nginx:latest
# 构建镜像
docker build -t myapp:1.0 .
# 导出镜像
docker save -o myapp.tar myapp:1.0
# 导入镜像
docker load -i myapp.tar
容器操作
# 运行容器
docker run -d -p 80:80 --name web nginx
# 列出运行中的容器
docker ps
# 列出所有容器
docker ps -a
# 停止容器
docker stop web
# 启动容器
docker start web
# 重启容器
docker restart web
# 删除容器
docker rm web
# 进入容器
docker exec -it web /bin/bash
# 查看日志
docker logs web
# 查看容器详情
docker inspect web
网络操作
# 列出网络
docker network ls
# 创建网络
docker network create mynet
# 连接网络
docker network connect mynet web
# 断开网络
docker network disconnect mynet web
# 查看网络详情
docker network inspect mynet
数据卷操作
# 创建卷
docker volume create mydata
# 列出卷
docker volume ls
# 删除卷
docker volume rm mydata
# 使用卷运行容器
docker run -d -v mydata:/data --name web nginx
Docker Compose
安装
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
示例:FreeKit 全栈部署
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: freekit-mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: freekit
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
- ./docker/mysql/conf:/etc/mysql/conf.d
command: --default-authentication-plugin=mysql_native_password
redis:
image: redis:7-alpine
container_name: freekit-redis
ports:
- "6379:6379"
volumes:
- redis-data:/data
command: redis-server --appendonly yes --requirepass 123456
api:
build:
context: .
dockerfile: src/Services/Host/FreeKit.Host/Dockerfile
container_name: freekit-api
ports:
- "5000:80"
depends_on:
- mysql
- redis
environment:
- ASPNETCORE_ENVIRONMENT=Production
- ConnectionStrings__MySql=Server=mysql;Port=3306;Database=freekit;Uid=root;Pwd=123456;
- ConnectionStrings__Redis=redis:6379,password=123456,defaultDatabase=0
web:
image: nginx:alpine
container_name: freekit-web
ports:
- "80:80"
volumes:
- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
- ./docs-site/build:/usr/share/nginx/html
depends_on:
- api
volumes:
mysql-data:
redis-data:
常用命令
# 启动所有服务
docker-compose up -d
# 停止所有服务
docker-compose down
# 查看日志
docker-compose logs -f
# 重新构建
docker-compose build
# 扩展服务
docker-compose up -d --scale api=3
最佳实践
| 原则 | 说明 |
|---|---|
| 使用多阶段构建 | 减小镜像体积 |
| 使用 .dockerignore | 排除不需要的文件 |
| 不要以 root 运行 | 使用非 root 用户 |
| 健康检查 | 添加 HEALTHCHECK 指令 |
| 清理缓存 | 减少层数,清理不需要的包 |
故障排查
| 问题 | 解决方案 |
|---|---|
| 容器无法启动 | 检查端口占用、日志 |
| 网络不通 | 检查 Docker 网络配置 |
| 数据丢失 | 使用数据卷持久化 |
| 镜像拉取失败 | 配置国内镜像源 |
| 磁盘空间不足 | 清理无用镜像和容器 |