• 使用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命令编排的使用好处。

  • 相关阅读:
    详解设计模式:简单工厂模式
    New Concept English3 Lesson 1. A puma at large【精讲学习笔记】
    独孤九剑第四式-K近邻模型(KNN)
    2022年全国最新消防设施操作员(高级消防设施操作员)模拟题及答案
    PMBOK(项目管理实践指南)绝不是PMP考试的指定教材,看完你就知道
    java计算机毕业设计扶贫平台MyBatis+系统+LW文档+源码+调试部署
    七夕,工作的人怎么办?
    Ext JS适用于哪些开发场景?
    kettle从入门到精通 第六十九课 ETL之kettle kettle cdc mysql,轻松实现实时增量同步
    Java Switch中使用多字段的枚举类
  • 原文地址:https://blog.csdn.net/zhuganlai168/article/details/136250499