高中生也能讀懂的Docker入門教程

来源:https://www.cnblogs.com/woshijiuke/archive/2019/06/27/11098405.html
-Advertisement-
Play Games

Docker 是 Golang 編寫的, 自 2013 年推出以來,受到越來越多的開發者的關註。如果你關註最新的技術發展,那麼你一定聽說過 Docker。不管是雲服務還是微服務(Microservices),越來越多的廠商都開始基於 Docker 作為基礎設施自動化的工具。那麼什麼是 Docker? ...


Docker 是 Golang 編寫的, 自 2013 年推出以來,受到越來越多的開發者的關註。如果你關註最新的技術發展,那麼你一定聽說過 Docker。不管是雲服務還是微服務(Microservices),越來越多的廠商都開始基於 Docker 作為基礎設施自動化的工具。那麼什麼是 Docker?Docker與傳統的虛擬機有什麼區別?為何要採用 Docker?如何使用 Docker?

 

本文,就針對上述提到的問題,來簡單介紹下 Docker。

 

什麼是 Docker

 

Docker 是開源的應用容器引擎。

 

Docker 可以讓你將所有應用軟體以及它的以來打包成軟體開發的標準化單元。

 

Docker 容器將軟體以及它運行安裝所需的一切文件(代碼、運行時、系統工具、系統庫)打包到一起,這就保證了不管是在什麼樣的運行環境,總是能以相同的方式運行。就好像 Java 虛擬機一樣,“一次編寫,到處運行(Write once, run anywhere)”,而 Docker 是“一次構建,到處運行(Build once,run anywhere)”。

Docker 是一種“容器即服務”(Docker Containers as a Service ,簡稱 CaaS),使得開發和IT運營團隊可以對於應用的構建、發佈、運行更加敏捷和可控。

 

概括的說:Docker 是為開發人員和系統管理員用於構建、發佈、並運行分散式應用程式的開放式平臺。該平臺由 Docker 引擎(一個便攜、輕巧的運行時和打包工具) 和 Docker Hub (一個共用應用程式和自動化工作流的雲服務)等組成。Docker 可以使應用程式從組件迅速組裝並消除了開發、質量保證和生產環境之間的摩擦問題。這樣一來,IT部門可以更快地發佈,而這些應用程式不管是運行在筆記本電腦、數據中心的虛擬機,還是任何的雲,其運行過程和結果都是一致的。

 

我們再來看下 Docker 的 Logo 。很明顯,這是一隻鯨魚,它托著許多集裝箱。我們可以把宿主機可當做這隻鯨魚,把相互隔離的容器可看成集裝箱,每個集裝箱中都包含自己的應用程式。這 Logo 簡直的太形象了!

 

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

Docker 的優點

 

  • 輕量級:所有容器在一臺機器上共用同一個操作系統內核,這樣他們立即開始,並更有效地利用記憶體。Image 是從分層文件系統的構建,這樣他們能夠共用公共文件,使得磁碟使用率和 Image 的下載更加高效。

  • 開放:Docker 容器是基於開發的標準,允許容器運行在主流的 Linux 發佈版和 Microsoft 操作系統作為所有的基礎設施。

  • 安全:容器使得應用程式彼此隔離,而基礎架構同時為應用程式提供了額外的保護層。

 

Docker 與 虛擬機的區別

 

容器與虛擬機有著類似的資源隔離和分配的優點,但不同的架構方法使容器能夠更加便攜,高效等。

 

虛擬機的架構

 

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

 

每個虛擬機都包括應用程式、必要的二進位文件和庫以及一個完整的客戶操作系統(Guest OS),儘管它們被分離,它們共用並利用主機的硬體資源,將近需要十幾個 GB 的大小。

 

容器的架構

 

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

 

容器包括應用程式及其所有的依賴,但與其他容器共用內核。它們以獨立的用戶空間進程形式運行在主機操作系統上。他們也不依賴於任何特定的基礎設施,Docker 容器可以運行在任何電腦上,任何基礎設施和任何雲上。

 

Docker 的容器利用了 LXC,管理利用了 namespaces 來做許可權的控制和隔離,cgroups 來進行資源的配置,並且還通過 aufs 來進一步提高文件系統的資源利用率,而這些技術都不是 Docker 獨創。

 

LXC

 

LXC 與虛擬機的不同之處在於,它是一個操作系統級別的虛擬化環境,而不是硬體虛擬化環境。他們都做同樣的事情,但 LXC 是操作系統級別的虛擬化環境,虛擬環境有它自己的進程和網路空間,而不是創建一個完整成熟的虛擬機。因此,一個 LXC 虛擬操作系統具有最小的資源需求,並啟動只需幾秒鐘。

 

正如你可以在下圖中看到的,左側是 LXC 虛擬的 Ubuntu ,預設安裝使用 11 MB 大小。

 

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

 

Docker 與 Microservices 的關係

 

Microservices(微服務) 依賴於“基礎設施自動化”,而 Docker 正是“基礎設施自動化”的利器。可以說 Docker 的火爆,一定程度上也帶動了微服務架構的興起,而微服務的廣泛應用也促進了 Docker 繁榮。可以說兩者相輔相成。

 

有關微服務的介紹,可以移步至《簡述 Microservices(微服務)》。

http://www.importnew.com/24651.html

 

為什麼要用 Docker

 

  • 開發更加敏捷:Docker 讓開發人員可以自由定義環境,創建和部署的應用程式更快、更容易,IT 運維人員快速應對變化也更加靈活性。

  • 更加可控:Docker 使得開發人員保存從基礎設施到應用的代碼,幫助 IT 運維人管理擁有標準的、安全的、可擴展的操作環境。

  • 高可移植性:Docker 允許自由選擇,可以是從筆記本電腦到一個團隊,從私人基礎設施到公共雲提供商。

這樣,你可以專註於開發應用,其他的繁瑣事交給 Docker 去做吧。

 

如何使用 Docker

 

這可真是一個大話題,如果完整闡述足夠寫一本書了。好在我們的目的是做入門普及,因此我們就簡單講一下 Docker 的安裝、基本使用和常用命令。

 

Docker安裝

 

建議在linux環境下安裝Docker,window環境搭建比較複雜且容易出錯,使用Centos7+yum來安裝Docker環境很方便。

Docker 軟體包已經包括在預設的 CentOS-Extras 軟體源里。因此想要安裝 docker,只需要運行下麵的 yum 命令:

 

 

yum install docker

 

安裝完成後,使用下麵的命令來啟動 docker 服務,並將其設置為開機啟動:

 

 


service docker start
chkconfig docker on

 

LCTT 譯註:此處採用了舊式的 sysv 語法,如採用CentOS 7中支持的新式 systemd 語法,如下:

 

 


service docker start
chkconfig docker on

 

測試

 

 

docker version

 

輸入上述命令,返回docker的版本相關信息,證明docker安裝成功。

 

Hello World

 

下麵,我們通過最簡單的 image 文件"hello world",感受一下 Docker。

 

因為國內連接 Docker 的官方倉庫很慢,因此我們在日常使用中會使用Docker 中國加速器。通過 Docker 官方鏡像加速,中國區用戶能夠快速訪問最流行的 Docker 鏡像。該鏡像托管於中國大陸,本地用戶現在將會享受到更快的下載速度和更強的穩定性,從而能夠更敏捷地開發和交付 Docker 化應用。

 

Docker 中國官方鏡像加速可通過 registry.docker-cn.com訪問。該鏡像庫只包含流行的公有鏡像,私有鏡像仍需要從美國鏡像庫中拉取。

 

修改系統中docker對應的配置文件即可,如下:

 

 


vi /etc/docker/daemon.json
#添加後
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"live-restore": true
}

 

運行下麵的命令,將 image 文件從倉庫抓取到本地。

 

 

docker pull library/hello-world

 

上面代碼中,docker image pull是抓取 image 文件的命令。library/hello-world是 image 文件在倉庫裡面的位置,其中library是 image 文件所在的組,hello-world是 image 文件的名字。

 

抓取成功以後,就可以在本機看到這個 image 文件了。

 

 


docker images
#顯示結果
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/hello-world latest f2a91732366c 3 months ago 1.848 kB

 

現在,運行這個 image 文件。

 

 


docker run hello-world
#顯示結果
Hello from Docker!
This message shows that your installation appears to be working correctly.
...

 

輸出這段提示以後,hello world就會停止運行,容器自動終止。有些容器不會自動終止,因為提供的是服務,比如Mysql鏡像等。

 

常用命令

 

除過以上我們使用的Docker命令外,Docker還有一些其它常用的命令。

 

拉取docker鏡像

 

 

docker pull image_name

 

查看宿主機上的鏡像,Docker鏡像保存在/var/lib/docker目錄下:

 

 

docker images

 

刪除鏡像

 

 

docker rmi docker.io/tomcat:7.0.77-jre7 或者 docker rmi b39c68b7af30

 

查看當前有哪些容器正在運行

 

 

docker ps

 

查看所有容器

 

 

docker ps -a

 

啟動、停止、重啟容器命令:

 

 


docker start container_name/container_id
docker stop container_name/container_id
docker restart container_name/container_id

 

後臺啟動一個容器後,如果想進入到這個容器,可以使用attach命令:

 

 

docker attach container_name/container_id

 

刪除容器的命令

 

 

docker rm container_name/container_id

 

查看當前系統Docker信息

 

 

docker info

 

從Docker hub上下載某個鏡像:

 

 


docker pull centos:latest
docker pull centos:latest

 

執行docker pull centos會將Centos這個倉庫下麵的所有鏡像下載到本地repository。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • LINQ是我最喜歡的功能之一,程式中到處是data.Where(x=x>5).Select(x)等等的代碼,她使代碼看起來更好,更容易編寫,使用起來也超級方便,foreach使迴圈更加容易,而不用for int..,linq用起來那麼爽,那麼linq內部是如何實現的?我們如何自定義linq?我們這裡 ...
  • 【一】 摘要 never是純c#語言開發的一個框架,同時可在netcore下運行。 該框架github地址:https://github.com/shelldudu/never 同時,配合never_web,never_component,never_application (demo)可對比代碼學 ...
  • /// <summary> /// 數據導出 /// </summary> /// <param name="dataGridView"></param> /// <returns></returns> private bool dataGridViewToCSV(DataGridView data ...
  • 爬蟲和反爬蟲是一條很長的路,遇到過js加密,flash加密、重點信息生成圖片、css圖片定位、請求頭.....等手段;今天我們來聊一聊字體; 那是一個偶然我遇到了這個網站,把價格信息全加密了;瀏覽器展示: 查看源碼後是這樣: 當時突然恍然大悟,以為不就是把價格換成 &#xxxxx: .. 字元實體了 ...
  • 1,GitHub下載地址:https://github.com/MicrosoftArchive/redis/tags 2,進行安裝(一直下一步即可) 註:我這裡安裝的地址是 D:Redis 3,在電腦中找到 “控制面板”--》“管理工具”--》“服務” ,查看Redis服務是否已經啟用 4,在wi ...
  • 我有一個朴素的請求:我想在 .NETCore 中使用屬性註入,我想要 FromServiceAttrbute 在屬性上註入的功能。 ...
  • 因為最近在倒騰linux,想安裝新版本的nginx,找了一圈教程沒有找到對應的教程,在稍微倒騰了一會之後終於成功的安裝了最新版。 伺服器環境為centos,接下來是詳細步驟: 安裝必要依賴插件 創建文件夾並切換過去 下載安裝包 (同樣如果想安裝其他的版本,可以去下麵官網鏈接,選擇其他版本的鏈接進行拷 ...
  • ```pythoncentos常用命令: 查看所有運行的單元:systemctl list-units 查看所有單元:systemctl list-units --all 查看所有啟動的服務:systemctl list-units --type=service 對應以前的chkconfig --l ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...