Docker 更新版本
原來版本 1.10
更新后的版本 19.03.1
更新 Docker
版本需要注意的問題:
-
注意系統是否支持新版本的儲存驅動。
19.03.01 版本默認使用的儲存驅動是
overlay2
。overlay2
存儲驅動使用需要滿足以下條件:
一、暫停原有的容器並導出
Docker 版本更新:
暫停所有docker, 現有的鏡像和容器都導出成 tar包
導出容器
docker export container id -o d.tar
導出鏡像
docker image save container -o a.tar
二、移除原來的 Docker 並安裝新的版本
移除老版本的 Docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安裝新版本 Docker
# yum-utils 提供了命令 yum-config-manager,device-mapper-persistent-data和lvm2由需要 devicemapper存儲驅動程序。
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
# 設置 yum 源為 穩定的版本
# 阿里的源,國內使用較快
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 官方的源(國內使用比較慢)
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 生成緩存
yum makecache
# 如果要安裝指定的版本
yum list docker-ce --showduplicates | sort -r
# 填入版本號到下面的命令(docker-ce-19.03.0-3.el7)
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
# 安裝最新穩定版本 Docker CE
yum install docker-ce docker-ce-cli containerd.io
三、 使用原來的數據目錄、或者 創建新的數據目錄。
使用原來的數據目錄
使用之前的數據目錄,也就是之前版本的數據目錄,這樣 之前的鏡像和容器就可以不用再導入了,直接使用就行了。
指定之前的 儲存目錄,我們之前 Docker
的儲存目錄是 /opt/docker
.
cat << EOF >>/etc/docker/daemon.json
{
"data-root": "/opt/docker"
}
EOF
啟動docker
systemctl start docker
docker images # 我們可以看到之前的鏡像都存在
docker info # 我們可以看到
更新后改變的東西
-
日志驅動之前是 journal 現在是 logfile
數據目錄:
[root@iz23nb5ujp69 docker]# ls -l
total 48
drwx------ 2 root root 4096 Aug 6 15:58 builder
drwx------ 4 root root 4096 Aug 6 15:58 buildkit
drwxrwxrwx 5 root root 4096 Aug 6 16:31 containers
drwxrwxrwx 5 root root 4096 Oct 13 2016 devicemapper
drwxrwxrwx 3 root root 4096 Oct 13 2016 image
drwxrwxrwx 3 root root 4096 Oct 13 2016 network
drwx------ 4 root root 4096 Aug 6 15:58 plugins
drwx------ 2 root root 4096 Aug 6 16:41 runtimes
drwx------ 2 root root 4096 Aug 6 15:58 swarm
drwx------ 2 root root 4096 Aug 6 16:41 tmp
drwxrwxrwx 2 root root 4096 Oct 13 2016 trust
drwxrwxrwx 2 root root 4096 Aug 6 15:58 volumes
原來的 1.10
版本 是 默認驅動 devicemapper
,使用上一個版本的 Docker
目錄的話,會使用上一個版本的默認的驅動(為了兼容),如果使用的是新的目錄,則會使用官方當前版本默認的儲存驅動和日志引擎。
創建新的目錄,導入鏡像
使用新的數據目錄 /opt/docker-ce
。
cat << EOF >>/etc/docker/daemon.json
{
"data-root": "/opt/docker-ce"
}
EOF
systemctl restart docker
導入鏡像
docker image import jenkins.tar fy:jenkins
導入的鏡像會使用Docker
的默認的驅動,也就是 overlay2
,會使用默認的日志驅動。不管原來鏡像使用的什么驅動,導入后會使用當前的默認儲存驅動。
四、更新過程中遇到的問題
我們按照上面步驟更新,使用的是創建新的目錄的方式。當我們啟動我們的 Jenkins
容器后,執行構建后,發現有下面的報錯。
升級之后的問題。刪除文件夾報錯。命令是沒有問題的。
進入容器我執行下面的命令,也是報錯。
[root@491c264aea0d target]# rm -rf ./*
rm: cannot remove `./classes/com/ugou88/wx/interceptor': Invalid argument
rm: cannot remove `./classes/com/ugou88/wx/i/controller': Invalid argument
問題,很有可能是驅動導致的,就是儲存驅動。
我們升級后 Docker
默認使用的驅動是 overlay2
,那么如果要使用該驅動需要滿足以下條件。
-
overlay2`Docker CE和Docker EE 17.06.02-ee5及更高版本支持該驅動程序,是推薦的存儲驅動程序。
-
需要 Linux 內核版本在 4.0更高的版本或者使用 RHEL/CentOs 版本號大於 3.10.0-514。
-
在
overlay
和overlay2
驅動程序支持xfs
的文件系統,但需要d_type=true
啟用。使用
xfs_info
驗證ftype
選項設置為1
。要xfs
正確格式化 文件系統,請使用該標志-n ftype=1
。
我們使用的 ext4
文件系統,Docker 的版本也高於 17.06.02
,但是我們的 Centos
版本號是 低於 3.10.0-514
的, 所以我推測是由於 版本號過低,導致儲存驅動使用不了,我們對系統進行快照后,進行升級內核。
升級內核之后,我們重啟主機,發現是可以正常使用的。