修改并重新部署docker项目流程

使用 Docker 部署的项目在代码有改动后重新部署,通常需要经过以下几个步骤:更新代码、构建新的镜像、运行新的容器。以下是详细的步骤指南。

1. 更新代码

首先,确保代码已经更新到本地仓库或远程仓库中。如果使用的是 Git,可以通过以下命令拉取最新的代码:

bash 复制代码
git pull origin main  # 假设你的分支是 main

2. 修改 Dockerfile(如果需要)

如果代码的改动涉及到了需要修改 Dockerfile 的内容(例如添加新的依赖、修改环境变量等),请确保更新 Dockerfile。

3. 构建新的 Docker 镜像

在项目根目录下运行以下命令来构建新的 Docker 镜像。假设镜像名称为 myproject:

bash 复制代码
docker build -t myproject:latest .
  • -t myproject:latest:指定镜像的名称和标签(latest 是一个常用的标签,表示最新版本)。
  • .:表示当前目录下的 Dockerfile。

4. 停止并移除旧的容器

在运行新的容器之前,需要停止并移除旧的容器。假设容器名称为 myproject-container,运行以下命令:

bash 复制代码
docker stop myproject-container
docker rm myproject-container
  • docker stop:停止正在运行的容器。
  • docker rm:移除已停止的容器。

5. 运行新的容器

使用新的镜像运行一个新的容器。假设容器需要映射端口(例如将容器的 8000 端口映射到宿主机的 8000 端口),可以使用以下命令:

bash 复制代码
docker run -d --name myproject-container -p 8000:8000 myproject:latest
  • -d:表示以守护进程模式运行容器(在后台运行)。
  • --name myproject-container:指定容器的名称。
  • -p 8000:8000:将容器的 8000 端口映射到宿主机的 8000 端口。
  • myproject:latest:指定使用最新的镜像。

6. 检查容器状态

运行以下命令检查容器是否正常运行:

bash 复制代码
docker ps

如果一切正常,应该能看到 myproject-container 正在运行。

7. 验证应用

在浏览器中访问 http://localhost:8000(假设你的应用运行在 8000 端口),检查应用是否正常工作。

8. (可选)清理旧的镜像

如果不再需要旧的镜像,可以通过以下命令清理旧的镜像:

bash 复制代码
docker rmi myproject:旧标签
  • docker rmi:删除镜像。
  • myproject:旧标签:指定要删除的镜像名称和标签。

自动化部署(可选)

如果希望自动化这个过程,可以编写一个简单的脚本,例如 deploy.sh:

bash 复制代码
#!/bin/bash

# 拉取最新代码
git pull origin main

# 构建新的镜像
docker build -t myproject:latest .

# 停止并移除旧的容器
docker stop myproject-container
docker rm myproject-container

# 运行新的容器
docker run -d --name myproject-container -p 8000:8000 myproject:latest

# 输出容器状态
docker ps

然后运行以下命令来执行脚本:

bash 复制代码
chmod +x deploy.sh
./deploy.sh

注意事项

  1. 数据持久化:如果应用需要持久化数据(例如数据库文件、用户上传的文件等),请确保在 Docker 部署中正确配置了数据卷(Volumes)。

  2. 环境变量 :如果应用依赖于环境变量,请确保在运行容器时通过 -e 参数传递正确的环境变量。

  3. 日志 :如果需要查看容器的日志,可以使用以下命令:

    bash 复制代码
    docker logs myproject-container
相关推荐
对象存储与RustFS3 小时前
网盘限速逼你开会员?用 RustFS 自己搭一个不限速的“私人网盘
服务器·后端·docker
程序员老赵6 小时前
Docker 部署 Filestash:轻松搭建浏览器文件管理平台
前端·docker·开源
艾伦_耶格宇6 小时前
【DOCKER容器实战】-5 Docker容器镜像的构建
运维·docker·容器
程序员小孔.9 小时前
基于 SpringBoot + UniApp + Vue 的家政服务系统设计与实现
前端·数据库·spring boot·python·docker·微信小程序
我不会起名字32220 小时前
Redis 从 0 到 1(九):主库宕机 30 秒自动切主——1 主 2 从 3 哨兵 + Go 客户端
redis·docker·sentinel·高可用·哨兵
姜鱼问生1 天前
每次开机手动检查 6 样东西?我写了个 2 秒自检脚本
运维·网络·nginx·docker·容器
wangqiaowq1 天前
PostgresSQL server Docker 安装部署
运维·docker·容器
程序员阿明1 天前
docker搭建视频流服务go2rtc,webRTC
docker·容器·webrtc
TTATTC1 天前
让 16 个 AI 员工在飞书群自我协同:基于 OpenClaw 的多 Agent 敏捷 Squad 拓扑与一人公司实操
docker·开源
TTATTC1 天前
从分片续传到 SPI 插件化扩展:Free-FS 企业级文件系统核心架构与万能预览技术拆解
docker·开源