Docker最全教程 從理論到實戰(四)

2022-06-10 05:51:09 字數 3640 閱讀 7120

貨真價實、確保都是3700公尺海拔以上的超風乾氂牛肉,115元一斤包郵(貨真價實、低於**京東、我們不賺差價),有香辣、五香兩種口味,三斤氂牛肉才能做出一斤超風乾牛肉!希望這個冬天,我們能夠給他們一點點溫暖!有購買意向的朋友可以聯絡博主。

建立了dockerfile之後,需為應用程式中的每項服務建立乙個相關映象。如果應用程式由單個服務或 web 應用程式組成,則只需建立乙個映象。

我們可以使用docker build命令來建立映象,例如:

映象打包好後,我們使用docker image ls命令即可檢視當前映象:

注意:docker映象使用分層儲存的架構,也就是說映象實際是由多層檔案系統聯合組成。映象構建時,會一層層構建,前一層是後一層的基礎。每一層構建完就不會再發生改變,後一層上的任何改變只發生在自己這一層。因為分層儲存的特徵,使得映象的復用、定製變的更為容易。甚至可以用之前構建好的映象作為基礎層,然後進一步新增新的層,以定製自己所需的內容,構建新的映象。所以,當我們使用docker images命令,會列出這麼多的映象,我們可以定期清理那些無用的映象。

如果使用 visual studio 建立帶 docker 支援的專案時,不會顯式建立映象。我們按下 f5 並執行時,vs就會自動建立映象,不會出現明顯的過程(在輸出面板可以了解整個過程,如下圖所示),但我們需要了解其原理,否則出現問題將無從下手。

compose是乙個用於定義和執行多docker應用程式的工具。使用compose,我們可以使用yaml檔案來配置應用程式的服務。然後,使用單個命令,我們就可以從配置中建立並啟動所有服務。

compose適用於所有環境:生產環境、模擬(演示)環境、開發環境和測試環境以及ci工作流程。

主要功能和特性:

另外,compose能夠通過命令管理應用程式的整個生命週期,通過命令可以:

注意:docker for windows安裝包括:安裝提供 docker engine,docker cli客戶端,docker compose,docker machine和 kitematic。也就是如果是使用docker for windows的使用者,無需再獨立安裝docker compose。

我們可以通過執行以下命令來確認我們本地的環境:

使用compose有以下三個步驟:

使用dockerfile定義應用環境,以便在任意地方進行複製

在 docker-compose.yml 中定義組合應用,以便它們可以在隔離的環境中一起執行

最後,執行docker-compose up命令,compose 將啟動並執行整個應用程式。

由此可見,第二步決定了compose的執行,乙個簡單的docker-compose.yml檔案如下所示:

其定義了web和redis兩個應用。接下來,我們一起來了解docker-compose.yml 檔案。

借助 docker-compose.yml 檔案,我們可以定義一組相關服務,通過部署命令將其部署為組合應用程式。簡單的說,我們可以通過docker-compose.yml來定義多個服務,以便一次執行。

這裡筆者以magicodes.admin為例,基礎框架提供了後台介面服務以及後台前端應用兩個,那麼我們可以定義docker-compose.yml 檔案以便部署為組合應用程式,也就是說,乙個命令託管和執行多個服務:

以上是乙個簡化的配置,定義了兩個服務以及環境變數和埠。值得說明的是,在docker中我們無法訪問localdb,這時我們建議訪問獨立的資料庫服務或者使用資料庫映象,例如:

sql.data:

image: mssql-server-linux:latest

environment:

- sa_password=pass@word

- accept_eula=y

ports:

- "5433:1433"

注意:sql server也提供了docker映象,並且支援linux容器。在上面的配置中,通過環境變數設定了sa賬號的密碼。值得注意的是,我們並不推薦在生產環境中使用資料庫的容器映象來託管資料,這點我們後續再來詳聊。

很多教程並不會講述這點,但是筆者認為這點也非常重要,因為了解yaml的語法和規範,可以在開發調測的過程中避免很多錯誤,也便於我們更好的配置基於yaml語法的檔案——比如docker-compose.yml檔案。

什麼是yaml?

yaml 是一種簡潔的非標記語言。yaml以資料為中心,使用空白,縮排,分行組織資料,從而使得表示更加簡潔易讀。

這裡提供乙個yaml語法驗證**:

基本規則

大小寫敏感

使用縮排表示層級關係

禁止使用tab縮排,只能使用空格鍵

縮排長度沒有限制,只要元素對齊就表示這些元素屬於乙個層級

使用#表示注釋

字串可以不用引號標註

yaml中允許表示三種格式,分別是常量值,物件和陣列,如下所示:

對於yaml的講解,我們就說到這裡,我們繼續本篇內容。

docker-compose.yml 檔案不僅指定正在使用的容器,還指定如何單獨配置各容器。常用的配置項如下所示:

最後,分享幾個小技巧:

我們定義完docker-compose.yml之後,如果是使用visual studio進行開發,通過其docker tool會讓開發調測變得非常簡單和易用。對於未啟用docker支援的專案,我們可以通過右鍵選單進行啟用:

啟用之後,會自動新增相關支援(包括生成dockerfile、docker-compose.yml以及.dockerignore等),然後通過其docker工具可以直接啟動執行並且支援除錯,如下圖所示:

點選工具欄的【docker】按鈕或者按下【f5】均可直接執行並除錯,啟動後如下圖所示:

執行完成後,vs還會自動開啟相關服務的預設頁。

如果不依賴visual studio進行執行,我們在下節進行講述。

出處:

Docker最全教程 從理論到實戰(五)

本篇教程持續編寫了3個星期左右並且一直在完善 補充具體的細節和實踐,預計全部完成需要1到2個月的時間。由於編寫的過程中極其費時,並且還需要配合做一些實踐 有些實踐存在一些坑,而且極其費時費事 因此目前產出的速度已經跟不上發布的速度了,後續的發布節奏會放慢,請大家多多理解和多多包含。在這個過程中,我們...

Docker最全教程 從理論到實戰(十六)

go 又稱golang 是google開發的一種靜態強型別 編譯型 並髮型,並具有垃圾 功能的程式語言。在2016年,go被軟體評價公司tiobe 選為 tiobe2016 年最佳語言 和其他語言的規定相比,在go中有幾項不同的強制的規定,當不匹配以下規定時編譯將會產生錯誤 相比其他語言,go語言主...

Docker最全教程 從理論到實戰(二十三)

傳統it往往都會過度購買配置,甚至上一年都有計畫下一年需要購買的虛擬機器和儲存資源,往往都會超買,造成了很多不必要的消費 雲資源一經購買,無論是否使用,均會按時收費 在雲端,k8s擁有極高的擴充套件性 自動化和可伸縮性,我們完全可以對雲資源按量付費並且設定設定自動伸縮。比如雲端的k8s集群,我們可以...