在使用 Docker 的过程中, 发包时可能需要添加版本号, 同时发布到最新版本 latest
标签下, 所以直接将 Dockerfile 编写到脚本内, 以解决一条命令实现发包到对应版本及最新版本, 和对应配置文件的功能, 步骤如下
- 进入项目目录获取 Git Tag 版本号(可以根据自身情况修改)
- 根据包名获取对应配置信息
- 校验配置信息是否存在, 不存在则退出
- 输出当前包名/配置及 commit log
- 生成环境对应的配置文件
- 打包并生成镜像
- 上传版本镜像/覆盖最新镜像
该脚本可用于快速封包并上传Docker镜像服务器, 并获取版本, 大概步骤如下:
使用Docker的同学, 简单改改就可以上手使用了
发包脚本
build.sh
, 无需单独的dockerfile文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
set -e # 严格模式
cd $(dirname $0) # 进入目录
# git pull # 拉取代码
URL="registry.云.com" # Docker 地址
NAMESPACE="namespace" # Docker 仓空间
VERSION=$(git describe --tags $(git rev-list --tags --max-count=1)) # 获得版本
PACKAGE=$1:${VERSION:=latest} # 包名称
NOW="$(date +"%y%m%d_%H%M%S")" # 打包时间
declare -A SETTINGS # ...
SETTINGS=(
[test]="from .config_test import *" # 测试环境
)
[ ! "${SETTINGS[$1]}" ] && echo "未指定配置或配置不存在!" && exit # 校验
echo -e "[package]:\033[41;37m $PACKAGE \033[0m"
echo -e "[setting]:\033[43;30m ${SETTINGS[$1]} \033[0m"
echo -e "\033[46;30m$(git log -n 1) \033[0m"
# **************************************** 开始 ****************************************
cat >./local_settings.py <<EOF
# $1
${SETTINGS[$1]}
EOF
# # 创建Docker文件
cat >"./Dockerfile.$NOW" <<EOF
FROM dipcode/centos7-python36
WORKDIR /service
RUN yum install -y curl vim
COPY ./requirement.txt /service/requirement.txt
RUN pip install --upgrade pip -i https://pypi.douban.com/simple/ && pip install -r /service/requirement.txt -i https://pypi.douban.com/simple/
# 启动
COPY ./ /service/
CMD gunicorn -c gunicorn_conf.py -b 0.0.0.0:16688 example.wsgi:application
EOF
docker login # 登录
docker build ./ -f "./Dockerfile.$NOW" -t $URL/$NAMESPACE/$PACKAGE # 创建版本镜像
docker push $URL/$NAMESPACE/$PACKAGE # 上传
docker tag $URL/$NAMESPACE/$PACKAGE $URL/$NAMESPACE/$1:latest # 更新 latest
docker push $URL/$NAMESPACE/$1:latest # 上传 latest
docker rmi $URL/$NAMESPACE/$PACKAGE # 删除
rm -rf "./Dockerfile.$NOW" # 删除文件
echo -e "\033[46;30m $PACKAGE \033[0m 打包完成. $(date) "
SETTINGS
是配置文件的信息, 基于 declare -A
定义的字典变量, 根据包名和获取配置信息, 将配置信息写入到工程目录下
Mac注意升级bash版本以支持 declare -A
命令
1
bash build.sh 包名