目錄
- Centos7 安裝 Docker
- Docker 架構node
目前 docker 有三個分支,moby、docker-ce、docker-eelinux
moby 是繼承了原先的docker的項目,是社區維護的的開源項目,誰均可以在moby的基礎打造本身的容器產品。sql
docker-ce 是docker公司維護的開源項目,是一個基於moby項目的免費的容器產品docker
docker-ee 是docker公司維護的閉源產品,是docker公司的商業產品。json
這裏在 CentOS 7 上 經過 yum 安裝 docker-cevim
[root@node1 ~]# uname -r 3.10.0-327.el7.x86_64 [root@node1 ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core)
清華yum 源關於 docker-ce 的安裝過程已經很清楚了:https://mirror.tuna.tsinghua.edu.cn/help/docker-ce/centos
安裝依賴: [root@node1 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 下載 repo 文件: [root@node1 ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo 軟件倉庫替換爲 TUNA [root@node1 ~]# sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
查看docker-ce 版本:bash
目前安裝版本是:19.03.3服務器
[root@node1 ~]# yum install docker-ce -y 安裝完成,啓動服務: [root@node1 ~]# systemctl start docker
查看 docker 相關信息:網絡
[root@node1 ~]# docker info
運行 docker info 出現告警信息:
WARNING: bridge-nf-call-iptables is disabled WARNING: bridge-nf-call-ip6tables is disabled
解決辦法:
[root@node1 ~]# vim /etc/sysctl.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 [root@node1 ~]# sysctl -p
再次運行 docker info
出現如上告警信息,建議升級到 CentOS 7.4 以上版本,xfs 原生支持。
告警信息:不推薦使用devicemapper存儲驅動程序,它將在未來的版本中被刪除。
在docker 19版本中,再也不推薦使用 devicemapper 存儲驅動程序,須要切換到 overlayfs,那什麼是 overlayfs?
首先,overlayfs是一種文件系統,也是目前dokcer在使用的最新的文件系統,其餘的文件系統還有:aufs、device mapper等。而 overlayfs 其實和 aufs 是相似的。更準確的說,overlayfs,實際上是 Linux 文件系統的一種上層文件系統。下面的底層的文件系統格式,是支持overlayfs的:
如何查看當前操做系統是否支持 overlay
[root@node1 ~]# lsmod | egrep overlay
若是沒有輸出,表示不支持,能夠經過下面的命令開啓overlay
[root@node1 ~]# modprobe overlay
須要注意的是:
xfs文件系統的 d_type是什麼
d_type 是 Linux 內核的一個術語,表示 「目錄條目類型」,而目錄條目,實際上是文件系統上目錄信息的一個數據結構。d_type,就是這個數據結構的一個字段,這個字段用來表示文件的類型,是文件,仍是管道,仍是目錄仍是套接字等。
d_type 從 Linux 2.6 內核開始就已經支持了,只不過雖然 Linux 內核雖然支持,但有些文件系統實現了 d_type,而有些,沒有實現,有些是選擇性的實現,也就是須要用戶本身用額外的參數來決定是否開啓d_type的支持。
爲何docker在overlay2(xfs文件系統)須要d_type
不管是 overlay,仍是 overlay2,它們的底層文件系統都是 overlayfs 文件系統。而 overlayfs 文件系統,就會用到 d_type 這個東西用來文件的操做是被正確的處理了。換句話說,docker只要使用 overlay 或者 overlay2,就等於在用 overlayfs,也就必定會用到 d_type。
docker info 用來檢測你docker服務,是否在使用overlay的時候正確的使用 d_type。若是用了 overlay/overlay2,但 d_type 沒有開,就報警告。
若是在不支持 d_typ 的 overlay/overlay 驅動下使用docker,也就意味着 docker 在操做文件的時候,可能會遇到一些錯誤,好比 沒法刪除某些目錄或文件,設置文件或目錄的權限或用戶失敗等等。這些都是不可預料的錯誤。舉個具體的場景,就是,docker構建的時候,可能在構建過程當中,刪除文件等操做失敗,致使構建中止。
如何檢測當前的文件系統,是否支持 d_type ?
其中的 ftype,1表示支持 d_type,0表示不支持。
所以要處理這個錯誤,在安裝操做系統的時候就須要作好準備:
.
由於這裏是虛擬機,經過添加一塊磁盤,格式化後進行掛載使用。
[root@node1 ~]# systemctl stop docker [root@node1 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 4G 0 rom /mnt/centos7 vda 252:0 0 100G 0 disk ├─vda1 252:1 0 500M 0 part /boot └─vda2 252:2 0 99.5G 0 part ├─centos-root 253:0 0 50G 0 lvm / ├─centos-swap 253:1 0 7.9G 0 lvm [SWAP] └─centos-home 253:2 0 41.6G 0 lvm /home vdb 252:16 0 10G 0 disk
這裏使用 vdb進行分區並掛載做爲 docker 的文件系統。
分區
[root@node1 ~]# fdisk /dev/vdb
格式化
掛載
[root@node1 ~]# mount /dev/vdb1 /var/lib/docker
啓動 docker 服務
[root@node1 ~]# systemctl start docker
告警解除,而文件啓動更改成默認的 overlay2 文件系統格式。
測試 docker 運行:
輸出這段提示之後,hello world 就會中止運行,容器自動終止。有些容器不會自動終止,由於提供的是服務,好比Mysql鏡像等。
Docker 提供了一套簡單實用的命令來建立和更新鏡像,能夠經過網絡直接下載一個已經建立好了的應用鏡像,並經過 Docker RUN 命令就能夠直接使用。當鏡像經過 RUN 命令運行成功後,這個運行的鏡像就是一個 Docker 容器,容器能夠理解爲一個輕量級的沙箱, Docker 利用容器來運行和隔離應用,容器是能夠被啓動、中止、刪除的,這並不會影響 Docker 鏡像。
Docker 客戶端是 Docker 用戶與 Docker 交互的主要方式。當您使用 docker 命令行運行命令時, Docker 客戶端將這些命令發送給服務器端,服務端將執行這些命令。 docker 命令使用 docker API 。 Docker 客戶端能夠與多個服務端進行通訊。
Docker 架構圖
Docker 的核心組件包括:
Docker 採用的是 Client/Server 架構。客戶端向服務器發送請求,服務器負責構建、運行和分發容器。客戶端和服務器能夠運行在同一個 Host 上,客戶端也能夠經過 socket 或 REST API 與遠程的服務器通訊。
Docker Client
Docker Client ,也稱 Docker 客戶端。它其實就是 Docker 提供命令行界面 (CLI) 工具,是許多 Docker 用戶與 Docker 進行交互的主要方式。客戶端能夠構建,運行和中止應用程序,還能夠遠程與Docker_Host進行交互。最經常使用的 Docker 客戶端就是 docker 命令,咱們能夠經過 docker 命令很方便地在 host 上構建和運行 docker 容器。
Docker daemon
Docker daemon 是服務器組件,以 Linux 後臺服務的方式運行,是 Docker 最核心的後臺進程,咱們也把它稱爲守護進程。它負責響應來自 Docker Client 的請求,而後將這些請求翻譯成系統調用完成容器管理操做。該進程會在後臺啓動一個 API Server ,負責接收由 Docker Client 發送的請求,接收到的請求將經過Docker daemon 內部的一個路由分發調度,由具體的函數來執行請求。
Docker Image
Docker 鏡像能夠看做是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建以後也不會被改變。咱們可將 Docker 鏡像當作只讀模板,經過它能夠建立 Docker 容器。
鏡像有多種生成方法:
Docker Registry
Docker registry 是存儲 docker image 的倉庫,它在 docker 生態環境中的位置以下圖所示:
運行docker push、docker pull、docker search時,其實是經過 docker daemon 與 docker registry 通訊。
Docker Container
Docker 容器就是 Docker 鏡像的運行實例,是真正運行項目程序、消耗系統資源、提供服務的地方。 Docker Container 提供了系統硬件環境,咱們可使用 Docker Images 這些製做好的系統盤,再加上咱們所編寫好的項目代碼, run 一下就能夠提供服務啦。
Docker組件是如何協做運行容器
容器啓動過程以下:
能夠經過docker images 能夠查看到 hello-world 已經下載到本地
能夠經過docker ps 或者 docker container ls 顯示正在運行的容器,咱們能夠看到, hello-world 在輸出提示信息之後就會中止運行,容器自動終止,因此在查看的時候沒有發現有容器在運行。
Docker 組件協做運行容器能夠分爲如下幾個過程:
Docker 經常使用命令
參考連接: