2.docker安裝及原理


一. docker的架構

1.1 docker的架構

先來看docker官網給出的docker架構圖:

看官網,docker的架構描述: https://docs.docker.com/get-started/overview/

Docker使用客戶端-服務器架構。Docker 客戶端與Docker 守護進程進行對話,該守護進程完成了構建,運行和分發Docker容器的繁重工作。Docker客戶端和守護程序可以 在同一系統上運行,也可以將Docker客戶端連接到遠程Docker守護程序。Docker客戶端和守護程序在UNIX套接字或網絡接口上使用REST API進行通信。

從上圖我們也可以看出, 整體分為三個部分: docker客戶端, docker后台(相當於一個小型的linux), docker倉庫. 接下來一個一個看.

1. Docker客戶端--The Docker client

Docker客戶端是許多Docker用戶與Docker交互的主要方式。當您使用諸如之類的命令時docker run,客戶端會將這些命令發送到dockerd,以執行它們。該docker命令使用Docker API。Docker客戶端可以與多個守護程序通信。

2. Docker守護程序 -- The Docker daemon

Docker守護程序(dockerd)偵聽Docker API請求並管理Docker對象,例如圖像,容器,網絡和卷。守護程序還可以與其他守護程序通信以管理Docker服務。

3. Docker倉庫 -- Docker registries

Docker registries存儲Docker映像。Docker Hub是任何人都可以使用的公共注冊表,並且默認情況下,Docker已配置為在Docker Hub上查找映像。您可以運行自己的私人注冊表。如果使用Docker數據中心(DDC),則其中包括Docker可信registries(DTR)。

使用docker pulldocker run命令時,所需的圖像將從配置的注冊表中提取。使用該docker push命令時,會將映像推送到配置的注冊表。

1.2 docker的基本元素 -- Docker對象

通過上面的架構圖, 我們可以看到docker主要包含: 鏡像, 容器, 倉庫. 下面就來具體看看這幾個概念

1. images

一個圖像是用於創建一個碼頭工人容器指令的只讀模板。通常,一個映像基於另一個映像,並進行一些其他自定義。例如,您可以基於該ubuntu 映像構建映像,但是安裝Apache Web服務器和您的應用程序,以及運行該應用程序所需的配置詳細信息。

您可以創建自己的圖像,也可以僅使用其他人創建並在注冊表中發布的圖像。要構建自己的映像,您可以 使用簡單的語法創建一個Dockerfile,以定義創建映像並運行它所需的步驟。Dockerfile中的每個指令都會在映像中創建一個層。當您更改Dockerfile並重建映像時,僅重建那些已更改的層。與其他虛擬化技術相比,這是使映像如此輕巧,小型和快速的部分原因。

2. container

容器是圖像的可運行實例。您可以使用Docker API或CLI創建,啟動,停止,移動或刪除容器。您可以將容器連接到一個或多個網絡,將存儲連接到它,甚至根據其當前狀態創建新映像。

默認情況下,容器與其他容器及其主機之間的隔離程度相對較高。您可以控制容器的網絡,存儲或其他基礎子系統與其他容器或與主機的隔離程度。

容器由其映像以及在創建或啟動時為其提供的任何配置選項定義。刪除容器后,未存儲在持久性存儲中的狀態更改將消失。

3. 倉庫

倉庫是存放鏡像的地方, 分為共有倉庫和私有倉庫
共有倉庫: dockerHub(國外) , 阿里雲(國內)
私有倉庫: 自定義的倉庫

二.docker的安裝及應用

1. docker支持的centos版本

2. docker安裝的前提條件

  • 目前centos僅發行版本的內核支持docker
  • docker運行在centos7上, 要求系統為64位,系統內核版本為3.10以上
  • docker運行在centos6.5或更高版本上,要求系統64位,系統內核版本為2.6.32-431或者更高版本

uname命令打印系統相關信息

uname -r

我的服務器版本是5.10.23, 64位

查詢系統版本

cat /etc/redhat-release    或者  cat /etc/os-release

3. centos6.5及以上的安裝docker

安裝docker, 我們主要借助於幫助文檔, 文檔地址: https://docs.docker.com/engine/install/, 對照文檔安裝

第一步: 卸載舊版本的docker

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

如上圖所示, 表示之前沒有安裝過docker, 如果安裝過, 會提示,卸載完畢.

第二步: 安裝docker

官網給出, 安裝docker有三種方法:

  • 第一種: 是從倉庫安裝,
  • 第二種是通過RPM包安裝,
  • 第三種是通過腳本安裝.

我們這里采用第一種從倉庫安裝

1. 安裝docker前需要安裝的依賴包

yum install -y yum-utils

2. 設置鏡像倉庫

在一台新的主機上首次安裝docker engine之前, 需要先設置docker鏡像倉庫, 后面可以從鏡像倉庫安裝和更新docker.

鏡像倉庫官網給的是國外的, 我們盡量不用, 速度太慢

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

我們百度搜索, 找到阿里雲docker鏡像參考的地址, 國內使用這個

sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3. 安裝最新版docker引擎

安裝引擎之前, 先來安裝yml軟件包索引

yum makecache fast

這個命令什么意思呢? 科普一下

我們在更新yum源或者出現配置yum源之后,通常都會使用yum makecache 生成緩存

yum makecache fast
這個命令是將軟件包信息提前在本地緩存一份,用來提高搜索安裝軟件的速度

yum clean all
yum 會把下載的軟件包和header存儲在cache中而不自動刪除。如果覺得占用磁盤空間,可以使用yum clean指令清除緩存。

然后安裝docker

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

這里安裝了docker, docker-cli 和容器. docker-ce是社區版的意思, docker-ee是企業版. 通常我們使用的都是社區版的.

注意: 有很多朋友使用的linux服務器, 這里在執行這個命令的時候, 會報錯:

這里報錯的原因是, 阿里雲操作系統是Alibaba Cloud Linux, 而不是存粹的centOS, 這時我們可以參考阿里雲提供的docker安裝文檔: https://help.aliyun.com/document_detail/264695.html

4. 啟動docker

systemctl start docker

5. 檢查是否安裝成功

docker version

6. 拉取docker鏡像拉取helloworld

7. 配置阿里雲鏡像加速器

第一步:訪問國內阿里雲的網址
dev.aliyun.com

第二步:登錄

第三步: 獲取鏡像地址

在產品與服務-->搜索"容器鏡像服務" --> 鏡像工具 --> 鏡像加速器 --> 復制鏡像加速器地址
https://cr.console.aliyun.com/cn-hangzhou/instances/repositories

配置方法:

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

三. docker的底層原理

1. docker是怎么工作的?

docker是一個client-server結構的系統,Docker的守護進程運行在主機上, 然后通過Socket連接從客戶端訪問, 守護進程從客戶端接受命令並管理運行在主機上的容器, 容器,是一個運行時環境, 就是我們前面說到的集裝箱

客戶端通過socket連接到后台守護進程, 然后通過命令告訴守護進程, 調用容器. 可見容器和客戶端是互相隔離的. 我們可以把容器理解為一個小型的linux, 他有自己的端口號, 比如mysql容器端口號是3306, 容器中的端口, 通過客戶端是不能直接訪問的. 我們需要做端口映射.

2. 虛擬機和容器的區別

docker將虛擬機的Hypervisor和操作系統應將cpu, 內存等去掉了. 替換成了Docker Engine. 而這兩塊恰恰就是虛擬機笨重的地方. docker共享了宿主機的操作系統, 內核, cpu. 省略了自己構建的過程.

docker容器 虛擬機VM
操作系統 與宿主機共享OS 宿主機OS上運行虛擬機OS
存儲大小 鏡像小, 便於存儲和傳輸 鏡像龐大(vmdk, vdi等)
運行性能 幾乎無額外性能損失 操作系統額外的CPU,內存消耗
移植性 輕便,靈活,適用於linux系統 笨重, 與虛擬機技術耦合度高
硬件親和性 面向軟件開發者 面向硬件運維者
部署速度 快速, 秒級 較慢, 10s以上

以上是虛擬機和容器的區別


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM