如何在 CentOS 上升級 Docker

Docker 是一個用於開發、傳送和運行應用程序的開源平台。 在撰寫本文時,Docker v17.12 是最新的穩定版本。 它提供了在稱為容器的完全隔離的環境中打包和運行應用程序的能力。 我們可以在給定的主機上同時運行多個容器。 容器是輕量級和快速的,因為它們不需要管理程序,而是直接在主機的內核中運行。

Docker 架構

Docker 是一個客戶端-服務器應用程序,其中客戶端和守護程序可以在同一系統上運行,或者您可以將 Docker 客戶端與遠程 Docker 守護程序連接。 Docker 客戶端和守護進程通過套接字或 RESTful API(代表性狀態傳輸 – 它是通過 HTTP 對網頁進行的無狀態傳輸,該網頁包含包含並描述所需內容的 XML 文件)。

Docker 的主要組件是

  • Docker Daemon : Docker 守護進程 (dockerd) 監聽 Docker API 請求並管理 Docker 對象,例如鏡像、容器、網絡和卷。 守護進程還可以與其他守護進程通信以管理 Docker 服務。
  • Docker Client :Docker 客戶端 (docker) 是 Docker 用戶與 Docker 交互的主要方式。 當我們使用諸如 docker run、docker build 等命令時,客戶端將這些命令發送到 docker daemon(dockerd),後者執行它們。 docker 命令使用 Docker API。 它可以與多個守護進程通信。
  • Docker Registry (2.4.1):Docker 註冊表存儲 Docker 圖像。 Docker Hub 和 Docker Cloud 是任何人都可以使用的公共註冊表。 默認情況下,Docker 配置為在 Docker Hub 上查找圖像。 我們甚至可以為我們的圖像設置我們自己的私有註冊器。

在本文中,我將解釋如何將 Docker 升級到 CentOS 7 和 Fedora 27.

先決條件

為了安裝 Docker CE 版本,我們需要一個 CentOS 7 的維護版本。必須啟用 centos-extras 存儲庫。 默認情況下啟用此存儲庫,但如果您已禁用它,則需要重新啟用它。

在 CentOS 7.4 上升級 Docker

對於升級 Docker,建議安裝 Docker 社區版 (Docker CE),它將幫助您安裝、升級和維護 Docker,並為您的特定工作負載提供所需的支持和保證。 推薦使用overlay2存儲驅動。 overlay2 是 Docker CE 的默認選擇。 存儲驅動程序控製圖像和容​​器在 Docker 主機上的存儲和管理方式。 Docker 支持多種不同的存儲驅動程序。 這 devicemapper 是我們的下一個選擇,但它需要 direct-lvm 用於生產環境以獲得更好的性能。

讓我們從升級舊 Docker 版本的步驟開始。

  • 卸載舊的 Docker 版本

docker 和 docker-engine 包被稱為舊包。 如果您正在運行這些舊版本,您可以先卸載它們以繼續進行。 運行此命令以從您的服務器中刪除所有 docker 跟踪。

#yum remove docker docker-common docker-selinux docker-engine

即使從服務器中刪除了這些包,我們需要的所有 docker 內容,包括圖像、容器、捲和網絡,都保留在 /var/lib/docker/ 文件夾。

  • 安裝 Docker CE

您可以首先設置 Docker 存儲庫並使用它安裝它們。 這將使使用相同存儲庫的安裝和升級過程更加容易。 為了設置我們的存儲庫,我們需要 yum-utils 包提供的 yum-config-manager 實用程序。 並且如前所述,Docker CE 更喜歡存儲驅動程序,這裡我們使用 devicemapper . 因此對於這個存儲驅動程序,我們需要這個 device-mapper-persistent-data and lvm2 packages . 我們可以使用此命令安裝所有這些先決條件來設置我們的存儲庫。

#yum install -y yum-utils device-mapper-persistent-data lvm2

接下來,您可以使用以下命令啟用穩定的 Docker 存儲庫。

#yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# yum install docker-ce
Loaded plugins: fastestmirror
docker-ce-stable | 2.9 kB 00:00:00 
Loading mirror speeds from cached hostfile
* base: mirrors.coreix.net
* extras: repo.uk.bigstepcloud.com
* updates: mirror.sov.uk.goscomb.net
Resolving Dependencies
--> Running transaction check
---> Package docker-ce.x86_64 0:17.12.0.ce-1.el7.centos will be installed
--> Finished Dependency Resolution

Dependencies Resolved

============================================================================================================================================================================================================
Package Arch Version Repository Size
============================================================================================================================================================================================================
Installing:
docker-ce x86_64 17.12.0.ce-1.el7.centos docker-ce-stable 30 M

Transaction Summary
============================================================================================================================================================================================================
Install 1 Package

This step is optional: Edge 和測試存儲庫也包含在這個 repo 文件中,默認情況下它是禁用的。 如果你願意,你可以啟用這些 repo 文件以及穩定的 repo 並安裝 Edge 或可用的測試版本。 這可以通過發出以下命令來完成:

#yum-config-manager --enable docker-ce-edge
#yum-config-manager --enable docker-ce-test

啟用這些存儲庫後,安裝命令將從 Edge 回購。

# yum install docker-ce
Dependencies Resolved

============================================================================================================================================================================================================
Package Arch Version Repository Size
============================================================================================================================================================================================================
Installing:
docker-ce x86_64 18.01.0.ce-1.el7.centos docker-ce-edge 33 M
Installing for dependencies:
libtool-ltdl x86_64 2.4.2-22.el7_3 base 49 k

Transaction Summary
============================================================================================================================================================================================================
Install 1 Package (+1 Dependent package)

所以如果你需要最新的穩定版本,你可以保留這些 Edge 並禁用測試存儲庫。 您可以使用 yum-config-manager 命令與 --disable 標誌以禁用這些存儲庫。

有時,即使我們執行,服務器上仍可能存在一些舊 docker 組件的痕跡 yum remove 命令同步驟1。 安裝過程中,如果有老版本的docker,會報錯如下:

Transaction check error:
file /usr/bin/docker from install of docker-ce-18.01.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
file /usr/bin/docker-containerd from install of docker-ce-18.01.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
file /usr/bin/docker-containerd-shim from install of docker-ce-18.01.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
file /usr/bin/dockerd from install of docker-ce-18.01.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64

我已經使用 yum remove 命令手動刪除了這些軟件包以成功進行安裝,如下所示:

# yum remove docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
Dependencies Resolved

============================================================================================================================================================================================================
Package Arch Version Repository Size
============================================================================================================================================================================================================
Removing:
docker-common x86_64 2:1.12.6-68.gitec8512b.el7.centos @extras 4.5 k
Removing for dependencies:
docker-client x86_64 2:1.12.6-68.gitec8512b.el7.centos @extras 11 M

Transaction Summary
============================================================================================================================================================================================================
Remove 1 Package (+1 Dependent package)

驗證 Docker 安裝

安裝完成後,您可以啟動並啟用 docker 服務並通過運行以下命令來驗證安裝 hello-world 圖片。

# systemctl start docker
# systemctl enable docker
# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: active (running) since Tue 2018-01-23 06:36:24 UTC; 2s ago
Docs: https://docs.docker.com
Main PID: 30700 (dockerd)
Memory: 23.1M
CGroup: /system.slice/docker.service
├─30700 /usr/bin/dockerd
└─30703 docker-containerd --config /var/run/docker/containerd/containerd.toml

# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
ca4f61b1923c: Pull complete
Digest: sha256:66ef312bbac49c39a89aa9bcc3cb4f3c9e7de3788c944158df3ee0176d32b751
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://cloud.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/

升級 Docker CE

您可以在將來使用 yum upgrade 命令將您的 Docker 版本更新到其最新的穩定版本。 目前,我們的服務器已經安裝了最新的穩定版 Docker 版本,即 Docker 17.12 版本。

# docker -v
Docker version 17.12.0-ce, build c97c6d6

現在,如果我們需要將此當前穩定版本升級到最新可用的 Edge 版本,您可以只啟用 Docker 存儲庫中的邊緣 repo 文件並運行 yum upgrade 命令,如下所示:

# yum-config-manager --enable docker-ce-edge
# yum upgrade docker-ce
Dependencies Resolved

============================================================================================================================================================================================================
Package Arch Version Repository Size
============================================================================================================================================================================================================
Updating:
docker-ce x86_64 18.01.0.ce-1.el7.centos docker-ce-edge 33 M

Transaction Summary
============================================================================================================================================================================================================
Upgrade 1 Package

這將安裝最新的 Edge 可從存儲庫中獲得的版本。 安裝後可以確認Docker版本。 請參考這個 文件 了解更多關於穩定和 Edge 發布。

# docker -v
Docker version 18.01.0-ce, build 03596f5

升級 Docker Fedora 27

既 Fedora CentOS 來自 RedHat,使用的命令幾乎相同,只是 Docker 包不同。 與前面的情況類似,在 Fedora 同樣,我們需要刪除可用的舊 docker 版本並安裝 Docker Community Edition (Docker CE) 以便於安裝和升級。

先決條件

要安裝 Docker,您需要這些最新的 64 位版本 Fedora 27版

讓我們從升級舊 Docker 版本的步驟開始 Fedora.

  • 卸載舊的 Docker 版本

如前所述,docker 和 docker-engine 包被稱為舊包。 您可以使用以下命令刪除這些舊包:

#dnf remove docker docker-common docker-selinux docker-engine-selinux docker-engine

即使從服務器中刪除了這些包,我們需要的所有 docker 內容(包括圖像、容器、捲和網絡)都保留在 /var/lib/docker/ 文件夾中。

  • 安裝 Docker CE

我們需要啟用 Docker 存儲庫 Fedora 安裝 Docker CE 版本。 為了設置這個存儲庫,我們需要一些命令來管理 dnf 包管理器。 這 dnf-plugins-core 包提供了從命令行管理 DNF 存儲庫的命令。 您可以使用以下命令安裝它:

# dnf -y install dnf-plugins-core

現在,我們可以使用此命令啟用穩定存儲庫並使用該存儲庫中可用的最新穩定版本 dnf install 命令。

# dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
Adding repo from: https://download.docker.com/linux/fedora/docker-ce.repo

# dnf install docker-ce
Last metadata expiration check: 0:00:20 ago on Mon 22 Jan 2018 09:43:35 AM UTC.
Dependencies resolved.
============================================================================================================================================================================================================
Package Arch Version Repository Size
============================================================================================================================================================================================================
Installing:
docker-ce x86_64 17.12.0.ce-1.fc27 docker-ce-stable 31 M
Installing dependencies:
container-selinux noarch 2:2.38-1.fc27 updates 36 k
iptables x86_64 1.6.1-4.fc27 fedora 471 k
libnetfilter_conntrack x86_64 1.0.6-4.fc27 fedora 62 k
libnfnetlink x86_64 1.0.1-11.fc27 fedora 31 k
policycoreutils-python-utils x86_64 2.7-1.fc27 fedora 223 k

Transaction Summary
============================================================================================================================================================================================================
Install 6 Packages

如前所述,兩者 Edge 和測試 repo 文件存在於這個 Docker 存儲庫(docker.repo 文件)中。 但是默認情況下兩者都被禁用以單獨啟用穩定層。 根據需要,您可以使用以下命令啟用它:

# dnf config-manager --set-enabled docker-ce-edge
# dnf config-manager --set-enabled docker-ce-test

升級 Docker CE

為了升級您的 Docker CE,您可以使用 dnf -y upgrade . 這將升級到 Docker 存儲庫中可用的最新穩定層。

# dnf -y upgrade docker-ce

包起來

Docker 使開發人員和運維團隊可以輕鬆地分別快速創建和部署應用程序。 隨著公司發布對 Docker 的快速更新以改進產品並滿足客戶需求,Docker 的未來絕對是光明的。