# 打包
docker/ 文件夹下存放了镜像打包相关的脚本和 Dockerfile。
通过这些脚本,可以打出基于基础镜像2.x (opens new window)并且符合docker镜像命名规范v1.0 (opens new window)的镜像文件。
请注意,这些规范是 STRONG 的等级,因此无论开发者对内置的脚本怎么进行修改,都必须使用基础镜像,并且要符合 tag 的规范。
# utils.sh
utils.sh 是整个打包工具的核心,在使用脚手架工具生成模版时,我们在 docker 项中选择的大部分变量都会写入到这个文件中作为默认的配置。
如果我们需要手动构建镜像,只需要
#!/usr/bin/env bash
source utils.sh
build_and_push
就可以使用默认的参数进行构建了。
内置的 build.sh 脚本也是通过这个方式进行封装的。
同时,utils.sh 还支持一些额外的参数,可以复写默认的配置,比如添加 --arch arm
选项来打 arm 架构的镜像,使用 --env
来打 dev 还是 release 的镜像。
TIP
dev 和 release 镜像的区分见: wiki (opens new window)
#!/usr/bin/env bash
source utils.sh
parser_command --arch arm --env dev
build_and_push
或者只打镜像,不推送
#!/usr/bin/env bash
source utils.sh
parser_command --no-push
build_and_push
更多用法详见 utils.sh 脚本内部的说明。
当然,也可以直接使用 build.sh 脚本来进行构建,更加简单
bash docker/build.sh --arch arm --env dev --no-push
WARNING
如果在 MacOS 上没有办法手动运行脚本进行镜像的构建,可能需要安装 gnu-getopt
brew install gnu-getopt
brew link --force gnu-getopt
# Dockerfile
使用 utils.sh 或者 build.sh 脚本解析构建参数后,最终会使用到 Dockerfile 文件进行构建。
目前的 Dockerfile 比较简单,主要就是安装依赖和设置环境变量,值得一提的是,本 Dockerfile 在每次构建时都会去尝试更新软件 (opens new window)操作,以防止高危漏洞的产生。
TIP
具体做法是运行基础镜像里的 ${DATAGRAND_USER_HOME}/_dg_runtime_scripts/install_package.sh
脚本
开发者可以根据实际情况去修改构建的步骤与脚本,请参考基础镜像接入指南 (opens new window)来查看如何在基础镜像上再做定制。
比如你需要在运行 gunicorn 前进行一些额外的操作,可以使用 基础镜像钩子 (opens new window)。开发者可以将需要执行的脚本放在 deploy/ 文件夹下,再对 Dockerfile 进行定制化,最后将脚本 COPY 到对应的文件夹。
Dockerfile 后续也会更新,比如尝试去集成 healthcheck 等。
# test.sh / Dockerfile.test
test.sh 和 Dockerfile.test 可以用来构建并启动一个临时的测试镜像来运行 pytest。test.sh 脚本会自动清除运行的容器和临时构建的镜像。
当然,开发者也可以在本地进行测试脚本,比如:
bash docker/test.sh --arm arm # 构建 arm 镜像并运行 pytest
这个脚本前已经集成在 CI 中,如果不需要测试直接发起构建的话可以在 ci 文件中去除。