容器化部署服务,实现重启服务自动拉取最新代码部署

背景

为了让更多人使用我自己开发的服务,我选择了容器化的方式进行部署。然而,每次服务代码更新后,都需要重新制作镜像进行部署,这样的流程显得十分繁琐。因此,我希望能够在代码仓库更新后,简单处理一下,就能自动拉取最新代码进行部署和测试。

经过对容器相关知识的了解,我发现可以实现这一需求。

解决方案

在 Docker 创建容器的命令中,可以支持在容器内执行指定的脚本,这个脚本在容器每次启动或者重启后自动执行。因此,我们可以编写一个脚本,实现自动拉取最新代码并进行安装部署。
例如(main.sh):

#!/bin/bash

# 代码分支
export code_branch=master

echo '拉取最新代码'
rm -rf Demo/
git clone -b ${code_branch} --depth=1 http://oauth2:t9sTVEuCWcL-m1fHsbG_@mq.code.xxx.org/Devops/Demo.git

# 删除 临时目录 报告目录 日志目录...
rm -rf ./Demo/tempdirs ./Demo/reports ./Demo/log

# 复制到工作空间
cp -rf ./Demo/* .

# 删除源代码
rm -rf Demo/

echo 'kill 旧进程'
# 过滤出指定程序的进程号 杀死指定程序的进程
pid=$(ps aux | grep 'python3 ./app.py' | grep -v grep | awk '{print $2}')
if [ -n "$pid" ]; then
    kill -9 $pid
fi


# 创建临时文件夹
if [ ! -d "./tempdirs" ]; then
  mkdir tempdirs
fi

# 创建报告文件夹
if [ ! -d "./reports" ]; then
  mkdir reports
fi

echo '安装依赖'
pip3 install -r ./requirements.txt

echo '启动服务'
python3 ./app.py

可以将上述main.sh 脚本放置在执行机器 /home/Demo目录下,然后将该目录挂载到容器内,容器内执行的命令为 sh main.sh 这样每次启动或者重启容器,都会自动拉取最新代码进行部署,如果需要修改部署代码分支,只需要修改main.sh脚本中的分支参数后重启容器即可

容器命令

docker run -it -v /home/Demo:/Demo -w /Demo -p 8123:8123 --name Demo_server docker.xxx.com/cicd_0001/py2_and_py3:v1 sh main.sh

各部分解释

  1. docker run: 这是 Docker 的命令,用于创建并运行一个新的容器。
  2. -it: 这两个选项结合使用,-i 表示以交互模式运行容器(保持标准输入打开),-t 表示分配一个伪终端(TTY)。这通常用于需要用户交互的场景。
  3. -v /home/Demo:/Demo: 这个选项用于挂载卷(volume)。它将宿主机的 /home/Demo 目录挂载到容器内的 /Demo 目录。这样,容器内的应用可以访问宿主机上的文件。
  4. -w /Demo: 这个选项设置容器的工作目录为 /Demo。这意味着在容器启动后,所有的命令都会在这个目录下执行。
  5. -p 8123:8123: 这个选项用于端口映射。它将宿主机的 8123 端口映射到容器的 8123 端口。这使得外部可以通过宿主机的 8123 端口访问容器内的服务。
  6. –name Demo_server: 这个选项为容器指定一个名称 Demo_server。这样可以方便地通过名称来管理和引用这个容器。
  7. docker.xxx.com/cicd_0001/py2_and_py3:v1: 这是要运行的 Docker 镜像的名称和标签。它指定了从哪个镜像创建容器。在这个例子中,镜像位于 docker.xxx.com 的私有仓库中,名称为 cicd_0001/py2_and_py3,版本为 v1。
  8. sh main.sh: 这是在容器内执行的命令。它会运行 main.sh 脚本,sh 是用于执行 shell 脚本的命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

X1A0RAN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值