zoukankan      html  css  js  c++  java
  • Docker 更新版本

    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 容器后,执行构建后,发现有下面的报错。

    1565084429253

    升级之后的问题。删除文件夹报错。命令是没有问题的。

    进入容器我执行下面的命令,也是报错。

    [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

    • overlayoverlay2驱动程序支持xfs的文件系统,但需要d_type=true启用。

      使用xfs_info验证ftype选项设置为1。要xfs正确格式化 文件系统,请使用该标志-n ftype=1

    我们使用的 ext4 文件系统,Docker 的版本也高于 17.06.02,但是我们的 Centos 版本号是 低于 3.10.0-514 的, 所以我推测是由于 版本号过低,导致储存驱动使用不了,我们对系统进行快照后,进行升级内核。

    升级内核之后,我们重启主机,发现是可以正常使用的。

  • 相关阅读:
    iPhone将NSString转换编码集为gb2312或者gbk的方法
    iOS下微信语音播放之切换听筒和扬声器的方法解决方案
    苹果开发者各地区联系电话
    iOS开发中,应用内直接跳转到Appstore
    高亮显示UILabel中的子串
    UML
    All Classic Bluetooth profile for iPhone
    智能穿戴设备移动APP端与外设数据传输协议功能模块CMD&ACK表
    Mac 使用技巧分享
    git branch管理小结
  • 原文地址:https://www.cnblogs.com/operationhome/p/11322150.html
Copyright © 2011-2022 走看看