自写自用的docker推送到私有库的shell脚本

提供2个版本,一个是不需要编译直接推送的语言(如:PHP),一个是需要编译,将编译后的代码推送的语言(如:前端工程化),按需自取,windows下可以通过wsl执行,不展开。类unix系统直接执行shell脚本即可!

2023年12月7日 更新

如果是前端项目,有在 package.json 内配置版本号的习惯,可以将下面的 imageVersion 改为如下内容,这样即可自动获取 package.json 内的版本号,而无需修改多处版本号!

imageVersion=$(grep -o '"version": *"[^"]*"' package.json | sed 's/"version": *"\([^"]*\)"/\1/');

脚本分享

无需编译直接推送的语言版本

#/bin/bash

imageName=
imageVersion=
remoteRegistryUrl=

echo "镜像名:${imageName}"
echo "提交版本号:${imageVersion}"
echo "远程仓库地址:${remoteRegistryUrl}"
echo "====="
echo "为避免误操作,延时3秒后开始提交..."
echo "====="

sleep 3

docker build -t ${remoteRegistryUrl}/${imageName}:${imageVersion} .
docker push ${remoteRegistryUrl}/${imageName}:${imageVersion}

echo "====="
echo "推送完毕!当前远程仓库 ${remoteRegistryUrl} 下 ${imageName} 包含如下标签"
curl -X GET http://${remoteRegistryUrl}/v2/${imageName}/tags/list

exit

需要编译且将编译后的代码提交到仓库

#/bin/bash

imageName=
imageVersion=
remoteRegistryUrl=

echo "镜像名:${imageName}"
echo "提交版本号:${imageVersion}"
echo "远程仓库地址:${remoteRegistryUrl}"
echo "====="
echo "为避免误操作,延时3秒后开始提交..."
echo "====="

sleep 3

echo "开始打包前端项目..."
sleep 1
npm run build

echo "开始本地构建任务,构建完毕后将自动推送..."
sleep 1
docker build -t ${remoteRegistryUrl}/${imageName}:${imageVersion} .
docker push ${remoteRegistryUrl}/${imageName}:${imageVersion}

echo "====="
echo "推送完毕!当前远程仓库 ${remoteRegistryUrl} 下 ${imageName} 包含如下标签"
curl -X GET http://${remoteRegistryUrl}/v2/${imageName}/tags/list

exit

Dockerfile 分享

后端配置(ThinkPHP)

FROM webdevops/php-nginx:8.0-alpine
WORKDIR /app
COPY . /app
COPY conf/nginx /opt/docker/etc/nginx
ENV WEB_DOCUMENT_INDEX="index.php index.html"
ENV WEB_DOCUMENT_ROOT="/app/public"
ENV SERVICE_NGINX_CLIENT_MAX_BODY_SIZE="10m"
ENV PHP_DATE_TIMEZONE="Asia/Shanghai"
ENV PHP_DISPLAY_ERRORS=1
ENV PHP_MEMORY_LIMIT="128m"
ENV PHP_MAX_EXECUTION_TIME=60
ENV PHP_POST_MAX_SIZE="10m"
ENV PHP_UPLOAD_MAX_FILESIZE="10m"
ENV COMPOSER_VERSION=2
RUN composer2 install -d /app && cp /app/.example.env /app/.env
EXPOSE 80
EXPOSE 443

前端分享(工程化项目)

FROM nginx
WORKDIR /usr/share/nginx/html
COPY dist /usr/share/nginx/html
EXPOSE 80