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

文章讲述了前端开发者如何在内网环境下,利用Docker构建和部署NodeJS应用,通过本地打包镜像并使用PHP脚本自动化启动和管理容器的过程,以提高开发效率。

背景

        温馨提示:该工具仅用于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)
]));

总结

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值