用Makefile来操作docker

废话不说,直接干货:

include env_make
NS = your docker namespace
VERSION ?= latest

REPO = your docker repo name
NAME = name of the image
INSTANCE = default

.PHONY: build push shell run start stop rm release

build:
	docker build -t $(NS)/$(REPO):$(VERSION) .

push:
	docker push $(NS)/$(REPO):$(VERSION)

shell:
	docker run --rm --name $(NAME)-$(INSTANCE) -i -t $(PORTS) $(VOLUMES) $(ENV) $(NS)/$(REPO):$(VERSION) /bin/bash

run:
	docker run --rm --name $(NAME)-$(INSTANCE) $(PORTS) $(VOLUMES) $(ENV) $(NS)/$(REPO):$(VERSION)

start:
	docker run -d --name $(NAME)-$(INSTANCE) $(PORTS) $(VOLUMES) $(ENV) $(NS)/$(REPO):$(VERSION)

stop:
	docker stop $(NAME)-$(INSTANCE)

rm:
	docker rm $(NAME)-$(INSTANCE)

release: build
	make push -e VERSION=$(VERSION)

default: build

makefile的内容已经非常清晰了,完全可以起到加速使用docker的效果,需要说明一下的是: version ?= latest这句中的问号是什么意思,需要扯几句:

看下面一个例子:

FOO ?= bar

其含义是,如果FOO没有被定义过,那么变量FOO的值就是“bar”,如果FOO先前被定义过,那么这条语将什么也不做,其等价于:

ifeq ($(origin FOO), undefined)
FOO = bar
endif

那么同理,version如果没有在别处被定义过,那么version 就是bar ,如果在别处被定义过,那么他就是用被定义的值

在文件的开始的地方,有一个include语句,那么就期待这个include进来的文件有这个定义,所以最后不要忘记makefle的同一个目录下放一个env_make文件

另外: .PHONY 是个什么意思呢?

为什么要使用伪目标,

1为了避免在makefile中定义的只执行命令的目标和工作目录下的实际文件出现名字冲突,

2是提高执行makefile时的效率

还有一个特别的伪目标——all,如果我们在一个目录下创建多个可执行程序,我们可以将所有程序的重建规则在一个makefile中描述。


关于赋值,再多说两句

= 是最基本的赋值
:= 是覆盖之前的值

ok! 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值