用Makefile來操作docker

2021-07-10 10:45:01 字數 1649 閱讀 7832

廢話不說,直接乾貨:

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新增環境變數。這裡就不介紹...