Docker(三):Linux 主机配置(Docker 安装后步骤)

Docker(三):Linux 主机配置(Docker 安装后步骤)

  • 以非 root 用户身份管理 Docker
  • 配置 Docker 在 Linux 开机时启动
  • 开启远程访问 Docker
    • 使用 systemd 单元文件配置 HTTP 远程访问
    • 使用 daemon.json 配置 HTTP 远程访问

当我们在 Linux 中安装完 Docker 后,可以对 Linux 主机进行相关配置,从而帮助我们更好地使用 Docker。

有关完整的 Linux 主机配置步骤,可以查看官方文档 Post-installation steps for Linux。本文只罗列了,基本上都要配置的几个步骤。

以非 root 用户身份管理 Docker

关于 Docker 守护进程,我们需要知道以下几点:

  • 默认情况下,Docker 守护进程绑定到 Unix 套接字而不是 TCP 端口
  • 默认情况下,Unix 套接字由用户 root 拥有,而其他用户只能使用 sudo 访问它
  • Docker 守护程序始终以 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

这将列出本地容器。

配置 Docker 在 Linux 开机时启动

大多数当前的 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

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 文件完成

注意,不能同时配置 systemddaemon.json,否则将导致冲突,从而使 Docker 无法启动。

使用 systemd 单元文件配置 HTTP 远程访问

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 命令行工具了。

使用 daemon.json 配置 HTTP 远程访问

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

你可能感兴趣的:(Docker)