???♂? 個人主頁: @AI_magician
??主頁地址: 作者簡介:CSDN內容合伙人,全棧領域優(yōu)質創(chuàng)作者。
?????景愿:旨在于能和更多的熱愛計算機的伙伴一起成長!!?????
???♂?聲明:本人目前大學就讀于大二,研究興趣方向人工智能&硬件(雖然硬件還沒開始玩,但一直很感興趣!希望大佬帶帶)
該文章收錄專欄
[?— 《深入解析機器學習:從原理到應用的全面指南》 —?]
核心概念
Docker 是一個開源的容器化平臺,它在過去幾年中取得了巨大的成功和廣泛的應用。以下是 Docker 的發(fā)展歷史和其使用的編程語言 Go 的相關信息:
-
Docker 的起源:
Docker 最初由 Solomon Hykes 在2013年創(chuàng)建,并在 Docker 公司(前身為 dotCloud)的支持下進行開發(fā)和推廣。Docker 的設計目標是提供一種輕量級、便攜式的容器化解決方案,以簡化應用程序的部署和管理。 -
Docker 的早期版本:
Docker 最早的版本是基于 Linux 容器(LXC)技術開發(fā)的,它利用 Linux 內核的容器功能,實現(xiàn)了應用程序的隔離和資源管理。不過,這種實現(xiàn)方式存在一些限制和不足,因此 Docker 團隊決定在 Docker 0.9 版本中引入自己的容器引擎,即 Docker Engine(后來被稱為 Docker Daemon)。 -
Go 語言的選擇:
Docker 團隊選擇使用 Go 作為開發(fā) Docker 引擎的編程語言。Go 是由 Google 開發(fā)的一種靜態(tài)類型、編譯型語言,具有高效、簡潔和并發(fā)編程的特性。選擇 Go 作為開發(fā)語言使得 Docker 具備了良好的性能、可移植性和易于擴展的特點。 -
Docker 的快速發(fā)展:
Docker 在推出之后迅速獲得了開發(fā)者和運維人員的關注,并在容器領域迅速崛起。Docker 引入了容器鏡像和容器注冊表的概念,使得應用程序的打包、分發(fā)和部署變得更加簡單和可靠。Docker 提供了豐富的命令行工具和 API,以及各種生態(tài)系統(tǒng)工具和服務,進一步擴展了其功能和應用場景。 -
開源和社區(qū)發(fā)展:
Docker 從一開始就采用了開源模式,并建立了一個活躍的社區(qū)。這使得開發(fā)者和用戶能夠貢獻代碼、提出問題、分享經(jīng)驗,并為 Docker 的發(fā)展做出貢獻。Docker 社區(qū)不斷推動技術的創(chuàng)新和改進,推出了許多有用的工具和項目,如 Docker Compose、Docker Swarm 和 Kubernetes 等。 -
Docker 的生態(tài)系統(tǒng):
Docker 生態(tài)系統(tǒng)已經(jīng)變得非常龐大和豐富,涵蓋了各種工具、服務和項目。除了核心的 Docker 引擎和工具鏈外,還有許多第三方軟件和服務提供商構建在 Docker 之上,為用戶提供了更多的功能和集成選項。
以下是 Docker 的一些關鍵概念和組件:
-
鏡像(Image):Docker 鏡像是一個只讀的模板,包含了運行應用程序所需的一切,包括代碼、運行時環(huán)境、庫文件、依賴項等。鏡像可以用作創(chuàng)建容器的基礎。
-
容器(Container):容器是從鏡像創(chuàng)建的運行實例。每個容器都是一個隔離的環(huán)境,包含了運行應用程序所需的所有內容。容器可以被啟動、停止、刪除,并且可以與其他容器進行通信。
-
Docker 引擎(Docker Engine):Docker 引擎是 Docker 的核心組件,負責管理容器的生命周期,包括創(chuàng)建、運行、停止和刪除容器。它還提供了與 Docker 守護進程通信的 API。
-
Docker Compose:Docker Compose 是一個用于定義和運行多個容器的工具。通過編寫一個 YAML 文件來定義應用程序的服務、網(wǎng)絡和卷等配置,然后使用 Docker Compose 命令來啟動、停止和管理整個應用程序的容器群。
-
Docker Hub:Docker Hub 是一個公共的 Docker 鏡像倉庫,可以在其中找到大量的官方和社區(qū)維護的鏡像。開發(fā)者可以將自己的鏡像推送到 Docker Hub 中,也可以從中拉取所需的鏡像。
Docker 的優(yōu)勢包括:
- 輕量級和可移植性:Docker 容器相對較小且獨立于宿主操作系統(tǒng),可以在不同的環(huán)境中以相同的方式運行,提供了良好的可移植性。
- 簡化部署和擴展:通過 Docker 鏡像,開發(fā)者可以輕松地部署和擴展應用程序,無需擔心環(huán)境差異和依賴項問題。
- 高效資源利用:Docker 利用操作系統(tǒng)層的虛擬化技術,可以在單個主機上運行多個容器,并共享主機的內核,提供了更高的資源利用率。
- 簡化開發(fā)流程:開發(fā)者可以在容器中構建和測試應用程序,并將容器作為開發(fā)環(huán)境進行交付,確保開發(fā)和生產(chǎn)環(huán)境的一致性。
Dockfile概念
Dockerfile 是用于定義和構建 Docker 鏡像的文本文件。它包含一系列指令,用于描述如何構建鏡像、安裝依賴、配置環(huán)境等。
以下是一些常見的 Dockerfile 指令和示例用法:
-
FROM:指定基礎鏡像,即構建新鏡像所基于的鏡像。例如,使用
FROM ubuntu:latest
指定以最新版本的 Ubuntu 作為基礎鏡像。 -
RUN:在鏡像中執(zhí)行命令。可以用于安裝軟件包、運行腳本等。例如,使用
RUN apt-get update && apt-get install -y package
安裝軟件包。 -
COPY 和 ADD:用于將文件或目錄復制到鏡像中。COPY 用于復制本地文件或目錄到鏡像,而 ADD 不僅可以復制文件和目錄,還可以解壓壓縮文件和遠程 URL。例如,使用
COPY app.py /app/
將本地的 app.py 文件復制到鏡像的 /app/ 目錄下。 -
WORKDIR:設置工作目錄,指定后續(xù)命令的工作路徑。例如,使用
WORKDIR /app
設置工作目錄為 /app。 -
ENV:設置環(huán)境變量??梢杂糜谂渲萌萜鞯倪\行環(huán)境。例如,使用
ENV PATH=/usr/local/bin:$PATH
設置環(huán)境變量 PATH。 -
EXPOSE:聲明容器運行時需要監(jiān)聽的端口。例如,使用
EXPOSE 80
聲明容器將監(jiān)聽80端口。 -
CMD 和 ENTRYPOINT:設置容器啟動時要執(zhí)行的命令。CMD 可以設置默認的容器啟動命令,而 ENTRYPOINT 則可以定義容器的入口點。例如,使用
CMD ["python", "app.py"]
設置容器默認執(zhí)行的命令為運行 app.py。
通過編寫 Dockerfile,開發(fā)者可以定義應用程序的構建過程、運行環(huán)境和啟動命令等,使得應用程序可以在不同的 Docker 環(huán)境中以相同的方式運行。使用 Dockerfile,可以實現(xiàn)快速、可重復和可擴展的鏡像構建過程。
接著通過 Dockerfile 構建鏡像并運行容器的流程如下:
-
編寫 Dockerfile:創(chuàng)建一個文本文件,并命名為 Dockerfile。在 Dockerfile 中,按照一定的語法規(guī)則編寫一系列指令,描述鏡像的構建過程、運行環(huán)境和啟動命令等。
-
構建鏡像:使用
docker build
命令來構建鏡像。在命令行中進入 Dockerfile 所在目錄,并執(zhí)行以下命令:docker build -t <image_name> . ``` 其中,`<image_name>` 是你要為鏡像指定的名稱,可以根據(jù)需要自定義。`.` 表示當前目錄,即 Dockerfile 所在的目錄。 在構建過程中,Docker 將按照 Dockerfile 中的指令逐步執(zhí)行,并在每個指令的基礎上創(chuàng)建一個鏡像層。每個鏡像層都包含了該指令所引入的更改和新增內容。
-
運行容器:構建完成后,可以使用
docker run
命令來運行容器,并基于構建的鏡像創(chuàng)建新的容器實例。執(zhí)行以下命令:docker run <image_name> ``` ``<image_name>` 是你構建的鏡像的名稱。 運行該命令后,Docker 將創(chuàng)建一個新的容器實例,并在容器內部執(zhí)行 Dockerfile 中指定的啟動命令。
此外,還有許多其他的 Dockerfile 指令和用法,可以根據(jù)具體需求進行深入學習和探索。Docker 官方提供了詳細的文檔和示例,供開發(fā)者參考和學習使用。
Docker-compose
在Docker中使用./mysql/data:/var/lib/mysql
進行掛載,可以將MySQL數(shù)據(jù)目錄掛載到主機上的特定目錄。這樣做的好處是,即使容器被刪除或重新創(chuàng)建,MySQL的數(shù)據(jù)仍然保留在主機上,從而實現(xiàn)數(shù)據(jù)的持久化。
當您使用這種方式掛載MySQL數(shù)據(jù)目錄時,表數(shù)據(jù)應該是可以同步的。因為表數(shù)據(jù)實際上存儲在MySQL數(shù)據(jù)目錄中的文件中,而掛載操作將主機上的目錄與容器中的目錄關聯(lián)起來。因此,對于MySQL容器中的表數(shù)據(jù)的更改將在主機上的相應文件中進行反映,反之亦然。
但是,需要注意以下幾點:
-
確保MySQL容器和主機上的目錄結構一致。如果MySQL容器內部的數(shù)據(jù)目錄結構與主機上的數(shù)據(jù)目錄結構不匹配,可能會導致數(shù)據(jù)同步的問題。
-
確保MySQL容器和主機上的目錄權限正確設置。MySQL容器需要對數(shù)據(jù)目錄具有適當?shù)淖x寫權限,以便能夠正確讀取和寫入數(shù)據(jù)。
-
在將數(shù)據(jù)目錄掛載到主機上之前,確保MySQL容器已經(jīng)停止運行,以避免對數(shù)據(jù)目錄的并發(fā)訪問問題。
總的來說,通過將MySQL數(shù)據(jù)目錄掛載到主機上,您可以實現(xiàn)數(shù)據(jù)的持久化,并且表數(shù)據(jù)應該可以在容器和主機之間同步。但是,在實際操作中,仍然需要注意目錄結構和權限等方面的設置,以確保數(shù)據(jù)的正確同步和訪問。文章來源:http://www.zghlxwxcb.cn/news/detail-768523.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-768523.html
??到這里,如果還有什么疑問??
??歡迎私信博主問題哦,博主會盡自己能力為你解答疑惑的!??
??如果對你有幫助,你的贊是對博主最大的支持!!??
到了這里,關于【云原生 | Docker】Docker核心概念 & 應用上手最佳流程的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!