为了实现从测试服务器(192.168.0.255
)手动热部署到生产环境(172.168.20.100
),可以采用多种方法。以下是详细的步骤和最佳实践,帮助你实现这一目标。
1. 准备生产环境
确保生产环境上的 Docker 和 Docker Compose 已正确安装并配置。
-
安装 Docker:
bash
sudo apt-get update
sudo apt-get install docker.io
2.安装 Docker Compose:
bash
sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep -Po '"tag_name": "\K.*\d')" /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
3、启动并启用 Docker 服务:
bash
sudo systemctl start docker
sudo systemctl enable docker
2. 配置生产环境的 Dockerfile 和 docker-compose.yml
确保生产环境的 Dockerfile
和 docker-compose.yml
文件与测试环境一致,但禁用热部署功能。
Dockerfile 示例:
dockerfile
FROM openjdk:17-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-Dspring.profiles.active=prod", "-jar", "/app.jar"]
docker-compose.yml 示例:
yaml
version: '3'
services:
app:
build:
context: .
dockerfile: Dockerfile
volumes:
- ~/.m2:/root/.m2 # 挂载 Maven 仓库(可选)
ports:
- "8080:8080" # 映射应用端口
environment:
- SPRING_PROFILES_ACTIVE=prod
depends_on:
- db # 如果有依赖数据库等其他服务
3. 在测试服务器上构建 Docker 镜像
在测试服务器上构建 Docker 镜像,并将其推送到私有镜像仓库(如 Docker Hub、Harbor 等),或者直接通过 SSH 将镜像传输到生产服务器。
构建 Docker 镜像:
bash
docker-compose build
标记镜像:
bash
docker tag your-app:latest your-docker-registry/your-app:latest
推送镜像到私有仓库:
bash
docker push your-docker-registry/your-app:latest
4. 从测试服务器传输镜像到生产服务器
如果选择不使用私有镜像仓库,可以直接通过 SSH 将镜像传输到生产服务器。
-
保存镜像为 tar 文件:
bash
docker save -o your-app.tar your-app:latest
2.通过 SSH 传输 tar 文件到生产服务器:
bash
scp your-app.tar user@172.168.20.100:/path/to/remote
3.在生产服务器上加载镜像:
bash
docker load -i /path/to/remote/your-app.tar
5. 在生产服务器上部署 Docker 容器
在生产服务器上使用 docker-compose
部署容器。
-
修改
docker-compose.yml
文件(如果需要):确保
docker-compose.yml
文件中的配置适用于生产环境。 -
启动 Docker 容器:
bash
docker-compose up -d
6. 手动热部署流程
为了实现手动热部署,可以编写一个脚本来简化流程。
手动热部署脚本示例:
-
在测试服务器上构建并传输镜像:
bash
#!/bin/bash
# 构建 Docker 镜像
docker-compose build
# 标记镜像
docker tag your-app:latest your-docker-registry/your-app:latest
# 推送镜像到私有仓库
docker push your-docker-registry/your-app:latest
# 或者保存镜像为 tar 文件并通过 SSH 传输
# docker save -o your-app.tar your-app:latest
# scp your-app.tar user@172.168.20.100:/path/to/remote
2.在生产服务器上拉取并部署镜像:
bash
#!/bin/bash
# 拉取镜像
docker pull your-docker-registry/your-app:latest
# 或者加载 tar 文件
# docker load -i /path/to/remote/your-app.tar
# 停止并移除现有容器
docker-compose down
# 启动新容器
docker-compose up -d
7. 使用 Git 和 CI/CD 流水线(可选)
为了更加自动化地管理代码部署,可以设置 Git 和 CI/CD 流水线。
-
初始化 Git 仓库:
- 在本地项目目录中初始化 Git 仓库。
- 将代码推送到远程 Git 仓库(如 GitHub、GitLab 等)。
-
配置 CI/CD 流水线:
示例 GitLab CI 配置 (
gitlab-ci.yml
):yaml
- 使用 Jenkins、GitLab CI、GitHub Actions 等工具配置流水线。
- 设置流水线任务,在每次推送代码时自动构建镜像并部署到生产环境。
stages:
- build
- deploy
build:
stage: build
script:
- docker-compose build
- docker tag your-app:latest your-docker-registry/your-app:latest
- docker push your-docker-registry/your-app:latest
only:
- main
deploy:
stage: deploy
script:
- ssh user@172.168.20.100 "cd /path/to/remote/project && docker pull your-docker-registry/your-app:latest && docker-compose down && docker-compose up -d"
only:
- main
8. 注意事项
- 安全性:确保生产环境的安全性,使用防火墙、SSH 密钥等手段保护服务器。
- 备份:在部署新版本之前,确保对现有数据进行备份。
- 日志监控:建议使用日志工具(如 ELK Stack)来监控容器内的日志输出,以便快速排查问题。
- 性能测试:在生产环境中部署新版本之前,进行充分的性能测试,确保不会对现有服务造成影响。
通过以上步骤,你应该能够在测试服务器(192.168.0.255
)上手动热部署到生产环境(172.168.20.100
),从而实现高效的开发和部署流程。