zoukankan      html  css  js  c++  java
  • docker存储引擎----存储引擎的修改

    找一台centos7.2安装docker

    # yum install -y vim wget telnet lrzsz tree yum-utils device-mapper-persistent lvm2 bash-comple*
    
    # source /usr/share/bash-completion/bash_completion
    
    # rm -rf /etc/yum.repos.d/*
    
    # wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    
    # wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    
    # wget -O /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    # yum makecache fast
    
    # wget https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-18.09.9-3.el7.x86_64.rpm
    
    # yum localinstall docker-ce-*

    # systemctl start docker

    查看存储引擎

    [root@localhost ~]# docker info
    
    ...
    
     Server Version: 18.09.9
     Storage Driver: devicemapper
      Pool Name: docker-8:3-33951780-pool
      Pool Blocksize: 65.54kB
      Base Device Size: 10.74GB
      Backing Filesystem: xfs
      Udev Sync Supported: true
      Data file: /dev/loop0
      Metadata file: /dev/loop1
      Data loop file: /var/lib/docker/devicemapper/devicemapper/data
      Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
      Data Space Used: 11.8MB
      Data Space Total: 107.4GB
    
    ...
    
    WARNING: bridge-nf-call-iptables is disabled
    WARNING: bridge-nf-call-ip6tables is disabled
    WARNING: the devicemapper storage-driver is deprecated, and will be removed in a future release.
    WARNING: devicemapper: usage of loopback devices is strongly discouraged for production use.
             Use `--storage-opt dm.thinpooldev` to specify a custom block storage device.

    配置镜像加速

    [root@localhost ~]# vim /etc/docker/daemon.json
    {
      "registry-mirrors": ["https://05eotbde.mirror.aliyuncs.com"]
    }

      [root@localhost ~]# systemctl daemon-reload
      [root@localhost ~]# systemctl restart docker

    拉取一个镜像并启动容器

    [root@localhost ~]# docker pull nginx
    
    [root@localhost ~]# docker run -itd -p 80:80 --name test nginx
    eed6fd358800d695eb83e4b509dfe082351a005adf07c00e733eaadf730fbb43

    修改docker存储引擎为overlay

    修改或创建 /etc/docker/daemon.json,并添加

    [root@localhost ~]# vim /etc/docker/daemon.json 
    {
      "registry-mirrors": ["https://05eotbde.mirror.aliyuncs.com"],
      "storage-driver": "overlay"
    }

    或者修改unit文件

    [root@localhost ~]# vim /lib/systemd/system/docker.service 
    
    ...
    
    ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -s=overlay
    ExecReload=/bin/kill -s HUP $MAINPID
    
    ...

    重启docker,这时候会有报错

    [root@localhost ~]# systemctl daemon-reload
    
    [root@localhost ~]# systemctl restart docker
    Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.

    查看日志

    Jul 10 23:57:57 localhost dockerd: Error starting daemon: error initializing graphdriver: overlay: the backing xfs filesystem is formatted without d_type support, which leads to incorrect behavior. Reformat the filesystem with ftype=1 to enable d_type support. Backing filesystems without d_type support are not supported.

    添加一块200G的硬盘,重启使磁盘识别

    [root@localhost ~]# fdisk -l /dev/sdb
    
    Disk /dev/sdb: 214.7 GB, 214748364800 bytes, 419430400 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes

    摘掉挂载umount /var/lib/docker

    注意:可能会出现umount: /var/lib/docker: target is busy.
    
    关闭占用进程fuser -km /var/lib/docker(慎用fuser -km)。在psmisc包中yum install psmisc -y
    
    或者systemctl stop docker再次进行卸载

    创建文件系统为xfs,使用参数 -n ftype=1

    [root@localhost ~]# mkfs.xfs -n ftype=1 /dev/sdb
    meta-data=/dev/sdb               isize=256    agcount=4, agsize=13107200 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=0        finobt=0
    data     =                       bsize=4096   blocks=52428800, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal log           bsize=4096   blocks=25600, version=2
             =                       sectsz=512   sunit=0 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0

    备份:需要使用docker save备份镜像

    注意:如果你原先有不同存储驱动的层数据,更换存储驱动后将不可用,建议备份镜像并清除 /var/lib/docker 下所有数据。
    
    备份镜像可以用 docker save 导出镜像,之后用 docker load 导入镜像。

    挂载磁盘,启动docker

    [root@localhost ~]# mount /dev/sdb /var/lib/docker
    
    [root@localhost ~]# systemctl start docker

    查看docker存储引擎

    [root@localhost ~]# docker info
    ...
    
     Server Version: 18.09.9
     Storage Driver: overlay
      Backing Filesystem: xfs
      Supports d_type: true
     Logging Driver: json-file
     Cgroup Driver: cgroupfs
     Plugins:
      Volume: local
      Network: bridge host macvlan null overlay
      Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
     Swarm: inactive
    
    ...

    查看之前拉取的nginx镜像和容器是否存在

    [root@localhost ~]# docker images
    REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
    
    
    [root@localhost ~]# docker ps -a
    CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

     下面演示恢复数据

    # docker run -itd --name test -p 80:80 nginx
    
    # docker commit test test1
    sha256:5cbae254377047bcb127a7bd8e42c30022513ec0cbbaeabec580b486a38fdc1e
    
    # docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    test1               latest              5cbae2543770        7 seconds ago       133MB
    nginx               latest              4cdc5dd7eaad        4 days ago          133MB
    
    # docker save nginx >nginx.tar.gz
    # docker save test1 >test1.tar.gz

    修改存储引擎,重启docker

    # vim /etc/docker/daemon.json 
    {
      "registry-mirrors": ["https://05eotbde.mirror.aliyuncs.com"],
      "storage-driver": "overlay"
    }
    
    # systemctl daemon-reload
    # systemctl restart docker

    恢复数据

    # docker load -i nginx.tar.gz 
    ace9ed9bcfaf: Loading layer [==================================================>]  64.86MB/64.86MB
    48b4a40de359: Loading layer [==================================================>]  3.072kB/3.072kB
    c553c6ba5f13: Loading layer [==================================================>]  4.096kB/4.096kB
    d97733c0a3b6: Loading layer [==================================================>]  3.584kB/3.584kB
    9d1af766c818: Loading layer [==================================================>]  7.168kB/7.168kB
    Loaded image: nginx:latest
    
    
    # docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    nginx               latest              4cdc5dd7eaad        4 days ago          133MB
    redis               latest              08502081bff6        2 weeks ago         105MB

     另外:如果是存储引擎修改回来,那么改回来就可以使用原来的镜像了(下面只演示了overlay改为overlay2)

    # vim /etc/docker/daemon.json 
    {
      "registry-mirrors": ["https://05eotbde.mirror.aliyuncs.com"],
      "storage-driver": "overlay2"
    }
    # systemctl daemon-reload
    # systemctl restart docker

    查看镜像

    [root@docker04 ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    test1               latest              5cbae2543770        18 minutes ago      133MB
    nginx               latest              4cdc5dd7eaad        4 days ago          133MB
     
  • 相关阅读:
    Mysql-学习笔记(==》事件 十二)
    Mysql-学习笔记(==》触发器 十一)
    Mysql-学习笔记(==》函数的建立与使用 十)
    Mysql-学习笔记(==》存储过程 九)
    Mysql-学习笔记(==》常用函数 八)
    Mysql-学习笔记(==》增删主键建立索引 七)
    Mysql-学习笔记(==》约束 六)
    Mysql-学习笔记(==》集合函数与分组四)
    Mysql-学习笔记(==》连接查询_高级查询五)
    Unity3D优化技巧系列七
  • 原文地址:https://www.cnblogs.com/zh-dream/p/14998608.html
Copyright © 2011-2022 走看看