Docker(二):Docker常用命令之镜像的创建:Dockerfile 与 commit
?
相關閱讀:
Docker(一):Docker的安裝與常用命令
Docker(二):Docker常用命令之鏡像的創建:Dockerfile 與 commit
Docker(三):Docker鏡像導入與導出、恢復與加載與在Docker容器中安裝軟件
Docker(四):使用Docker部署tomcat、mysql、nginx文件服務器
?
從鏡像倉庫下載的鏡像,都是別人事先做好的。如果需要一個定制的鏡像,就必須得自己動手了。自己創建一個鏡像有2種方式:
a、使用commit命令基于一個現有的鏡像來修改。本質上并不是新建一個鏡像,而是基于一個已有的基礎鏡像進行修改。
b、基于Dockerfile來創建。
?
一、第一種方式:commit命令:
如果你修改了原本容器的某些配置,想要保存這個容器的配置并形成一個新的鏡像,就可以使用commit命令,基于該容器創建出一個新的鏡像。即:commit 主要用于通過差異性,創建一個新的image。
(1)commit命令格式如下:
docker commit [options] container [repository][:tag]]
?
options說明:
-a 提交的鏡像作者
-c 使用Dockerfile 指令來創建鏡像
-m 提交時的說明文字
-p 在commit時,將容器暫停,默認情況下,在提交時,容器的執行將被暫停,以保證數據的完整性。
(2)簡單演示:
#查看本地的存在的容器
[root@izwz9ib5he33fx3jnuis2xz ~]# 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
[root@izwz9ib5he33fx3jnuis2xz ~]# docker commit -a "zhangweipeng" -m "mytomcat" b2e9025226f0 mytomcat:v1
sha256:d2259b053f5354dfee0def05e0540ca17e37a2baa0031f3d64b7491f9a5d34bc
?
#查看docker的鏡像,可以看到我們新建的鏡像
[root@izwz9ib5he33fx3jnuis2xz ~]# docker images
REPOSITORY ? ? ? ?TAG ? ? ? ? IMAGE ID ? ? ? ? ? ?CREATED ? ? ? ? ? ? SIZE
mytomcat ? ? ? ? ?v1 ? ? ? ? d2259b053f53 ? ? ? ?8 seconds ago ? ? ? 569 MB
?
二、第二種方式:基于Dockerfile文件:
使用Dockerfile的方式其實是相當于從零開始創建一個新的鏡像,具體步驟是先寫好一個Dockerfile文件。然后使用docker build命令來構建鏡像,構建時會從網上下載及更新基礎鏡像與相關軟件。因此,這種方法的核心是編寫好Dockerfile文件。
通常一個dockerfile文件與shell腳本類似,是一個批處理的過程,但是它具有自己的命令和語法,因此,將構建鏡像需要執行的命令寫在Dockerfile文件里面。dockerfile的命令都是大寫的,比如:FROM、RUN等。
(1)簡單演示:
[root@izwz9ib5he33fx3jnuis2xz ~]# mkdir docker_file
[root@izwz9ib5he33fx3jnuis2xz ~]# cd docker_file/
#1、創建并編輯Dockerfile文件,將構建鏡像需要使用的命令寫到此文件中,該文件十分關鍵
[root@izwz9ib5he33fx3jnuis2xz docker_file]#vim Dockerfile
#2、查看Docker文件的內容:
[root@izwz9ib5he33fx3jnuis2xz docker_file]#cat Dockerfile
FROM ubuntu:14.04
ENTRYPOINT ["/bin/echo"]
?
#3、使用build命令構建鏡像 .表示當前目錄的所有文件
[root@izwz9ib5he33fx3jnuis2xz 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命令查看
#4、運行鏡像,生成一個新的容器
[root@izwz9ib5he33fx3jnuis2xz docker_file]#docker run 5cbf5ddc3059
#5、查看容器,可以看到生成一個新的容器
[root@izwz9ib5he33fx3jnuis2xz 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
#6、在創建容器的時候加入一個參數
[root@izwz9ib5he33fx3jnuis2xz docker_file]#docker run 5cbf5ddc3059 hello world
hello world
#1、重新編寫Dockerfile文件
[root@izwz9ib5he33fx3jnuis2xz docker_file]#vim Dockerfile
#2、查看Dockerfile文件的內容
[root@izwz9ib5he33fx3jnuis2xz docker_file]#cat Dockerfile
FROM ubuntu:14.04
#ENTRYPOINT ["/bin/echo","Hiworld!"]
CMD ["/bin/echo","Hiworld!"]
?
#3、使用build命令構建鏡像
[root@izwz9ib5he33fx3jnuis2xz 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
?
#4、通過新創建的鏡像來創建容器
[root@izwz9ib5he33fx3jnuis2xz docker_file]#docker run dcb78037c371
Hi world!
[root@izwz9ib5he33fx3jnuis2xz docker_file]#docker run dcb78037c371 /bin/date
Thu May 24 14:33:02 UTC 2018
?
?
總結
以上是生活随笔為你收集整理的Docker(二):Docker常用命令之镜像的创建:Dockerfile 与 commit的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker(一):Docker的安装与
- 下一篇: Docker(三):镜像导入与导出、保存