阿里云有了域名 网站建设,技术支持 洛阳网站建设,杭州企业求网站建设,广东东莞石龙一、背景
在日常运维过程中#xff0c;我们都会需要写大量的shell命令#xff0c;如果是工程相对复杂的话#xff0c;shell命令往往会封装为函数#xff0c;交由主函数按需调用。 本文将引入Makefile来对复杂shell命令进行封装#xff0c;让其变得易读易懂。
下面以一个…一、背景
在日常运维过程中我们都会需要写大量的shell命令如果是工程相对复杂的话shell命令往往会封装为函数交由主函数按需调用。 本文将引入Makefile来对复杂shell命令进行封装让其变得易读易懂。
下面以一个构建Dockerfile的shell命令为示例
二、构建自定义docker镜像
1、编写你自己的Dockerfile
这里略去不是本文的重点。
2、编写build.sh命令进行构建并推送镜像
IMAGE_BASExxx
IMAGE_NAMEuser-service
IMAGE_VERSION2.4.0#构建本地docker镜像
docker build -t ${IMAGE_BASE}/${IMAGE_NAME}:${IMAGE_VERSION} .#测试构建的docker镜像
#docker run -it --name ${IMAGE_NAME} -p 9033:9033 ${IMAGE_BASE}/${IMAGE_NAME}:${IMAGE_VERSION}#对构建的docker镜像打标签
#docker tag ${IMAGE_BASE}/${IMAGE_NAME}:${IMAGE_VERSION} 192.168.5.6:8086/${IMAGE_BASE}/${IMAGE_NAME}:${IMAGE_VERSION}#登录docker私有仓库
#docker login 192.168.5.6:8086 -u admin -p 123456#推送本地构建的docker镜像到私有仓库
#docker push 192.168.5.6:8086/${IMAGE_BASE}/${IMAGE_NAME}:${IMAGE_VERSION}可以看到这里有许多注释因为上述的shell命令并不是一次性先后执行的而是在不同的阶段执行不同的命令。
下面就把上面的shell命令改为Makefile。
3、Makefile
IMAGE_BASExxx
IMAGE_NAMEuser-service
IMAGE_VERSION2.4.0
# 默认执行build
all: build#构建本地docker镜像
build:docker build -t ${IMAGE_BASE}/${IMAGE_NAME}:${IMAGE_VERSION} .#测试构建的docker镜像
test:docker run -it --name ${IMAGE_NAME} -p 9033:9033 ${IMAGE_BASE}/${IMAGE_NAME}:${IMAGE_VERSION}#对构建的docker镜像打标签
tag:docker tag ${IMAGE_BASE}/${IMAGE_NAME}:${IMAGE_VERSION} 192.168.5.6:8086/${IMAGE_BASE}/${IMAGE_NAME}:${IMAGE_VERSION}#登录docker私有仓库
login:docker login 192.168.5.6:8086 -u admin -p 123456#推送本地构建的docker镜像到私有仓库
push:docker push 192.168.5.6:8086/${IMAGE_BASE}/${IMAGE_NAME}:${IMAGE_VERSION}使用示例
make 与下面的make build一样make buildmake test 在未推送到仓库前测试构建的本地镜像make tagmake login 可能需要登录make push docker tag 给镜像打标签见上一行 docker build 构建镜像见下一行
Dockerfile和build.sh、Makefile存放在同一目录下。
当然执行make命令也是在该目录下。 三、总结
编写Makefile文本的时候注意每行命令前必须是TAB键而非空格键。 由于本示例也存粹是对Makefile的入门想要突出的是其对shell命令编排的使用好处。