Docker(二):Docker常用命令之映象的建立:Dockerfile 與 commit
阿新 • • 發佈:2018-12-26
從鏡像倉庫下載的映象,都是別人事先做好的。如果需要一個定製的映象,就必須得自己動手了。自己建立一個映象有2種方式:
a、使用commit命令基於一個現有的映象來修改。本質上並不是新建一個映象,而是基於一個已有的基礎映象進行修改。
b、基於Dockerfile來建立。
1、第一種方式:commit命令
如果你修改了原本容器的某些配置,想要儲存這個容器的配置並形成一個新的映象,就可以使用commit命令,基於該容器創建出一個新的映象。即:commit 主要用於通過差異性,建立一個新的image。
(1)commit命令格式如下:
docker commit [options] container [repository][:tag]]
options說明:
-a 提交的映象作者
-c 使用Dockerfile 指令來建立映象
-m 提交時的說明文字
-p 在commit時,將容器暫停,預設情況下,在提交時,容器的執行將被暫停,以保證資料的完整性。
(2)簡單演示:
#檢視本地的存在的容器 [[email protected] ~]# docker ps-a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b2e9025226f0 tomcat "catalina.sh run" 2 days ago Up 47 hours 0.0.0.0:8080->8080/tcp tomcat1 #提交一個存在的容器,b2e9025226f0為本地容器的ID [
[email protected] ~]# docker commit -a "zhangweipeng" -m "mytomcat" b2e9025226f0 mytomcat:v1 sha256:d2259b053f5354dfee0def05e0540ca17e37a2baa0031f3d64b7491f9a5d34bc #檢視docker的映象,可以看到我們新建的映象 [[email protected] ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mytomcat v1 d2259b053f53 8 seconds ago 569 MB
2、第二種方式:基於Dockerfile
使用Dockerfile的方式其實是相當於從零開始建立一個新的映象,具體步驟是先寫好一個Dockerfile檔案。然後使用docker build命令來構建映象,構建時會從網上下載及更新基礎映象與相關軟體。因此,這種方法的核心是編寫好Dockerfiel檔案。
通常一個dockerfile檔案與shell指令碼類似,是一個批處理的過程,但是它具有自己的命令和語法,因此,將構建映象需要執行的命令寫在Dockerfile檔案裡面。dockerfile的命令都是大寫的,比如:FROM、RUN等。
(1)簡單演示:
[[email protected] ~]# mkdir docker_file
[[email protected] ~]# cd docker_file/
#建立並編輯Dockerfile檔案,將構建映象需要使用的命令寫到此檔案中,該檔案十分關鍵
[[email protected]2xz docker_file]#vim Dockerfile
#檢視Docker檔案的內容
[[email protected] docker_file]#cat Dockerfile
FROM ubuntu:14.04
ENTRYPOINT ["/bin/echo"]
#使用build命令構建映象 .表示當前目錄的所有檔案
[[email protected] docker_file]#docker build .
Sending build context to Docker daemon2.048 kB
Step 1/2 : FROM ubuntu:14.04
---> 8cef1fa16c77
Step 2/2 : ENTRYPOINT /bin/echo
---> Running in e080bf082e4a
---> 5cbf5ddc3059
Removing intermediate containere080bf082e4a
Successfully built 5cbf5ddc3059
#至此,映象構建完成,新建立的映象的id是5cbf5ddc3059,可以使用docker images命令檢視
#執行映象,生成一個新的容器
[[email protected] docker_file]#docker run 5cbf5ddc3059
#檢視容器,可以看到生成一個新的容器
[[email protected] docker_file]#docker ps –a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
75ccd954b6b8 5cbf5ddc3059 "/bin/echo" 15 minutes ago Exited (0) 15 minutes ago vibrant_swirles
#在建立容器的時候加入一個引數
[[email protected] docker_file]#docker run 5cbf5ddc3059 hello world
hello world
#重新編寫Dockerfile檔案
[[email protected] docker_file]#vim Dockerfile
#檢視Dockerfile檔案的內容
[[email protected] docker_file]#cat Dockerfile
FROM ubuntu:14.04
#ENTRYPOINT ["/bin/echo","Hiworld!"]
CMD ["/bin/echo","Hiworld!"]
#使用build命令構建映象
[[email protected] docker_file]#docker build .
Sending build context to Docker daemon2.048 kB
Step 1/2 : FROM ubuntu:14.04
---> 8cef1fa16c77
Step 2/2 : CMD /bin/echo Hi world!
---> Running in 82d89be69ec6
---> dcb78037c371
Removing intermediate container82d89be69ec6
Successfully built dcb78037c371
#通過新建立的映象來建立容器
[[email protected] docker_file]#docker run dcb78037c371
Hi world!
[[email protected] docker_file]#docker run dcb78037c371 /bin/date
Thu May 24 14:33:02 UTC 2018