1. 程式人生 > >Docker(二):Docker常用命令之映象的建立:Dockerfile 與 commit

Docker(二):Docker常用命令之映象的建立:Dockerfile 與 commit

        從像倉庫載的映象,都是別人事先做好的。如果需要一個定製的映象,就必須得自己動手了。自己建立一個映象有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