美文网首页
Docker笔记(持续更新)

Docker笔记(持续更新)

作者: questionuncle | 来源:发表于2018-03-28 11:11 被阅读0次

    1.WARNING: overlay2: the backing xfs filesystem is formatted without d_type support, which leads to incorrect behavior.

    同事在新虚拟机上安装了Docker,习惯性的先检查一下安装版本及信息。

    docker version
    docker info
    
    image.png
    image.png
    发现有告警,显示目前虚拟机上跑的Centos系统运用的xfs文件系统而Docker采用的overlay2,虚拟机上xfs文件系统有个属性ftype设置有问题,有可能导致Docker在使用时报错。(如果overlayfs存储驱动不支持d_type的话,容器在操作文件系统时可能会出现一些奇怪的错误:比如在bootstrap的时候出现Chown error,或者rebuild时发生错误等等。)
    Docker的overlay存储驱动利用了很多OverlayFS特性来构建和管理镜像与容器的磁盘结构。自从Docker1.12起,Docker也支持overlay2存储驱动,相比于overlay来说,overlay2在inode优化上更加高效。但overlay2驱动只兼容Linux kernel4.0以上的版本。(注:自从OverlayFS加入kernel主线后,它在kernel模块中的名称就被从overlayfs改为overlay了。)
    参考:Docker xfs filesystem without d_type support
    关于OverlayFS介绍参见:Red Hat Enterprise Linux-FILE SYSTEMS

    如何解决

    如果想在CentOS7上允许Docker的overlay2存储驱动,需要升级内核kernel,同时还需要对挂载的device设置ftype。

    df -h
    xfs_info /    //查看挂载点对应的文件系统信息
    
    image.png

    可以看到,这里的ftype为0,需将其设置为1。

    备份你的数据

    重新创建你的文件系统

    恢复备份的数据回来

    针对重新创建你的文件系统,需要这样做:

    将挂载的device卸载

    umount /dev/mapper/centos-root  //device的路径可以在xfs_info中找到
    //如果提示device is busy
    umount -l /dev/mapper/centos-root //强制卸载同时要重启
    

    重新格式化,并再次挂载

    mkfs.xfs -n ftype=1 /dev/mapper/centos-root  //重新格式化device,在此
    mount /dev/mapper/centos-root    //重新挂载
    xfs_info /    //查看结果
    

    参考:Проверка XFS файловой системы из под Linux
    centos 5.2 使用xfs文件系统

    2.Docker安装gitlab容器

    本段已单独文章更新,请查看利用GitLab Docker images安装GitLab(填坑)

    可以下载gitlab的docker镜像,并将其部署在容器中,详见:GitLab Docker images
    这边要注意的是,external_url的设定。假如内网没有DNS服务器,你可以将该参数填写为该服务器的IP地址,一定不是IP地址+端口号,切记。设置external_url参数可以有如下方式:

    通过docker run中加入环境变量

    sudo docker run --detach \
        --hostname gitlab.example.com \
        --env GITLAB_OMNIBUS_CONFIG="external_url 'http://ipaddress/'; gitlab_rails['lfs_enabled'] = true;" \
        --publish 443:443 --publish 80:80 --publish 22:22 \
        --name gitlab \
        --restart always \
        --volume /srv/gitlab/config:/etc/gitlab \
        --volume /srv/gitlab/logs:/var/log/gitlab \
        --volume /srv/gitlab/data:/var/opt/gitlab \
        gitlab/gitlab-ce:latest
    

    将进入到容器内,修改gitlab.rb配置文件

    sudo docker run --detach \
        --hostname gitlab.example.com \
        --publish 443:443 --publish 80:80 --publish 22:22 \
        --name gitlab \
        --restart always \
        --volume /srv/gitlab/config:/etc/gitlab \
        --volume /srv/gitlab/logs:/var/log/gitlab \
        --volume /srv/gitlab/data:/var/opt/gitlab \
        gitlab/gitlab-ce:latest  //先将容器运行,将容器取名为gitlab
    docker exec -it gitlab /bin/bash //进入名为gitlab的容器
    vi /etc/gitlab/gitlab.rb //编辑gitlab.rb文件,设置extent_url
    docker restart gitlab //退出容器后,重启容器
    

    假如你将gitlab配置文件已经挂载到外部存储路径下,只要在相应目录(如这里的/srv/gitlab/config)下修改gitlab.rb文件,并重启容器就可。

    3.如何将容器时间和host在一个时区

    当我们进入到容器中,通过date查看时间时,发现时UTC时区,和host时区不一致。


    image.png

    启动容器时候加一下 -v /etc/localtime:/etc/localtime,容器里面就会跟host一个时区了

    4.docker docker-machine命令自动补全

    在运维时希望尽可能的少敲打字,如何进行命令补全呢。
    参考《Install Docker Machine》
    但是按照上述方法安装后,依然不能命令自动补全,提示:

    docker-machine cr-bash: _get_comp_words_by_ref: 未找到命令
    -bash: ((: i < : 语法错误: 期待操作数 (错误符号是 "< ")
    

    原来CentOS没有安装bash-completion,通过yum安装,并重启系统已启用bash-completion

    相关文章

      网友评论

          本文标题:Docker笔记(持续更新)

          本文链接:https://www.haomeiwen.com/subject/mwkycftx.html