目錄
- 安裝低版本Docker
- 查看Docker版本
- 宿主機創建掛載目錄
- 下載鏡像并創建容器
- 登錄容器查看映射
- 訪問測試
- 在升級前確定幾個重點:
- 1.原配置文件備份一下
- 2.清楚知道Docker的存儲目錄在哪里
- 進行升級高版本docker
- 將低版本Docker卸載
- 安裝yum管理工具
- 添加國內鏡像源
- 查看軟件版本
- 安裝指定版本的docker
- 查看容器和鏡像依然存在
- 啟動容器測試:
- 啟動容器進行測試
- 總結
| 操作系統 | 服務 |
|---|---|
| Centos7 | Docker |
安裝低版本Docker
由于Centos7自帶的yum源中的Docker版本過低,先安裝默認的版本
yum -y install docker
查看Docker版本
[root@Ayu ~]# docker --version Docker version 1.13.1, build 7d71120/1.13.1
宿主機創建掛載目錄
mkdir -p /test/nginx cd /test/nginx && mkdir a b c d
下載鏡像并創建容器
docker pull nginx docker run -itd -v /test/nginx:/test/nginx -p 80:80 --name nginx nginx
登錄容器查看映射
docker exec -it nginx bash root@daea0c2b307b:/# cd /test/nginx root@daea0c2b307b:/test/nginx# ls a b c d
訪問測試

在升級前確定幾個重點:
1.原配置文件備份一下
[root@localhost ~]# cat /usr/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target
Wants=docker-storage-setup.service
Requires=docker-cleanup.timer
[Service]
Type=notify
NotifyAccess=main
EnvironmentFile=-/run/containers/registries.conf
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
Environment=GOTRACEBACK=crash
Environment=DOCKER_HTTP_HOST_COMPAT=1
Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
ExecStart=/usr/bin/dockerd-current \
--add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
--default-runtime=docker-runc \
--exec-opt native.cgroupdriver=systemd \
--userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
--init-path=/usr/libexec/docker/docker-init-current \
--seccomp-profile=/etc/docker/seccomp.json \
$OPTIONS \
$DOCKER_STORAGE_OPTIONS \
$DOCKER_NETWORK_OPTIONS \
$ADD_REGISTRY \
$BLOCK_REGISTRY \
$INSECURE_REGISTRY \
$REGISTRIES
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
TimeoutStartSec=0
Restart=on-abnormal
KillMode=process
[Install]
WantedBy=multi-user.target
2.清楚知道Docker的存儲目錄在哪里
默認目錄:/var/lib/docker
進行升級高版本docker
將低版本Docker卸載
不刪除 /var/lib/docker 目錄 就不會刪除已安裝的鏡像及容器
[root@localhost docker]# yum list installed | grep docker docker.x86_64 2:1.13.1-209.git7d71120.el7.centos @extras docker-client.x86_64 2:1.13.1-209.git7d71120.el7.centos @extras docker-common.x86_64 2:1.13.1-209.git7d71120.el7.centos @extras [root@localhost ~]# yum -y remove docker*
安裝yum管理工具
yum install -y yum-utils
添加國內鏡像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
查看軟件版本
yum list docker-ce --showduplicates|sort -r docker-ce.x86_64 3:18.09.6-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.5-3.el7 docker-ce-stable docker-ce.x86_64 18.03.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 18.03.0.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.12.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.03.3.ce-1.el7 docker-ce-stable
安裝指定版本的docker
yum -y install docker-ce-18.03.1.ce-1.el7.centos [root@localhost ~]# systemctl start docker [root@localhost ~]# docker --version Docker version 18.03.1-ce, build 9ee9f40
查看容器和鏡像依然存在

啟動容器測試:
報錯①Error response from daemon: Unknown runtime specified docker-runc

這是因為低版本升級到高版本之后不兼容 修改參數進行解決
報錯①解決方法:
更改/var/lib/docker/containers目錄中的文件參數,把docker-runc替換為runc
命令:
grep -rl 'docker-runc' /var/lib/docker/containers/ | xargs sed -i 's/docker-runc/runc/g'
注:grep -rl:遞歸搜索目錄和子目錄,只列出含有匹配的文本行的文件名,而不顯示具體的匹配內容
xargs:銜接執行之前得到的值總體意思是把/var/lib/docker/containers中含有‘docker-runc’的文件搜索出來,并把‘docker-runc’字符為runc
重新啟動docker
systemctl restart docker

報錯②Error response from daemon: error creating overlay mount to /var/lib/docker/overlay2/09f8444f734ca18130ac4e2dafdcd3a19dd2986c9474bd0a50c87c0af559a831/merged: invalid argument

報錯②解決方法:
解決方案無非是SELINUX要么都關閉,要么都開啟
推薦修改CentOS下的/etc/selinux/config 將SELINUX=disabled 改成 SELINUX=permissive
vi /etc/selinux/config # 找到SELINUX=enable修改為SELINUX=permissive SELINUX=permissive # 保存 :wq
或者修改docker關閉selinux
vi /etc/sysconfig/docker # 找到OPTIONS="--selinux-enabled --log-driver=journald --signature-verification=false" # 刪除 --selinux-enabled OPTIONS="--log-driver=journald --signature-verification=false" # 保存 :wq
另外docker-18.03已經廢棄使用overlay1了,overlay2存儲才是今后所支持的,因此不建議按照網上某文章的教程那樣將docker的存儲驅動改回overlay1。改回overlay1的方式只是治標不治本,正解是修改selinux配置。
啟動容器進行測試



至此低版本Docker升級高版本Docker完美結束~






