Docker 离线安装实录

1,609 阅读3分钟

前言

由于公司部署环境问题,需要在无网络环境下安装 Docker ,并运行容器

由于平时都只是在有网络的情况下,直接 yum install 就可以了

拉取镜像也可以直接从 Dokcer 镜像仓库 拉取,速度慢的话也可以选择从 阿里云镜像仓库 拉取

此次离线安装遇到了一些问题,因此记录我踩坑的记录

安装 Docker

  1. Docker 官方 下载你想要的 Docker 版本,我下载的图中 19.03.8 的版本

  2. 解压 Docker

    docker 解压,解压的路径随意,我就在我的 home 目录下解压的

    tar xzvf /path/docker-19.03.8.tgz /path/
    
  3. Docker 包下的指令复制到 /usr/bin 目录下,把 docker 命令在加载到环境变量中,让 docker 在所有目录下都可以直接执行命令,而不至于加上执行文件路径。简单来说不执行该步骤的话,在执行 docker 命令时,需要加上路径如 /path/docker run ...

    sudo cp docker/* /usr/bin/
    
  4. 启动 Docker

    sudo dockerd &      // & 表示让 docker 在后台运行
    
  5. 验证 docker 是否安装成功

    这时查看 docker 镜像时发现没有镜像,我提前打包了一个 nginx 镜像,通过 docker save -o nginx.tar nginx 命令打包的

    使用 docker load < nginx.tar 加载镜像,这时你的 docker 里面就会有 nginx 镜像了

    使用 docker run -d --name nginx -p 80:80 nginx 启动容器,成功启动就说明安装成功了

遇到的异常

  • 使用 docker 启动容器时,出现错误

    Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused "write /proc/self/attr/keycreate: permission denied"

    看信息是 /proc/self/attr/keycreate 没有写权限造成的,然后查找探究解决方案

    方案一(不推荐)

    /etc/selinux/config 里面的 SELINUX 设为 disabled,保存重启系统

    方案二(推荐)

    直接执行命令 setenfore 0,切换运行模式

    setenfore 0
    

    探索

    为了看 SELinux 是什么,我又深入探索了一下,了解到 SELinux 是一个 Linux 内核模块,也是 Linux 的一个安全子系统。

    SELINUX详细介绍

    我看了之后发现 SELINUX 的结构及配置十分复杂,短时间不是能够弄明白,但我大致了解到 seliunx 是一对控制进程访问权限的东西,即使使用 root 运行某个服务进程,此进程也不能像 root 用户一样访问系统上的所有文件

    我觉得这应该是一个十分重要的功能,如果直接 disabled 的话,有可能会造成某些安全问题,最好不要在生产环境下使用

    简短的探索之后,我发现可以把 SELinux 的工作模式设为 Permissive (宽容模式),在此模式下,SELinux 会有产生警告信息并记录日志,不会实际限制文件的读写。可以方便以后的 debug 用 。

    可以直接使用 setenfore 0 命令是动态切换 SELinux 的工作模式,只能在 Enforcing (严格模式)和 Permissive 两种模式之间切换,不能直接 disabled ,且当此有效,系统重启后恢复 Enforcing (严格模式)

    应该有完美的解决 方案三 的,由于太菜,还弄不明白 SELinux 的配置,目前只能使用方案二切换成 Permissive,后面有时间再去研究一下 SELinux