编写一个自动部署Docker镜像的脚本

背景

        温馨提示:该工具仅用于Docker自动构建&部署容器,及提供思路参考。请大佬们直接略过!!!

        前一段时间,前端小伙伴根据需求用Vue3+NodeJS整了一个项目,服务器用Docker拉起项目 运行环境服务。至此以为协助工作到此为止,结果....

        在某天风和日丽的早上,前端小伙伴让我用最新镜像包,构建NodeJS容器。经过沟通NodeJS后端服务,需要频繁开发。为了从这个“深坑”脱离,解放双手,故绞尽脑汁想个法子解决。

        注:服务器只能内网(经历相似情况,就知道蛋有多疼),且账号授权申请登陆贼麻烦

思路

  1. 本地打包最新镜像,且推送服务器。
  2. 通过PHP,执行.sh
  3. 自动构建,且启动容器

实现

        假设已部署Docker,并且已启动Nginx、PHP服务哈

        注:关于内网如何部署Docker,敬请期待


本地Docker镜像打包流程

# 构建镜像
docker build -t 镜像名:版本 .

# 查询镜像
docker images

# 导出镜像
docker save 镜像ID > 存放目录/xxx.tar

 【服务器】编写.sh

#!/bin/bash

IMAGE_NAME="镜像名称"

# 查询容器ID
CONTAINER_ID=$(docker ps -qf "name=$IMAGE_NAME")

# 根据是否启动容器,执行删除命令
if [ -z "$CONTAINER_ID" ]; then
    docker rmi $IMAGE_NAME
else
    docker rm -f $CONTAINER_ID
    docker rmi $IMAGE_NAME
fi

# 导入镜像
docker load < 新上传的镜像目录/xxx.tar

# 启动容器命令,设置端口/开机自启
docker run -i -t -d -p 80:80 --restart=always --name=$IMAGE_NAME xxx:latest

echo "Successful"

 【服务器】PHP容器挂载&源码

本示例,通过PHP的exec函数执行.sh,外部是无法直接运行.sh!!!当然可以使用其他语言代替哈

注:需要将宿主机存放的镜像包目录、.sh文件挂载到PHP容器中

<?php
header('Content-Type:application/json; charset=utf-8');

// 自定义参数验证等
if ($_GET['token'] != 'xxxx') {
    exit(json_encode([
        'code' => 500,
        'msg' => '无效的密钥'
    ]));
}

//要执行的命令
$command = 'sh xxx.sh 2>&1';

$output = []; 
$return_status = 0;
exec($command, $output, $return_status);

$code = 500;
$res = [];
if ($return_status == 0) {
    // 输出执行结果  
    $res = array_merge(['构建成功:'], $output);
    $code = 200;
}

exit(json_encode([
    'code' => $code,
    'msg' => implode(PHP_EOL, $res)
]));

总结

        保持学习的热情,尝试新的方法和技术,不断提高工作效率。

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Jenkins构建后部署Docker镜像,您可以按照以下步骤进行配置: 1. 安装Docker:确保Jenkins所在的主机已经安装了Docker。您可以根据操作系统的不同,使用适当的方式来安装Docker。 2. 在Jenkins中安装相关插件:打开Jenkins的管理界面,导航到"Manage Jenkins" -> "Manage Plugins"。在“可选插件”选项卡中搜索并安装"Docker Pipeline"插件和"CloudBees Docker Build and Publish"插件。 3. 配置Docker凭证:在Jenkins的管理界面中,导航到"Credentials" -> "System" -> "Global credentials (unrestricted)"。点击"Add Credentials",选择"Docker Host Certificate Authentication"或"Docker Registry Authentication",然后填写相应的凭证信息。 4. 创建Jenkins Pipeline任务:在Jenkins的主界面中,点击"New Item"创建一个新的Pipeline任务。在Pipeline定义中,可以使用Groovy语法编写构建和部署步骤。 5. 在Pipeline脚本中定义构建和部署步骤:在Pipeline脚本中,您可以使用Docker Pipeline插件提供的方法来构建和部署Docker镜像。例如,您可以使用docker.build()方法来构建镜像,使用docker.withRegistry()方法来推送镜像Docker仓库。 以下是一个简单的Pipeline脚本示例: ```groovy pipeline { agent any stages { stage('Build') { steps { script { docker.build('my-docker-image') } } } stage('Deploy') { steps { script { docker.withRegistry('https://docker-registry.example.com', 'my-docker-credentials') { docker.image('my-docker-image').push() } } } } } } ``` 在上述示例中,"my-docker-image"是要构建和部署Docker镜像的名称。您可以根据实际情况进行修改。 6. 保存并触发构建:保存Pipeline任务配置后,您可以手动触发构建,或者设置自动触发条件,例如代码提交到版本控制库时触发构建。 配置完成后,Jenkins将会在构建过程中自动构建Docker镜像,并将其部署到指定的Docker仓库中。您可以根据需要进行定制和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值