Docker容器技术与运维
上QQ阅读APP看书,第一时间看更新

1.5.7 安装Docker之后的配置

成功安装Docker之后,还可以进一步配置,使主机与Docker更好地配合工作。

1.配置Docker开机自动启动

执行以下命令将Docker设置为开机自动启动:


systemctl enable docker 

禁用Docker守护进程开机启动的命令如下:


systemctl disable docker 

2.配置镜像加速器

Docker Hub部署在境外服务器,国内访问可能受影响,为解决此问题,需要配置相应的国内镜像来提高镜像的拉取速度。这里推荐配置阿里云的镜像加速器,具体操作方法介绍如下。

(1)通过浏览器访问阿里云登录页面,需要提供账户进行登录,如果没有账号,需要先注册一个阿里云账号。

(2)成功登录之后打开镜像仓库管理控制台,单击“容器镜像服务”节点下面的“镜像加速器”,出现图1-8所示的界面,提供配置向导,自动生成一个加速器地址。

(3)直接复制该地址,在/etc/docker/daemon.json文件进行配置。阿里云提供不同操作系统平台的加速器配置方法,这里使用CentOS平台,切换到该平台显示详细的操作文档,按照该文档的说明进行操作即可。

图1-8 阿里云镜像加速器配置向导

如果/etc/docker目录下还没有daemon.json文件,先创建该文件,再加入以下内容:


{ 
  "registry-mirrors": ["https://i4gs4xxq.mirror.aliyuncs.com"] 
} 

保存该文件之后执行下面的命令重启Docker,以使Docker的配置文件生效:


systemctl daemon-reload  
systemctl restart docker 

配置成功之后,即可通过该镜像加速器快速获取阿里云提供的Docker Hub镜像仓库资源。

3.以非root用户身份管理Docker

Docker守护进程绑定到UNIX套接字,而不是TCP端口。默认情况下,该UNIX套接字由用户root所有,而其他用户只能使用sudo访问它。Docker守护进程始终以root用户身份运行。

提示:Linux中普通用户执行sudo命令时会报出“xxx is not in the sudoers file.This incident will be reported”之类的错误信息,解决方法有两种,一是将用户账户加入wheel组,二是在sudo配置文件/etc/sudoers中为该用户添加许可权限。

在使用docker命令时,如果不想使用sudo,可以创建一个名为docker的组并向其中添加用户。Docker守护进程启动时,它将创建一个UNIX套接字,可由docker组成员访问。注意docker组将授予等同于root用户的特权。具体步骤如下。

(1)创建docker组,命令如下:


sudo groupadd docker 

不过,多数情况下安装Docker默认会创建该组,比如前面介绍过的使用软件仓库或便捷脚本安装。

(2)向docker组中添加用户,命令如下:


sudo usermod -aG docker $USER 

(3)注销并重新登录,以便对组成员资格进行重新评估。

(4)如果在虚拟机上进行测试,必须重启此虚拟机才能使更改生效。

(5)执行一个docker命令验证是否可以在不使用sudo特权的情况下运行docker命令。

4.开启Docker远程访问

默认情况下,Docker守护进程侦听UNIX套接字上的连接,只允许进行本地进程通信,因此只能在本地使用Docker命令行接口或者Docker API进行操作。如果要在其他主机上操作Docker主机,则可以在配置Docker的同时,监听一个IP地址及端口和UNIX套接字上的连接,这样就能实现远程访问。

在配置接受远程连接之前,有必要了解Docker开启远程访问可能存在的安全隐患。如果没有采取安全连接,则远程非root用户可能获取Docker主机上的root访问权限。生产环境开启远程访问会大大增加不安全性,由于开放了监听端口,任何人都可以远程连接到Docker主机并对其进行操作。实际应用中应当采用TLS证书来建立安全连接,以保护Docker守护进程的安全。

开启Docker远程访问,可以定制/etc/docker/daemon.json配置文件,也可以修改systemd单元配置文件docker.service。这两种方法不可以同时使用,否则会造成Docker无法启动。经笔者实际测试,在CentOS 7系统中,/etc/docker/daemon.json配置文件会被docker.service单元配置文件所覆盖。直接在daemon.json配置文件中定义远程连接会导致无法启动Docker,或者不起作用。

使用systemd单元配置文件开启Docker远程访问的步骤如下。

(1)执行systemctl edit docker.service命令,在文本编辑器中打开docker.service单元配置文件的override文件(位于/etc/systemd/system/docker.service.d目录下),添加以下内容(如果已有相关内容则进行修改):


[Service] 
ExecStart= 
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375 

(2)保存该文件。

(3)执行以下命令重新加载systemctl配置:


systemctl daemon-reload 

(4)执行以下命令重新启动Docker:


systemctl restart docker.service 

(5)执行以下操作,确认Docker守护进程是否在所配置的端口上侦听:


[root@host-a ~]# netstat -lntp | grep dockerd 
tcp6      0     0 :::2375           :::*                 LISTEN      13327/dockerd  

也可以在Docker客户端命令中通过选项-H指定要连接的远程主机(如果远程主机启用了防火墙,应开放TCP 2375端口),命令如下所示:


[root@host-a ~]# docker -H tcp://192.168.199.31:2375 info 
Containers: 1 
 Running: 0 

如果觉得客户端每次运行都需要指定-H选项比较麻烦,可以通过export命令设置该远程主机的环境变量,命令如下所示:


[root@host-a ~]# export DOCKER_HOST="tcp://192.168.199.31:2375" 

之后直接运行docker命令时就会自动连接到该远程主机进行操作了。

5.卸载Docker旧版本

Docker CE软件包名为docker-ce,如果安装有名为docker或docker-engine的Docker旧版本,需要首先卸载它们及其关联的依赖,执行以下命令:


yum remove docker  docker-client  docker-client-latest   docker-common \ 
   docker-latest  docker-latest-logrotate  docker-logrotate  docker-engine