镜像仓库
镜像仓库有好些地方可以存,大部分的公有云均提供免费的镜像仓库,常见如下:
打包上传shell脚本
统一打包流程,每个项目中添加make.sh脚本文件,一个典型的make文件如下:
#!/bin/sh
echo "开始制作镜像..."
image_tag=`date +%Y%m%d` #_%H%M
echo "当前时间:$image_tag"
docker build -t ccr.ccs.xxx.com/abc/api:v${image_tag} .
echo "制作镜像成功!"
echo "登录"
docker login
echo "镜像版本提交"
docker push ccr.ccs.xxx.com/abc/api:v${image_tag}
echo "镜像最新版本提交"
docker tag ccr.ccs.xxx.com/abc/api:v${image_tag} ccr.ccs.xxx.com/abc/api:latest
docker push ccr.ccs.xxx.com/abc/api:latest
注:Dockerfile和make.sh在同一目录下。
docker build 命令用法
docker build [OPTIONS] PATH | URL | -
| 命令, 缩写 |
描述 |
| --add-host |
增加自定义主机和IP映射(host:ip) |
| --build-arg |
设置构建时的变量 |
| --cache-from |
用于缓存资源的镜像 |
| --cgroup-parent |
可选的容器上层cgroup |
| --compress |
使用gzip 压缩构建context |
| --cpu-period |
限制CPU CFS(完全公平调度程序)周期 |
| --cpu-quota |
限制CPU CFS(完全公平调度程序)配额 |
| --cpu-shares , -c |
CPU共享(相对权重) |
| --cpuset-cpus |
允许执行的CPU (0-3, 0,1) |
| --cpuset-mems |
允许使用的内存 (0-3, 0,1) |
| --disable-content-trust true |
忽略镜像验证 |
| --file , -f |
Dockerfile名称 (默认 ‘PATH/Dockerfile’) |
| --force-rm |
始终移除中间容器 |
| --iidfile |
镜像ID写入文件 |
| --isolation |
容器隔离技术 |
| --label |
设置镜像metadata信息 |
| --memory , -m |
内存限制 |
| --memory-swap |
交换限制等于内存加交换,“-1”:启用无限制交换 |
| --network |
在生成期为RUN指令设置网络模式 (API 1.25+) |
| --no-cache |
不使用缓存 |
| --output , -o |
输出(格式:type=local,dest=path) (API 1.40+) |
| --platform |
如果支持多平台,则设置 (experimental (daemon)API 1.32+) |
| --progress |
默认auto,设置进度输出类型 (auto, plain, tty). |
| --pull |
总是尝试拉取最新的镜像版本 |
| --quiet , -q |
不输出构建过程,成功时直接打印镜像ID |
| --rm |
默认true,构建成功后删除中间容器 |
| --secret |
API 1.39+ Secret file to expose to the build (only if BuildKit enabled): id=mysecret,src=/local/secret |
| --security-opt |
Security options |
| --shm-size |
Size of /dev/shm |
| --squash |
experimental (daemon)API 1.25+ Squash newly built layers into a single new layer |
| --ssh |
SSH agent socket or keys to expose to the build (only if BuildKit enabled) |
| --stream |
(experimental (daemon)API 1.31+ ) Stream attaches to server to negotiate build context |
| --tag , -t |
镜像名和tag,格式为‘name:tag’ |
| --target |
Set the target build stage to build. |
| --ulimit |
Ulimit 选项 |
参考已有的范例,Dockerfile和shell脚本只需要简单熟悉一下即可编写。
这一步很关键,是自动打包的根本。make.sh脚本灵活,可执行配置文件的替换,多镜像版本的生成等自定义操作。相比自动化构建平台基于Dockerfile和git commit来构建更具灵活性。
jenkins job配置
源码管理
jenkins会将git项目拷贝至job目录下。
![]()
构建触发器
jenkins定时检测代码变动(这里是每分钟检测一次),如果发现有代码提交记录,则触发下一步的构建。
![]()
构建
构建包括2部分:
- SSH site: SSH的主机地址
- Command: 在主机上执行的命令
构建日志
![]()
打包流程
- 提交代码
- jenkins每分钟检测git仓库分支的代码变动
- 若有代码提交记录,触发下一步构建
- 构建过程调用项目的make.sh文件,执行镜像打包上传
![]()
参考
https://docs.docker.com/engine/reference/commandline/build/