跳到主要内容

Docker 部署指南

Docker 中的三个概念,镜像(Image)、容器(Container)、仓库(Repository)。

核心概念

概念说明
镜像 (Image)只读模板,包含运行应用所需的一切
容器 (Container)镜像的运行实例
仓库 (Repository)存放镜像的地方(Docker Hub、阿里云等)

Docker 安装

Windows

  1. 下载 Docker Desktop
  2. 启用 WSL 2 或 Hyper-V
  3. 运行安装程序

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 网络配置
数据丢失使用数据卷持久化
镜像拉取失败配置国内镜像源
磁盘空间不足清理无用镜像和容器

相关文档