初識docker

oliver-l發表於2021-03-24

開始學習docker相關知識,這裡記錄一些相關的知識點掃掃盲

Docker 能做什麼?

眾所周知,Docker 是一個用於開發,釋出和執行應用程式的開放平臺。通俗地講,Docker 類似於集裝箱。在一艘大船上,各種貨物要想被整齊擺放並且相互不受到影響,我們就需要把各種貨物進行集裝箱標準化。有了集裝箱,我們就不需要專門運輸水果或者化學用品的船了。我們可以把各種貨品通過集裝箱打包,然後統一放到一艘船上運輸。Docker 要做的就是把各種軟體打包成一個集裝箱(映象),然後分發,且在執行的時候可以相互隔離。

Docker 核心概念

映象

映象是什麼呢?通俗地講,它是一個只讀的檔案和資料夾組合。它包含了容器執行時所需要的所有基礎檔案和配置資訊,是容器啟動的基礎。所以你想啟動一個容器,那首先必須要有一個映象。映象是 Docker 容器啟動的先決條件。

映象是一個只讀的 Docker 容器模板,包含啟動容器所需要的所有檔案系統結構和內容。簡單來講,映象是一個特殊的檔案系統,它提供了容器執行時所需的程式、軟體庫、資源、配置等靜態資料。即映象不包含任何動態資料,映象內容在構建後不會被改變。

容器

容器是什麼呢?容器是 Docker 的另一個核心概念。通俗地講,容器是映象的執行實體。映象是靜態的只讀檔案,而容器帶有執行時需要的可寫檔案層,並且容器中的程式屬於執行狀態。即容器執行著真正的應用程式。容器有初建、執行、停止、暫停和刪除五種狀態。

雖然容器的本質是主機上執行的一個程式,但是容器有自己獨立的名稱空間隔離和資源限制。也就是說,在容器內部,無法看到主機上的程式、環境變數、網路等資訊,這是容器與直接執行在主機上程式的本質區別。

倉庫

Docker 的映象倉庫類似於程式碼倉庫,用來儲存和分發 Docker 映象。映象倉庫分為公共映象倉庫和私有映象倉庫。

映象、容器、倉庫,三者之間的聯絡

初識docker

映象是容器的基石,容器是由映象建立的。一個映象可以建立多個容器,容器是映象執行的實體。倉庫就非常好理解了,就是用來存放和分發映象的。

docker安裝

Docker 是跨平臺的解決方案,它支援在當前主流的各大平臺安裝,包括 Ubuntu、RHEL、CentOS、Debian 等 Linux 發行版,同時也可以在 OSX 、Microsoft Windows 等非 Linux 平臺下安裝使用。

演示系統:centos7.3

解除安裝已有 Docker

如果你已經安裝過舊版的 Docker,可以先執行以下命令解除安裝舊版 Docker。

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

目前我的系統是沒有安裝docker的

初識docker

首次安裝 Docker 之前,需要新增 Docker 安裝源。新增之後,我們就可以從已經配置好的源,安裝和更新 Docker。新增 Docker 安裝源的命令如下:

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

初識docker

顯示沒有這個命令,我們這裡安裝一下,使用命令yum -y install yum-utils

安裝完成後,就可以使用該命令配置docker安裝源了

初識docker

正常情況下,直接安裝最新版本的 Docker 即可,因為最新版本的 Docker 有著更好的穩定性和安全性。你可以使用以下命令安裝最新版本的 Docker。

sudo yum install docker-ce docker-ce-cli containerd.io

初識docker

安裝完成後,使用以下命令啟動 Docker。

sudo systemctl start docker

安裝完成後,我們需要使用以下命令啟動一個 hello world 的容器。

sudo docker run hello-world

初識docker

ok,以上我們就完成了docker的安裝

docker基本操作

映象操作

初識docker

  • 拉取映象,使用docker pull命令拉取遠端倉庫的映象到本地 ;
  • 重新命名映象,使用docker tag命令“重新命名”映象 ;
  • 檢視映象,使用docker image ls或docker images命令檢視本地已經存在的映象 ;
  • 刪除映象,使用docker rmi命令刪除無用映象 ;
  • 構建映象,構建映象有兩種方式。第一種方式是使用docker build命令基於 Dockerfile 構建映象,也是我比較推薦的映象構建方式;第二種方式是使用docker commit命令基於已經執行的容器提交為映象。

容器的生命週期是容器可能處於的狀態,容器的生命週期分為 5 種。

  • created:初建狀態
  • running:執行狀態
  • stopped:停止狀態
  • paused: 暫停狀態
  • deleted:刪除狀態

各生命週期之前的轉換關係如圖所示:

初識docker

通過docker create命令生成的容器狀態為初建狀態,初建狀態通過docker start命令可以轉化為執行狀態,執行狀態的容器可以通過docker stop命令轉化為停止狀態,處於停止狀態的容器可以通過docker start轉化為執行狀態,執行狀態的容器也可以通過docker pause命令轉化為暫停狀態,處於暫停狀態的容器可以通過docker unpause轉化為執行狀態 。處於初建狀態、執行狀態、停止狀態、暫停狀態的容器都可以直接刪除。

當使用docker run建立並啟動容器時,Docker 後臺執行的流程為:

  • Docker 會檢查本地是否存在 busybox 映象,如果映象不存在則從 Docker Hub 拉取 busybox 映象;
  • 使用 busybox 映象建立並啟動一個容器;
  • 分配檔案系統,並且在映象只讀層外建立一個讀寫層;
  • 從 Docker IP 池中分配一個 IP 給容器;
  • 執行使用者的啟動命令執行映象。

常見的docker命令可檢視Docker 命令大全

docker安裝nginx

使用命令docker pull nginx拉取nginx映象,執行完成後,通過docker images檢視映象,可檢視到nginx映象已經拉取成功

初識docker

使用docker run -p 80:80 --name nginxRun -itd nginx執行映象,並使用docker ps檢視執行的映象,可檢視到nginxRun容器正在執行中
初識docker

通過ip可正常訪問nginx
初識docker

ok,到這裡也算入門了,接下來繼續搭建環境

本作品採用《CC 協議》,轉載必須註明作者和本文連結