CentOS系统部署docker

概述

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。

系统环境

Centos7系统

系统要求

Docker安装要求CentOS系统的内核版本高于3.10。通过uname -r命令查看你当前的内核版本。

$ uname -r

准备工作

  1. 更新yum,通过root权限登录Centos。运行以下命令,确保yum包为最新版本。
$ sudo yum update
  1. 卸载旧版本(如果安装过旧版本的话)
$ sudo yum remove docker  docker-common docker-selinux docker-engine
  1. 安装依赖包,yum-util提供yum-config-manager功能,另外两个提供devicemapper驱动依赖
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  1. 设置yum
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

安装docker

  1. 查看仓库中所有docker版本,这里可以直接安装最新版本或者安装特定版本。
$ yum list docker-ce --showduplicates | sort -r
  1. 安装docker,根据需要选用下述命令
$ sudo yum install docker-ce  # 由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0
$ sudo yum install <FQPN>  # 例如:sudo yum install docker-ce-17.12.0.ce
  1. 启动并加入开机启动
$ sudo systemctl start docker # 启动docker
$ sudo systemctl enable docker # 加入开机启动

验证安装

  1. 验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
$ docker version

上述命令会返回ClientServer相关信息,若报错则会返回响应的错误信息。

安装docker-compose

在线安装

$ curl -L https://github.com/docker/compose/releases/download/1.25.0-rc4/docker-compose-`uname -s`-`ur/local/bin/docker-compose

$ chmod +x /usr/local/bin/docker-compose
$ docker-compose --version

错误信息
Cannot open self /usr/local/bin/docker-compose or archive /usr/local/bin/doc 可能是因为下载不全造成,后通过离线安装解决该问题。

离线安装

  1. 前往github下载发布版本docker-compose
  2. 将文件上传到/usr/local/bin/目录下,重命名为docker-compose,修改文件权限:
$ chmod +x /usr/local/bin/docker-compose
  1. 执行docker-compose -v,返回版本信息则安装成功。

安装可视化界面

# docker pull portainer/portainer
# docker run -d --name portainerUI -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

部署成功后访问地址:http://localhost:9000/#/dashboard,默认用户名admin,首次登录会要求设置密码。

安装bitnami/redmine

问题

  1. 问题描述:容器中报错permission denied, mkdir '/bitnami/data 问题分析:实际上这是因为volumes对应的宿主机的目录没有写权限的问题,开始以为是文件夹所属问题,使用chown并未解决。
    解决方法: 赋予data(volume使用的目录)目录读写权限。
#赋予data目录读写权限
$ chmod 777 /Users/xiawei/Documents/bitnami/data/odoo_data

其中对应的docker-compose中的配置如下。还可通过ls -l命令来具体查看文件夹的权限并作处理。

volumes:
      - '/Users/xiawei/Documents/bitnami/data/odoo_data:/bitnami/odoo'

Docker安装错误及处理

问题

  1. 问题描述 执行# 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.

继续执行systemctl status docker.service仅返回启动失败信息。

问题排查方法

执行sudo dockerd –debug将会打印docker整个启动过程,按日志的错误信息处理对应故障。

  1. 防火墙相关问题
    日志:
failed to start daemon: Error initializing network controller: Error creating default "bridge" network: Failed to program NAT chain: ZONE_CONFLICT: 'docker0' already bound to a zone

解决方法:

  1. 检查firewall-cmd中是否存在docker zone
$ firewall-cmd --get-active-zones
  1. 如果docker区域可用,将接口更改为docker0(非持久化)
$ sudo firewall-cmd --zone=docker --change-interface=docker0
  1. 如果docker区域可用,请将接口更改为docker0(持久化)
$ sudo firewall-cmd --permanent --zone=docker --change-interface=docker0 

需要重启防火墙

$ sudo systemctl restart firewalld
  1. 启动docker
$ systemctl start docker
  1. 查看
$ systemctl status docker

参考材料

  1. Docker 服务无法启动故障排除
  2. ZONE_CONFLICT: ‘docker0’ 已经绑定到一个区域