前面的文章中涉及到要动态的更新环境的步骤,主机类的我还不会搞,但是容器类的可以实现。这一篇就会向大家展示怎么去动态更新docker镜像,并在Jenkins上作配置的示例。
先准备个私有仓库
先在本地建立个私有仓库,你要是已经有了这个东西,或者直接用公网的,可以不用看。
启动前先配置一个账户密码。
apt install apache2-utils
mkdir –p /data/auth
touch /data/auth/passwd
htpasswd -Bbn test_user test_passwd > /data/auth/passwd htpasswd系统里默认是没有的,来源于apache2-utils工具
挂载启动容器
docker run -d -p 5000:5000 -v /data/registry:/var/lib/registry –v /data/auth:/etc/registry/auth registry registry是官方镜像,运行后在机器上会生成一个容器,专门是个仓库。-p是端口绑定,如果本机的5000占用了可以换个别的,-v是挂载文件夹,第一个是为了便于取出仓库里的数据,第二个是为了将密码加到容器里。最后的registry是个镜像名称。因为registry镜像里自己没有htpasswd工具,所以才需要挂载注入账号密码。
本地的位置前缀都不重要,容器内的位置是固定的。
客户端配置
在docker客户端机器上,因为我们自己搭仓库缺少证书认证,这里需要修改daemon.json,将我们刚才搭的ip端口放入insecure-registries键的列表值内
vi /etc/docker/daemon.json
根据提示重启docker服务。
重启后登录
docker login 127.0.0.1:5000输入账号秘密
或者直接login后-u账号 –p秘密 登录,避免交互,登录成功的提示如下:
调试私有docker仓
给以前做的镜像重新tag,看看能不能推送
docker tag ubuntu_node:0609 127.0.0.1:5000/ubuntu_node_test:0612
docker push 127.0.0.1:5000/ubuntu_node_test:0612
虽然很慢,但确实是在推送,这个和带宽有关,说明操作是成功的
关于镜像创建
使用Dockerfile进行镜像的创建。先创建一个Dockerfile,不管你在哪生成出来都行。
在Dockerfile所在目录,使用命令
docker build –t 127.0.0.1:5000/ubuntu_node_test:0613 .
能够自动的构建一个镜像出来。
最后执行docker push 命令即可推送到刚才的远程仓库里。
注意镜像名称的前缀一定要带上端口号,127.0.0.1与127.0.0.1:5000是不一样的两个仓库。
Jenkins Docker云设置
在配置镜像的位置选择Pull策略时,要选择Pull all images every time,这样就能同步仓库的更新了,同时也要将用户和密码配置到上面的Registry Authentication中。这样每次启动任务他都会去检查更新镜像,一旦有不一样的会重新拉,差异小的话这个速度还是不慢的。
配置后运行一个任务查看是否成功
可以很明显的看到镜像的来源是我们做的,我们只需要不断更新这个版本就可以了。推荐的策略是做完一个版本后将其再推送到latest上面,这是默认的最新镜像获取地。
Jenkins中可能还需要搭配docker login和docker logout的命令来控制仓库登录和退出,以实现推送到远程仓库里。将在这个label下执行的任务挂载在更新镜像任务后方即可实现更新环境后执行任务的流程。
到这里我们就已经打通了自动环境并执行的任务流程。注意在Jenkins中构建镜像的用户要具有足够的权限操作docker。