廢話不說,直接乾貨:
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時的效率
3 還有乙個特別的偽目標——all,如果我們在乙個目錄下建立多個可執行程式,我們可以將所有程式的重建規則在乙個makefile中描述。
關於賦值,再多說兩句
= 是最基本的賦值
:= 是覆蓋之前的值
ok!
使用者操作 doc
使用者操作命令 1 useradd 使用者名稱或者 adduser 使用者名稱新增乙個使用者後 home 目錄下面多了乙個該使用者名稱的目錄 同事etc 目錄下檔案 passwd 下多個乙個使用者資訊 huqun x 32 31 home huqun bin bash 這個意思是 有乙個胡群的使用者...
使用者操作 doc
使用者操作命令 1 useradd 使用者名稱或者 adduser 使用者名稱新增乙個使用者後 home 目錄下面多了乙個該使用者名稱的目錄 同事etc 目錄下檔案 passwd 下多個乙個使用者資訊 huqun x 32 31 home huqun bin bash 這個意思是 有乙個胡群的使用者...
MySql簡單doc操作
登陸mysql 打cmd命令終端,如果已經新增了mysql的環境變數,可以直接使用命令 mysql uroot 直接回車,之後按提示輸入密碼,如果未新增mysql的環境變數,可以切換到mysql的安裝目錄下的bin目錄,再使用 mysq uroot 你也可以手動為mysql新增環境變數。這裡就不介紹...