镜像仓库
镜像仓库有好些地方可以存,大部分的公有云均提供免费的镜像仓库,常见如下:
- 腾讯云:https://console.cloud.tencent.com/tke2/registry/user/self?rid=1(需登录) 
- 阿里云: https://cr.console.aliyun.com/cn-hangzhou/instances/repositories(需登录) 
- 自建私有仓库,参考之前的一篇文章docker私有仓库搭建 
- Docker Hub:不涉及私密的或者你想公开的镜像可以上传到https://hub.docker.com/。 
打包上传shell脚本
统一打包流程,每个项目中添加make.sh脚本文件,一个典型的make文件如下:
| 1 | #!/bin/sh | 
注:Dockerfile和make.sh在同一目录下。
docker build 命令用法
| 1 | 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文件,执行镜像打包上传 

