Docker入门到部署:从零基础到项目实战
一、Docker概述
1.1 什么是Docker?
Docker是一个开源的容器化平台,用于快速构建、运行和管理应用程序。它通过镜像和容器技术实现应用的快速部署与隔离运行,解决了"在我机器上能跑"的环境一致性问题。
1.2 核心概念对比
| 概念 | 说明 | 类比 |
|---|---|---|
| 镜像(Image) | 包含应用及其运行环境、配置的只读模板,类似于安装包 | 软件安装程序(.exe) |
| 容器(Container) | 镜像的运行实例,是隔离的进程空间 | 正在运行的程序 |
| 数据卷(Volume) | 容器与宿主机间的数据共享机制,实现数据持久化 | 移动硬盘 |
| 仓库(Repository) | 存储和分发镜像的服务,Docker Hub是官方公共仓库 | 应用商店 |

二、Docker基础操作
2.1 安装与配置
以CentOS为例:
bash
# 卸载旧版本
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
# 安装依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装Docker
sudo yum install docker-ce docker-ce-cli containerd.io
# 启动服务
sudo systemctl start docker
sudo systemctl enable docker
2.2 常用命令速查表
| 命令 | 作用 | 示例 |
|---|---|---|
docker pull | 拉取镜像 | docker pull nginx:1.21 |
docker images | 查看本地镜像 | docker images -a |
docker run | 创建并运行容器 | docker run -d --name mynginx -p 80:80 nginx |
docker ps | 查看运行中的容器 | docker ps -a |
docker exec | 进入运行中的容器 | docker exec -it mynginx bash |
docker stop | 停止容器 | docker stop mynginx |
docker rm | 删除容器 | docker rm mynginx |
docker rmi | 删除镜像 | docker rmi nginx:1.21 |
docker logs | 查看容器日志 | docker logs -f mynginx |
三、核心功能实战
3.1 数据卷管理
创建并挂载数据卷:
bash
# 创建数据卷
docker volume create myvol
# 查看数据卷详情
docker volume inspect myvol
# 挂载数据卷运行容器
docker run -d --name mysql -v myvol:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 mysql:5.7
# 清理未使用数据卷
docker volume prune
3.2 网络配置
bash
# 创建自定义网络
docker network create mynet
# 查看网络列表
docker network ls
# 将容器连接到网络
docker network connect mynet mysql
# 断开网络连接
docker network disconnect mynet mysql
四、自定义镜像构建
4.1 Dockerfile详解
示例:构建Java应用镜像
dockerfile
# 第一阶段:构建环境
FROM maven:3.8.5 AS build
WORKDIR /app
COPY pom.xml .
RUN mvn dependency:go-offline
COPY src ./src
RUN mvn package -DskipTests
# 第二阶段:运行环境
FROM openjdk:11-jre-slim
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
构建命令:
bash
docker build -t myjavaapp:1.0 .
4.2 多阶段构建优势
- 减小最终镜像体积(只包含运行时环境)
- 构建过程更安全(不包含构建工具)
- 优化构建缓存(分层构建)
五、项目部署实战
5.1 单容器部署MySQL
bash
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v ./mysql/data:/var/lib/mysql \
-v ./mysql/conf:/etc/mysql/conf.d \
mysql:8.0
5.2 Docker Compose多容器编排
docker-compose.yml示例:
yaml
version: "3.8"
services:
mysql:
image: mysql:8.0
container_name: mysql
ports:
- "3306:3306"
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123
volumes:
- "./mysql/data:/var/lib/mysql"
- "./mysql/conf:/etc/mysql/conf.d"
networks:
- mynet
app:
build: .
container_name: myapp
ports:
- "8080:8080"
depends_on:
- mysql
networks:
- mynet
nginx:
image: nginx:1.21
container_name: nginx
ports:
- "80:80"
volumes:
- "./nginx/conf:/etc/nginx/conf.d"
- "./nginx/html:/usr/share/nginx/html"
depends_on:
- app
networks:
- mynet
networks:
mynet:
name: myapp-network
常用命令:
bash
# 启动所有服务
docker compose up -d
# 查看服务状态
docker compose ps
# 停止服务
docker compose down
# 查看日志
docker compose logs -f app
六、最佳实践建议
-
镜像优化:
- 使用
.dockerignore文件排除无关文件 - 多阶段构建减小镜像体积
- 合并RUN指令减少镜像层数
- 使用
-
安全建议:
- 不要使用root用户运行容器
- 定期更新基础镜像
- 限制容器资源使用(CPU/内存)
-
生产环境建议:
- 使用容器编排工具(Kubernetes)
- 实现日志集中管理
- 设置健康检查机制
通过本文的学习,您已经掌握了Docker从基础到项目部署的全流程。Docker技术正在成为现代应用开发和部署的标准工具,掌握它将大大提升您的开发效率和部署能力。
Docker从入门到项目实战
1131

被折叠的 条评论
为什么被折叠?



