当我们在 Linux 中安装完 Docker 后,可以对 Linux 主机进行相关配置,从而帮助我们更好地使用 Docker。
有关完整的 Linux 主机配置步骤,可以查看官方文档 Post-installation steps for Linux。本文只罗列了,基本上都要配置的几个步骤。
关于 Docker 守护进程,我们需要知道以下几点:
root
拥有,而其他用户只能使用 sudo
访问它root
用户身份运行如果,我们不想在 docker
命令前加上 sudo
,则可以创建一个名为 docker
的用户组并将用户添加到该组中。
docker
组授予了与root
用户等效的权限。
而我们已经知道了,Docker 安装完成后,会自动帮我们创建 docker
用户组,但未向该组添加任何用户。
1、如果系统中还不存在 docker
用户组,那么我们也可以通过执行以下命令进行手动创建:
$ sudo groupadd docker
2、我们将当前用户添加到 docker
组:
$ sudo usermod -aG docker $USER
3、注销(Ctrl + D
)并重新登录,以便重新评估用户的用户组成员身份。
4、验证我们是否可以在没有 sudo
的情况下运行 docker
命令:
$ docker ps
这将列出本地容器。
大多数当前的 Linux 发行版(RHEL,CentOS,Fedora,Ubuntu 16.04 及更高版本)使用 systemd
来管理系统开机时启动的服务。 Ubuntu 14.10 及以下版本使用 upstart
。CentOS 6 及以下版本使用 chkconfig
。
systemd
$ sudo systemctl enable docker
若要禁用此行为,则使用 disable
替换为 enable
即可:
$ sudo systemctl disable docker
upstart
Docker 被自动配置为在开机时使用 upstart
启动。若要禁用此行为,请使用以下命令:
$ echo manual | sudo tee /etc/init/docker.override
chkconfig
$ sudo chkconfig docker on
Docker Engine API 有三种连接方式:
unix:///var/run/docker.sock
tcp://[host]:[port][path]
fd://socketfd
我们可以通过以下命令查看当前 Docker Engine API 连接方式:
$ ps -ef | grep docker
root 10175 1 0 10:51 ? 00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
wxj 10537 10466 0 10:53 pts/0 00:00:00 grep --color=auto docker
默认情况下,Docker 守护进程侦听 UNIX 套接字上的连接,从而接受来自本地客户机的请求。如果我们想是通过远程方式连接到 Docker,则还需要配置 Docker 守护进程的监听 IP 地址和端口。
这也是我们后续使用容器管理工具连接 Docker 的必要条件,比如轻量级容器管理工具 portainer。
有两种方式可以配置 Docker 以接受远程连接:
systemd
的 Linux 发行版(如 RedHat、CentOS、Ubuntu 和 SLES 的最新版本,)我们可以通过编辑 docker.service
systemd 单元文件完成systemd
的 Linux 发行版,则可以通过编辑 daemon.json
文件完成注意,不能同时配置
systemd
和daemon.json
,否则将导致冲突,从而使 Docker 无法启动。
1、通过文本编辑器打开 docker.service
文件:
$ sudo vi /usr/lib/systemd/system/docker.service
2、复制原行,并注释掉原行,再在复制行中增加我们需要 IP 地址和端口配置:
# ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock
3、保存文件 :wq
。
4、重新加载 systemctl
配置:
$ sudo systemctl daemon-reload
5、重启 Docker:
$ sudo systemctl restart docker
6、检查是否配置成功:
$ sudo netstat -lntp | grep dockerd
tcp6 0 0 :::2375 :::* LISTEN 10571/dockerd
netstat
是一个命令行实用程序,它可以用来查看与计算机之间的网络连接的统计信息。使用netstat
,我们可以看到网络连接、路由表、接口统计信息、伪装连接和多播成员关系。
但是,在安装完 CentOS 7 / RHEL 7 后却并沒有包含netstat
,这需要我们安装额外包才行。
因为是net-tools
包提供了netstat
命令,所以,我们使用yum
命令安装net-tools
软件包:
$ sudo yum install -y net-tools
安装完成后,我们就可以使用
netstat
命令行工具了。
1、通过文本编辑器打开 /etc/docker/daemon.json
文件:
$ sudo vi /etc/docker/daemon.json
2、在 /etc/docker/daemon.json
中设置 hosts
数组以连接到 UNIX 套接字和 IP 地址:
{
"hosts": [
"unix:///var/run/docker.sock",
"tcp://0.0.0.0:2375"
]
}
3、重启 Docker:
$ sudo systemctl restart docker
4、检查是否配置成功:
$ sudo netstat -lntp | grep dockerd
tcp6 0 0 :::2375 :::* LISTEN 10571/dockerd