Docker历程


一、部署前的灵魂三问

  1. 镜像是什么?
    Docker 镜像如同软件的"基因蓝图",包含运行所需的所有指令和依赖

  2. 容器是什么?
    容器是镜像的"生命体",一个独立运行的沙盒环境

  3. 为什么需要 Git?
    实现代码与环境的解耦,让容器能动态获取最新版本


二、四步构建你的 Docker 化项目

📝 步骤 1:编写 Dockerfile(部署说明书)
# 选择基础镜像(按需替换)
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 安装Git(关键步骤!)
RUN apt-get update && apt-get install -y git

# 克隆代码仓库(替换为你的地址)
RUN git clone https://github.com/your-account/project-repo.git .

# 安装依赖(示例为Python项目)
RUN pip install -r requirements.txt

# 暴露服务端口
EXPOSE 8080

# 设置启动命令
CMD ["python", "app.py"]

💡 技术点睛:通过 git clone 实现动态代码获取,避免将代码打包进镜像

🔧 步骤 2:构建镜像(创建运行环境)<Bash>
# -t 指定镜像名称,末尾的点表示使用当前目录
docker build -t my-app-image .

<Bash>构建过程解析

  1. 逐层执行 Dockerfile 指令
  2. 下载基础镜像(首次较慢)
  3. 执行 Git 克隆获取代码
  4. 安装依赖项
  5. 生成最终镜像
🚀 步骤 3:启动容器(运行你的应用)<Bash>
docker run -d \
  --name my-running-app \
  -p 8080:8080 \          # 端口映射
  -v ./config:/app/config \ # 配置文件挂载
  my-app-image

参数解读

  • -d:后台运行(detached mode)
  • -p:端口映射(主机端口:容器端口)
  • -v:目录挂载(持久化配置文件)
🔍 步骤 4:验证部署<Bash>
# 查看运行中的容器
docker ps
# 检查容器日志
docker logs my-running-app
# 测试服务访问
curl http://localhost:8080

三、代码更新策略(两种场景方案)

🔄 场景一:开发环境热更新<Bash>
# 进入运行中的容器
docker exec -it my-running-app bash

# 在容器内操作
cd /app
git pull origin main
exit

# 重启容器生效(根据应用类型)
docker restart my-running-app
🧩 场景二:生产环境全量更新<Bash>
# 1. 停止并删除旧容器
docker stop my-running-app && docker rm my-running-app

# 2. 重新构建镜像(自动拉取最新代码)
docker build -t my-app-image .

# 3. 启动新容器
docker run -d --name my-running-app -p 8080:8080 my-app-image

四、高级技巧:提升部署效率

🛡️ 安全加固:私有仓库认证
# Dockerfile 中添加
ARG GIT_TOKEN
RUN git clone https://${GIT_TOKEN}@github.com/your/private-repo.git

构建命令:<Bash>

docker build --build-arg GIT_TOKEN=ghp_xxx -t secure-app .
📦 镜像优化:多阶段构建<Dockerfile>
# 构建阶段
FROM maven:3.8 AS builder
COPY . .
RUN mvn package

# 运行阶段(仅保留必要文件)
FROM openjdk:11-jre
COPY --from=builder /target/app.jar .
CMD ["java", "-jar", "app.jar"]

优势:最终镜像体积减少 70%+

⚙️ 配置管理:环境变量注入
docker run -d \
  -e DB_HOST=mysql.prod \
  -e API_KEY=your-secret-key \
  my-app-image

五、避坑指南:常见问题解决

问题现象 原因分析 解决方案
Permission denied 用户权限不足 执行 sudo usermod -aG docker $USER
git clone 失败 网络隔离 添加 --network host 构建参数
端口冲突 主机端口被占用 更改 -p 参数如 -p 8081:8080
依赖安装失败 国内网络限制 使用镜像源 RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple

🌟 最佳实践总结

  1. 镜像精简原则:使用多阶段构建,删除不必要的文件
  2. 配置分离:敏感信息通过环境变量传递
  3. 版本控制:始终指定基础镜像版本(避免自动升级导致异常)
  4. 健康检查:在 Dockerfile 中添加 HEALTHCHECK 指令
  5. 日志管理:挂载日志目录到主机 /var/log/app
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐