• 使用Makefile对多个shell命令进行编排


    一、背景

    在日常运维过程中,我们都会需要写大量的shell命令,如果是工程相对复杂的话,shell命令往往会封装为函数,交由主函数按需调用。
    本文将引入Makefile来对复杂shell命令进行封装,让其变得易读易懂。

    下面以一个构建Dockerfile的shell命令为示例

    二、构建自定义docker镜像

    1、编写你自己的Dockerfile

    这里略去,不是本文的重点。

    2、编写build.sh命令进行构建并推送镜像

    IMAGE_BASE=xxx
    IMAGE_NAME=user-service
    IMAGE_VERSION=2.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}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    可以看到,这里有许多注释,因为上述的shell命令并不是一次性先后执行的,而是在不同的阶段,执行不同的命令。

    下面就把上面的shell命令改为Makefile。

    3、Makefile

    IMAGE_BASE=xxx
    IMAGE_NAME=user-service
    IMAGE_VERSION=2.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}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    使用示例

    • make 与下面的make build一样
    • make build
    • make test 在未推送到仓库前,测试构建的本地镜像
    • make tag
    • make login 可能需要登录
    • make push

    在这里插入图片描述
    docker tag 给镜像打标签,见上一行
    docker build 构建镜像,见下一行

    Dockerfile和build.sh、Makefile存放在同一目录下。

    当然,执行make命令也是在该目录下。

    在这里插入图片描述

    三、总结

    编写Makefile文本的时候,注意每行命令前必须是TAB键,而非空格键。
    由于本示例也存粹是对Makefile的入门,想要突出的是其对shell命令编排的使用好处。

  • 相关阅读:
    Rocketmq的集群搭建
    靠!我被项目经理和同事嘲笑了,因为不会远程debug调试...
    B树和B+树的区别
    使用Linux JumpServer 堡垒机进行远程访问
    Vue应用API——use解析
    73.C++类模板
    关于额外的ht.ui插件如Carouse轮播组件,源码、js库文件、API接口文档、DEMO地址
    Idea 创建 Spring 项目(保姆级)
    Python新特性
    流媒体直播播放协议:HLS、RTMP、HTTP-FLV
  • 原文地址:https://blog.csdn.net/zhuganlai168/article/details/136250499