內容摘要
- CMD命令的3種格式
- ENTRYPOINT的兩種格式
- exec和shell兩種格式的區別
- 鏡像版本管理
- 鏡像分發
CMD命令的3種格式
1、Exec格式
格式:CMD ["命令", "參數1", "參數2",......],例如:CMD ["echo", "hello", "world"]
2、Shell格式
格式: CMD 命令 參數1 參數2 ......,上面已經用到
3、為Entrypoint提供參數
格式:CMD ["參數1", "參數2", ......],上面也已經用到
鑑於第二種和第三種格式都已經使用,只測試下第一種格式
修改 dockerfile,內容如下:
# dockerfile haha FROM centos MAINTAINER [email protected] WORKDIR /mydir RUN touch mytext COPY test . ADD busybox-1_29_0.tar.gz . ENV VERSION "1.0.2" CMD ["echo", "I am", "cmd"]
構建鏡像並運行,如下圖:
ENTRYPOINT的兩種格式
ENTRYPOINT只有exec和shell兩種格式,格式和CMD一樣,上面已經使用了兩種格式,不再舉例。
exec和shell兩種格式的區別
主要區別在於: shell格式底層會調用 /bin/sh -c,而exec不會。
測試如下:
修改Dockerfile,內容如下:
FROM centos MAINTAINER [email protected] WORKDIR /mydir RUN touch mytext COPY test . ADD busybox-1_29_0.tar.gz . ENV VERSION "1.0.2" ENTRYPOINT echo "Hello, $VERSION"
構建鏡像並運行:
從結果可以知道,環境變量被替換。
如果使用exec呢?
修改Docker:
FROM centos MAINTAINER [email protected] WORKDIR /mydir RUN touch mytext COPY test . ADD busybox-1_29_0.tar.gz . ENV VERSION "1.0.2" ENTRYPOINT ["/bin/echo", "Hello, $VERSION"]
構建鏡像並運行:
環境變量 VERSION 沒有被替換。
如果希望被替換,做如下修改:
FROM centos MAINTAINER [email protected] WORKDIR /mydir RUN touch mytext COPY test . ADD busybox-1_29_0.tar.gz . ENV VERSION "1.0.2" ENTRYPOINT ["/bin/sh", "-c", "echo Hello, $VERSION"]
構建並運行:
環境變量又被替換了,由此可見,ENTRYPOINT,底層不會調用/bin/sh -c,需要自己補齊。
對於兩種格式,推薦使用exec格式,因為可讀性好,容易理解。
注意:RUN 也可以使用兩種格式。
鏡像版本管理
查看我們先前構建的鏡像,命令為:
docker images
注意REPOSITORY和TAG兩個列,一般而言,鏡像的名稱由兩部分構成:REPOSITORY和TAG,格式如下:
imageName = REPOSITORY:TAG
中間使用冒號分隔開。
如果我們沒有在構建鏡像時,沒有指定TAG的話,會使用默認值:latest,比如上圖的兩個鏡像。
下面我們重新構建下鏡像,並指定TAG:
將構建的鏡像TAG設置為1.0.
一個鏡像可以打多個TAG:
執行如下命令:
docker tag centos-with-busybox:1.0 centos-with-busybox:latest
為該鏡像打latest標籤。
如果有用戶基於 centos-with-busybox:latest 鏡像構建新的鏡像2.0,那麼該如何管理鏡像版本呢?
使用命令設置tag:
docker tag centos-with-busybox:1.0 centos-with-busybox:2.0 docker tag centos-with-busybox:2.0 centos-with-busybox:latest
此時應當將2.0版本加上TAG latest,更新latest版本,使latest保持為最新的版本。
另外,大家觀察上圖的IMAGE ID列,可以看到前3行數據一樣,多個TAG可以對應一個鏡像。
鏡像分發
在本地構建好自己的鏡像後,需要將鏡像保存到倉庫中,這就是鏡像分發。
下面我們將自己構建好的鏡像放到 docker 公共倉庫取,網址為:hub.docker.com。
首先需要在Docker Hub上註冊一個賬號;
在我們的主機上登錄,命令為:
docker login -u 用戶名
登錄成功後,修改TAG,使之於賬號相匹配:
修改TAG方式為,將自己的賬號ID加上,並使用 / 與鏡像名隔開。
接著使用docker push命令將鏡像推上去,命令為:
docker push huqianakls/centos-with-busybox
push成功後,可以去自己的docker倉庫看看該鏡像:
點擊該鏡像,查看詳細信息:
至此,容器鏡像的全部內容就講完了,希望大家能根據課程順序在自己的容器環境上做實驗。
實驗
分別使用CMD、ENTRYPOINT兩種格式構建鏡像;
給鏡像創建不同版本;
將鏡像推送到docker公共倉庫;