Docker容器化技术指南
1. MySQL 容器化部署
1.1 快速启动命令
1 2 3 4 5 6 7 8 9 10
| docker run -d \ --name mysql8 \ -p 3306:3306 \ -e TZ=Asia/Shanghai \ -e MYSQL_ROOT_PASSWORD=your_password \ -v /opt/mysql/conf:/etc/mysql/conf.d \ -v /opt/mysql/data:/var/lib/mysql \ mysql:8.0.34 \ --character-set-server=utf8mb4 \ --collation-server=utf8mb4_unicode_ci
|
1.2 参数解析
| 参数 | 说明 | 扩展知识 |
|---|
-p 3306:3306 | 端口映射(宿主机:容器) | 使用-p 3306:3306/tcp指定协议 |
-e TZ=Asia/Shanghai | 时区设置 | 支持IANA时区列表 |
--character-set-server | 字符集配置 | 推荐使用utf8mb4支持完整Unicode |
2. Docker 核心命令手册
2.1 镜像管理
镜像操作
1 2 3 4 5
| docker pull ubuntu:22.04 docker image ls docker image prune docker save -o backup.tar nginx docker load -i backup.tar
|
2.2 容器管理
生命周期管理
1 2 3 4 5 6
| docker run -it --rm ubuntu bash docker start/stop/restart [容器] docker rm $(docker ps -aq) docker ps
|
信息查看
1 2 3
| docker stats docker inspect [容器] | grep IP docker diff [容器]
|
2.3 运维命令
日志管理
1 2
| docker logs -f --tail 100 [容器] docker logs --since 10m [容器]
|
故障排查
1 2
| docker exec -it mysql bash docker cp file.txt [容器]:/path
|

3. 存储与数据卷
3.1 存储类型对比
| 类型 | 特点 | 适用场景 |
|---|
| 匿名卷 | 自动创建随机命名 | 临时测试 |
| 命名卷 | 持久化存储,易管理 | 数据库存储 |
| 绑定挂载 | 直接映射宿主机目录 | 配置文件管理 |
3.2 高级存储方案
使用只读卷(适合配置文件)
1
| docker run -v /path/config:/etc/nginx:ro nginx
|
多容器共享数据卷
1 2 3
| docker volume create app_data docker run -v app_data:/data backend docker run -v app_data:/data frontend
|

4. 镜像构建实践
Dockerfile是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。Docker可以根据Dockerfile帮我们构建镜像。
4.1 常见Dockerfile指令
| 指令 | 说明 | 示例 |
|---|
| FROM | 指定基础镜像 | FROM centos:6 |
| ENV | 设置环境变量,可在后面指令使用 | ENV key value |
| COPY | 拷贝本地文件到镜像的指定目录 | COPY ./jrell.tar.gz /tmp |
| RUN | 执行Linux的shell命令,一般是安装过程的命令 | RUN tar -zxvf /tmp/jrell.tar.gz && export PATH=/tmp/jrell:$PATH |
| EXPOSE | 指定容器运行时监听的端口,是给镜像使用者看的 | EXPOSE 8080 |
| ENTRYPOINT | 镜像中应用的启动命令,容器运行时调用 | ENTRYPOINT java -jar xx.jar |
4.2 推荐Dockerfile模板
多阶段构建示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
FROM maven:3.8.6 AS build
COPY src /app/src
COPY pom.xml /app
RUN mvn -f /app/pom.xml clean package
FROM eclipse-temurin:17-jre
COPY --from=build /app/target/*.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]
|
4.3 构建优化技巧
- 使用
.dockerignore文件排除无用文件 - 多阶段构建减小镜像体积(从3GB优化到300MB)
- 固定基础镜像版本(避免自动更新导致的不兼容)
- 非root用户运行(增强安全性):
1 2
| RUN groupadd -r appuser && useradd -r -g appuser appuser USER appuser
|
4.4 构建后运行常用命令
1 2 3 4 5
| docker build -t testupd . docker run -d --name testudp -p 8081:8081/tcp testudp docker stop testudp docker rm testudp docker rmi testudp
|
5. 生产环境最佳实践
5.1 容器编排建议
docker-compose.yml 示例
1 2 3 4 5 6 7 8 9 10
| version: "3.8" services: mysql: image: mysql:8.0.34 deploy: resources: limits: memory: 2g healthcheck: test: mysqladmin ping -h 127.0.0.1 -u root
|
5.2 监控与日志
1
| docker run --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3
|
- 推荐监控工具:
- cAdvisor:容器资源监控
- Prometheus + Grafana:可视化监控
- ELK Stack:日志分析系统
附录:实用资源
- Docker 官方文档
- Dockerfile 最佳实践
- OCI 镜像规范
- 容器安全扫描工具