如何安裝和使用Docker

techlead_krischang發表於2024-03-29

本文深入解析Docker,一種革命性的容器化技術,從其基本概念、架構和元件,到安裝、配置和基本命令操作。文章探討了Docker在虛擬化、一致性環境搭建及微服務架構中的關鍵作用,以及其在雲端計算領域的深遠影響,為讀者提供了關於Docker技術全面且深入的洞見。

關注【TechLeadCloud】,分享網際網路架構、雲服務技術的全維度知識。作者擁有10+年網際網路服務架構、AI產品研發經驗、團隊管理經驗,同濟本復旦碩,復旦機器人智慧實驗室成員,阿里雲認證的資深架構師,專案管理專業人士,上億營收AI產品研發負責人。

file

一、Docker簡介

file
Docker是一種開源容器化技術,它允許開發者將應用及其依賴打包到一個輕量級、可移植的容器中。這種方法確保了應用在不同環境中的一致性和效率。Docker的出現標誌著雲端計算和微服務架構的一個重要轉折點。

Docker的起源和發展

Docker最初是由Solomon Hykes在DotCloud公司(後改名為Docker Inc.)開發的一個內部專案。自2013年首次公開發布以來,Docker迅速成為容器化技術的代名詞,受到了廣泛的關注和採用。

Docker的工作原理

Docker透過使用Linux核心的特性(如cgroups和namespace)來隔離應用的執行環境。這不僅使得容器執行高效,而且還提高了安全性。Docker容器與虛擬機器相比,由於不需要完整的作業系統,因此更加輕量和快速。

Docker的核心元件

  • Docker Engine:負責建立和管理容器。
  • Docker Images:包含應用及其執行環境的藍圖。
  • Docker Containers:執行中的映象例項。
  • Docker Hub:一個共享和儲存容器映象的公共服務。

Docker的優勢

  • 一致性:在任何支援Docker的環境中以相同方式執行應用。
  • 便攜性:容易遷移和擴充套件。
  • 隔離性:提高安全性和穩定性。
  • 資源高效:與傳統虛擬機器相比,更少的效能開銷。

Docker的應用場景

  • 微服務架構:Docker非常適合微服務架構,每個服務可以獨立容器化。
  • 持續整合/持續部署(CI/CD):Docker簡化了構建、測試和部署流程。
  • 開發和測試:提供一致的開發、測試環境。
  • 雲原生應用:Docker是構建和部署雲原生應用的基礎。

Docker與虛擬化技術的比較

雖然Docker和傳統的虛擬化技術(如VMware、Hyper-V)在某些方面有相似之處,但它們在效能、資源利用率和速度方面有顯著的區別。Docker透過共享主機的核心,減少了資源佔用,提高了啟動速度。


二、Docker架構和元件全解

file
Docker的架構和元件是理解其工作原理和應用的關鍵。這部分將深入探討Docker的核心元件、架構設計,以及它們如何共同工作來提供一個高效、靈活的容器化平臺。

Docker的總體架構

Docker採用客戶端-伺服器(C/S)架構。這種架構包括一個伺服器端的Docker守護程序(Docker Daemon)和一個客戶端命令列介面(CLI)。守護程序負責建立、執行和管理容器,而CLI則允許使用者與Docker守護程序互動。

Docker Daemon(守護程序)

  • 執行在宿主機上。
  • 負責處理Docker API請求,並管理Docker物件,如映象、容器、網路和卷。

Docker Client(客戶端)

  • 使用者透過Docker客戶端與Docker守護程序互動。
  • 傳送命令到Docker Daemon,如docker rundocker build等。

Docker Registry(註冊中心)

  • 用於儲存Docker映象。
  • Docker Hub是最常用的公共註冊中心,但使用者也可以搭建私有註冊中心。

Docker Images(映象)

Docker映象是一個輕量級、可執行的包,包含執行應用所需的一切:程式碼、執行時、庫、環境變數和配置檔案。

映象構成

  • 由多層只讀檔案系統堆疊而成。
  • 每層代表Dockerfile中的一個指令。
  • 利用聯合檔案系統(UnionFS)技術來最佳化儲存和提高效率。

映象版本管理和層快取

  • 支援標籤(Tagging),用於版本控制。
  • 層快取用於加速構建和部署過程。

Docker Containers(容器)

容器是Docker映象的執行例項。它在映象的頂層新增一個可寫層,並透過Docker守護程序在使用者空間中執行。

容器與虛擬機器的區別

  • 容器直接在宿主機的核心上執行,不需要完整的作業系統。
  • 資源佔用少,啟動速度快。

容器的生命週期管理

  • 建立、啟動、停止、移動和刪除。
  • 可以透過Docker CLI或API進行管理。

Docker Networks(網路)

Docker網路提供了容器之間以及容器與外部世界之間的通訊機制。

網路型別

  • Bridge:預設網路,適用於同一宿主機上的容器通訊。
  • Host:移除網路隔離,容器直接使用宿主機的網路。
  • Overlay:用於不同宿主機上的容器間通訊。

網路配置

  • 支援埠對映和容器連線。
  • 提供DNS服務,容器可以透過名稱互相發現和通訊。

Docker Volumes(卷)

Docker卷是一種持久化和共享容器資料的機制。

卷的型別

  • 持久化卷:資料儲存在宿主機上,即使容器刪除,資料仍然保留。
  • 共享卷:允許不同容器共享資料。

資料管理

  • 可以在執行時動態掛載。
  • 支援資料備份、遷移和恢復。

三、Docker安裝與配置

file
Docker的安裝和配置是開始使用Docker的第一步。本節將覆蓋Docker在主流伺服器作業系統上的安裝步驟和基本配置方法。

Docker在Linux上的安裝

Ubuntu系統

  1. 更新軟體包索引:sudo apt-get update
  2. 安裝必要的包以允許apt透過HTTPS使用倉庫:sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
  3. 新增Docker官方GPG金鑰:curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  4. 新增Docker倉庫:sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  5. 再次更新軟體包索引:sudo apt-get update
  6. 安裝Docker CE(社群版):sudo apt-get install docker-ce

CentOS系統

  1. 安裝必要的包:sudo yum install -y yum-utils
  2. 新增Docker倉庫:sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  3. 安裝Docker CE:sudo yum install docker-ce
  4. 啟動Docker守護程序:sudo systemctl start docker

Docker在Windows Server上的安裝

對於Windows Server,可以使用Docker EE(企業版)。

  1. 啟用容器功能:在伺服器管理器中,新增“容器”角色。
  2. 安裝Docker:執行PowerShell指令碼來安裝Docker EE。
    Install-Module DockerProvider
    Install-Package Docker -ProviderName DockerProvider -RequiredVersion preview
    
  3. 啟動Docker服務:Start-Service Docker

Docker在macOS上的安裝

Docker Desktop for Mac是在macOS上執行Docker的最佳選擇。

  1. 下載Docker Desktop for Mac安裝程式。
  2. 雙擊下載的.dmg檔案,然後拖動Docker圖示到應用程式資料夾。
  3. 開啟Docker應用程式,完成安裝。

Docker基本配置

使用者組配置

  • 將使用者新增到docker組,以避免每次使用docker命令時都需要sudo
    sudo usermod -aG docker your-username
    

配置Docker啟動項

  • 在Linux上,設定Docker隨系統啟動:

    sudo systemctl enable docker
    

    配置Docker映象加速

  • 對於某些地區,可能需要配置映象加速器以提高拉取速度:

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://your-mirror-url"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

四、Docker基本命令

file
Docker的基本命令是操作和管理Docker容器和映象的基石。為了便於理解和參考,以下以表格形式列出了Docker的主要命令及其功能描述。

命令 功能描述
docker run 建立並啟動一個新容器
docker start 啟動一個或多個已停止的容器
docker stop 停止一個執行中的容器
docker restart 重啟容器
docker rm 刪除一個或多個容器
docker rmi 刪除一個或多個映象
docker ps 列出容器
docker images 列出映象
docker pull 從映象倉庫拉取或更新指定映象
docker push 將映象推送到映象倉庫
docker build 透過Dockerfile構建映象
docker exec 在執行的容器中執行命令
docker logs 獲取容器的日誌
docker inspect 獲取容器/映象的詳細資訊
docker network create 建立一個新的網路
docker volume create 建立一個新的卷
docker attach 連線到正在執行的容器
docker cp 從容器中複製檔案/目錄到宿主機,反之亦然
docker diff 檢查容器檔案系統的更改
docker commit 從容器建立新的映象
docker login 登入到Docker映象倉庫
docker logout 從Docker映象倉庫登出
docker search 在Docker Hub中搜尋映象
docker save 將一個或多個映象儲存到檔案
docker load 從檔案載入映象
docker tag 為映象建立一個新的標籤
docker port 列出容器的埠對映或指定容器的特定對映
docker top 顯示一個容器中執行的程序

五、總結

透過對Docker的深入探討,我們可以看到Docker作為一種現代化的容器化技術,在技術領域的影響是多方面的。從Docker的簡介到其架構和元件的全面解析,再到實際的安裝、配置和基本命令操作,我們瞭解了Docker如何將複雜的應用容器化過程變得簡單高效。

Docker的技術革新

  1. 輕量級虛擬化:Docker採用的容器技術,與傳統的虛擬機器相比,極大地減少了資源消耗,提高了啟動速度和效能,這對於資源密集型的應用來說是一個重大突破。

  2. 一致性環境:Docker透過容器來保證應用在不同環境中的一致性,解決了“在我的機器上可以執行”的常見問題,這在持續整合和持續部署(CI/CD)中尤為重要。

  3. 微服務架構的推動者:Docker的出現和普及推動了微服務架構的發展。它使得開發者可以將應用分解為更小、更易管理的部分,從而提高了系統的可維護性和可擴充套件性。

Docker在雲端計算領域的影響

  1. 雲原生應用的基石:Docker是構建雲原生應用的關鍵。它不僅支援應用的快速部署和擴充套件,還透過其生態系統(如Kubernetes)支援高階的容器編排。

  2. 資源最佳化:在雲環境中,資源的有效利用是核心考慮。Docker透過減少額外的作業系統開銷,使得在相同的物理資源上可以執行更多的應用例項。

  3. 多雲和混合雲策略的加速器:Docker的可移植性使得它成為實現多雲和混合雲策略的理想選擇。企業可以輕鬆地將應用遷移至不同的雲服務提供商,或在私有云和公有云之間無縫遷移。

未來展望

Docker已經成為現代軟體開發和運維的一個不可或缺的部分,但技術永遠在發展。未來,我們可以預見到容器技術將進一步整合更多的安全特性,提供更加智慧的資源管理,以及更緊密地與新興的雲原生技術和服務整合,如函式即服務(FaaS)、無伺服器計算等。

綜上所述,Docker不僅僅是一個技術工具,它代表了一種關於如何構建、部署和管理應用的新思維方式,這對於任何涉足雲端計算、雲原生和軟體工程領域的專業人士而言,都是至關重要的。

關注【TechLeadCloud】,分享網際網路架構、雲服務技術的全維度知識。作者擁有10+年網際網路服務架構、AI產品研發經驗、團隊管理經驗,同濟本復旦碩,復旦機器人智慧實驗室成員,阿里雲認證的資深架構師,專案管理專業人士,上億營收AI產品研發負責人。
如有幫助,請多關注
TeahLead KrisChang,10+年的網際網路和人工智慧從業經驗,10年+技術和業務團隊管理經驗,同濟軟體工程本科,復旦工程管理碩士,阿里雲認證雲服務資深架構師,上億營收AI產品業務負責人。

相關文章