架構師_程序員

 找回密碼
 注冊[Register]

QQ登錄

只需一步,快速開始

查看: 270|回復: 0
打印 上一主題 下一主題

dockerfile 與 docker-compose的區別

[復制鏈接]
跳轉到指定樓層
樓主
發表于 2019-11-15 09:33:13 | 只看該作者
dockerfile 與 docker-compose的區別
先簡單理解 docker 的使用過程,它分為鏡像構建與容器啟動。

鏡像構建:即創建一個鏡像,它包含安裝運行所需的環境、程序代碼等。這個創建過程就是使用 dockerfile 來完成的。

容器啟動:容器最終運行起來是通過拉取構建好的鏡像,通過一系列運行指令(如端口映射、外部數據掛載、環境變量等)來啟動服務的。針對單個容器,這可以通過 docker run 來運行。

而如果涉及多個容器的運行(如服務編排)就可以通過 docker-compose 來實現,它可以輕松的將多個容器作為 service 來運行(當然也可僅運行其中的某個),并且提供了 scale (服務擴容) 的功能。

簡單總結:

1.dockerfile: 構建鏡像;

2.docker run: 啟動容器;

3.docker-compose: 啟動服務;

從頭說起。
假如你不用 docker ,搭建 wordpress 怎么弄?先找臺 server ,假設其 OS 為 Ubuntu ,然后按照文檔一步步敲命令,寫配置,對吧?
用 docker 呢? 隨便找臺 server ,不管什么操作系統,只要支持 docker 就行, docker run ubuntu, docker 會從官方源里拉取最新的 Ubuntu 鏡像,可以認為你開了個 Ubuntu 虛擬機,然后一步步安裝,跟上面一樣。

但是這樣安裝有個顯著的缺點,一旦 container 被刪,你做的工作就都沒了。當然可以用 docker commit 來保存成鏡像,這樣就可以復用了。

但是鏡像一般比較大,而且只分享鏡像的話,別人也不知道你這鏡像到底包含什么,這些問題都不利于分享和復用。
一個直觀的解決方案就是,寫個腳本把安裝過程全部記錄下來,這樣再次安裝的時候,執行腳本就行了。 Dockerfile 就是這樣的腳本,它記錄了一個鏡像的制作過程。
有了 Dockerfile, 只要執行 docker build . 就能制作鏡像,而且 Dockerfile 就是文本文件,修改也很方便。

現在有了 wordpress 的鏡像,只需要 docker run 就把 wordpress 啟動起來了。

如果僅僅是 wordpress, 這也就夠了。但是很多時候,需要多個鏡像合作才能啟動一個服務,比如前端要有 nginx , 數據庫 mysql, 郵件服務等等,當然你可以把所有這些都弄到一個鏡像里去,但這樣做就無法復用了。
更常見的是, nginx, mysql, smtp 都分別是個鏡像,然后這些鏡像合作,共同服務一個項目。
docker-compose 就是解決這個問題的。你的項目需要哪些鏡像,每個鏡像怎么配置,要掛載哪些 volume, 等等信息都包含在 docker-compose.yml 里。
要啟動服務,只需要 docker-compose up 就行,停止也只需要 docker-compse stop/down

簡而言之, Dockerfile 記錄單個鏡像的構建過程, docker-compse.yml 記錄一個項目(project, 一般是多個鏡像)的構建過程。

你說有些教程用了 dockerfile+docker-compose, 是因為 docker-compose.yml 本身沒有鏡像構建的信息,如果鏡像是從 docker registry 拉取下來的,那么 Dockerfile 就不需要;如果鏡像是需要 build 的,那就需要提供 Dockerfile.

docker-compose是編排容器的。例如,你有一個php鏡像,一個mysql鏡像,一個nginx鏡像。如果沒有docker-compose,那么每次啟動的時候,你需要敲各個容器的啟動參數,環境變量,容器命名,指定不同容器的鏈接參數等等一系列的操作,相當繁瑣。而用了docker-composer之后,你就可以把這些命令一次性寫在docker-composer.yml文件中,以后每次啟動這一整個環境(含3個容器)的時候,你只要敲一個docker-composer up命令就ok了。

dockerfile的作用是從無到有的構建鏡像。它包含安裝運行所需的環境、程序代碼等。這個創建過程就是使用 dockerfile 來完成的。Dockerfile - 為 docker build 命令準備的,用于建立一個獨立的 image ,在 docker-compose 里也可以用來實時 build
docker-compose.yml - 為 docker-compose 準備的腳本,可以同時管理多個 container ,包括他們之間的關系、用官方 image 還是自己 build 、各種網絡端口定義、儲存空間定義等




上一篇:Failed to register URL "http://xx/" for site "SITE NAME"...
下一篇:docker 在 windows 系統下存儲鏡像位置
帖子永久地址: 

架構師_程序員 - 論壇版權1、本主題所有言論和圖片純屬會員個人意見,與本論壇立場無關
2、本站所有主題由該帖子作者發表,該帖子作者與架構師_程序員享有帖子相關版權
3、其他單位或個人使用、轉載或引用本文時必須同時征得該帖子作者和架構師_程序員的同意
4、帖子作者須承擔一切因本文發表而直接或間接導致的民事或刑事法律責任
5、本帖部分內容轉載自其它媒體,但并不代表本站贊同其觀點和對其真實性負責
6、如本帖侵犯到任何版權問題,請立即告知本站,本站將及時予與刪除并致以最深的歉意
7、架構師_程序員管理員和版主有權不事先通知發貼者而刪除本文

碼農網,只發表在實踐過程中,遇到的技術難題,不誤導他人。
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則

免責聲明:
碼農網所發布的一切軟件、編程資料或者文章僅限用于學習和研究目的;不得將上述內容用于商業或者非法用途,否則,一切后果請用戶自負。本站信息來自網絡,版權爭議與本站無關。您必須在下載后的24個小時之內,從您的電腦中徹底刪除上述內容。如果您喜歡該程序,請支持正版軟件,購買注冊,得到更好的正版服務。如有侵權請郵件與我們聯系處理。

Mail To:help@itsvse.com

QQ|Archiver|手機版|小黑屋|架構師 ( 魯ICP備14021824號-2 )|網站地圖

GMT+8, 2020-7-15 09:58

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回復 返回頂部 返回列表
捕鸟达人老版