如何向K8s,Docker-Compose注入镜像Tag

简介: 最近在做基于容器的CI/CD, 一个朴素的自动部署的思路是:从Git Repo打出git tag,作为镜像Tagssh远程登录到部署机器向部署环境注入镜像Tag,拉取镜像,重新部署下面分享我是如何在K8s、docker-compose中注入镜像Tag?

k8s


熟悉k8s的同学知道, K8s有一个强大的原生配置管理工具:Kustomize


Kustomize 以一种无模板的方式来定制应用程序配置,从而简化了现有应用程序的使用。现在kustomize已经以apply -k的方式内置进kubectl。


这里利用Kustomize的edit命令修改定义在Kustomization.yaml中的镜像Tag:


aa84486b3c1d0f0f66e620483673367b.png


下面是一个简单的Kustomization.yaml文件:


kind: Kustomization
namespace: wd
resources:
- ../base
images:
- name: hub.docker.com/eap/website  //原镜像名
  newName: hub.docker.com/eap/website
  newTag: v1.0.7-hotfix5     // 持续被修改的Tag


做自动部署时,一般由CI给部署脚本导入此次git tag(镜像Tag)。


#!/bin/sh
cd /home/wd-deploy/localdeploy/wd/overlays/  
kustomize edit set image  hub.docker.com/eap/website=hub.docker.com/eap/website:${TAG}
kustomize build . | kubectl apply -f -


以上部署脚本: 进入Kustomization.yaml目录,向Kustomization.yaml文件注入新的镜像Tag,构建并应用新的配置


docker-compose


Docker平台就没有那么好的工具,明文让你修改镜像配置。


我们采用shell脚本来曲线修改镜像配置:


假如你有一个简单的docker-compose.yml文件:


version: '3'
services:
    app:
        image: username/app:d7s8f12
        ports:
            - 80:80


通过shell脚本修改`app:` 字符串后面的镜像Tag,达到注入Tag的目的。


sed -E -i'' "s/(.*app:).*/\1$COMMIT/" 'docker-compose.yml'


同样,自动部署时由CI给部署脚本导入此次Git Tag (镜像Tag)。

#!/bin/sh
cd  /home/wd-deploy/app/
sed -E -i'' "s/(.*app:).*/\1$COMMIT/" 'docker-compose.yml'
docker-compose pull app  && docker-compose  up -d


以上部署脚本: 进入docker-compose.yml目录,向Compose文件注入新的镜像Tag,拉取镜像并应用新的配置。


结束语


本文分享了向K8s, Docker-Compose平台注入镜像Tag的姿势。


为啥要专题讲这个呢?因为注入Tag是自动部署的必经过程。


本文只是一个粗浅的、朴素的注入思路(Devops生态有许多组件可以完成该项动作), 欢迎大家多多留言,带我上路。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
11月前
|
JavaScript Docker 容器
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
585 100
|
11月前
|
缓存 安全 Linux
优化Docker镜像大小的多阶段构建实践
优化Docker镜像大小的多阶段构建实践
582 99
|
11月前
|
缓存 Docker 容器
优化Docker镜像大小的五个实用技巧
优化Docker镜像大小的五个实用技巧
924 98
|
11月前
|
安全 Go Docker
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
|
Docker 容器 Perl
云效flow构建docker镜像更换apt源为阿里镜像源
在 Dockerfile 中添加命令以更换 Debian 源为阿里云镜像,加速容器内软件包下载。核心命令通过 `sed` 实现源地址替换,并更新 apt 软件源。其中 `cat` 命令用于验证替换是否成功,实际使用中可删除该行。
3204 32
|
10月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
943 6
|
Docker 容器 应用服务中间件
Docker 客户端是如何拉取镜像的?
Docker客户端拉取镜像的过程遵循Docker Registry HTTP API V2规范,主要分为解析镜像名、鉴权、获取Manifest、拉取Layers及本地合并五个步骤。它与Docker Hub、Harbor等仓库通信,确保镜像正确下载和构建。
1750 59
|
缓存 Shell 网络安全
将应用程序打包成Docker镜像时可能遇到哪些问题?
将应用程序打包成Docker镜像时可能遇到哪些问题?
1298 77
|
11月前
|
Java Docker 容器
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
412 8
|
12月前
|
缓存 Ubuntu Docker
Ubuntu环境下删除Docker镜像与容器、配置静态IP地址教程。
如果遇见问题或者想回滚改动, 可以重启系统.
673 16