Docker之开启远程访问的实现

下面是Docker开启远程访问的实现攻略:

一、修改 Docker daemon 配置

默认情况下,Docker daemon 只监听本地 socket 连接。为了实现 docker 远程访问,我们需要修改 Docker daemon 的配置,监听网络请求。在 /etc/docker/daemon.json 中添加以下内容:

{
  "hosts": ["tcp://0.0.0.0:2376", "unix:///var/run/docker.sock"],
  "tlsverify": true,
  "tlscacert": "/etc/docker/ca.pem",
  "tlscert": "/etc/docker/server-cert.pem",
  "tlskey": "/etc/docker/server-key.pem"
}

说明:

  • hosts:指定 Docker daemon 监听额外的网络地址,这里配置为监听本地所有的 IP 地址上的 2376 端口。

  • tlsverify:是否启用 TLS 认证。

  • tlscacerttlscerttlskey:配置 TLS 认证的证书和秘钥。

二、配置 TLS 证书

为了保证访问的安全性,我们需要启用 TLS 认证。下面是涉及到的文件:

  1. a. CA 证书:ca.pem
    b. CA 私钥:ca-key.pem

  2. a. 自签名服务器证书:server-cert.pem
    b. 服务器私钥:server-key.pem

首先创建用于生成证书的目录,执行以下命令:

$ mkdir /etc/docker
$ cd /etc/docker

1. a. CA 证书:

生成 CA 私钥:

$ openssl genrsa -aes256 -out ca-key.pem 4096

说明:

  • -aes256:指定使用 AES 算法加密,加密位数为 256 位。
  • -out:指定输出文件路径和文件名。
  • 4096:指定私钥位数为 4096 位。

生成 CA 证书:

$ openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

说明:

  • -new:新生成一个证书请求。
  • -key:为之前生成的私钥。
  • -out:指定输出路径和文件名。
  • -days:证书的有效期,这里设置为 365 天。
  • -sha256:指定摘要算法为 SHA-256。

2. a. 服务器证书:

生成私钥:

$ openssl genrsa -out server-key.pem 4096

生成证书请求:

$ openssl req -subj "/CN=<your-server-hostname>" -sha256 -new -key server-key.pem -out server.csr

说明:

  • -subj:设置证书的主题信息,这里填写你的服务器主机名或 IP 地址。
  • -key:为之前生成的私钥。
  • -out:指定输出路径和文件名。
  • -sha256:指定摘要算法为 SHA-256。

生成证书:使用自签名的方式签发证书,执行以下命令:

$ echo "subjectAltName = IP:<your-server-ip>" > extfile.cnf
$ openssl x509 -req -days 365 -sha256 -in server.csr -signkey server-key.pem -out server-cert.pem -extfile extfile.cnf

说明:

  • -days:证书的有效期,这里设置为 365 天。
  • -in:指定证书请求。
  • -signkey:为之前生成的私钥。
  • -out:指定输出路径和文件名。
  • -extfile:使用 extfile.cnf 文件中的代替名作为证书中的主题替代名。

三、启动 Docker daemon

修改完成 Docker daemon 的配置和配置证书后,重启 Docker daemon 服务即可。

$ sudo service docker restart

四、使用客户端连接 Docker daemon

启用 TLS 认证后,我们需要使用客户端证书和私钥来连接 Docker daemon。如果客户端未处在相同主机,需要将之前生成的 CA 证书 ca.pem 发送给客户端。

1. 验证 Docker daemon 的 TLS 连接

$ docker --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/client-cert.pem --tlskey=/etc/docker/client-key.pem -H=<your-server-ip>:<docker-port> version

其中:

  • --tlsverify:启用 TLS 认证。
  • --tlscacert、--tlscert、--tlskey:分别指定 CA 证书、客户端证书和私钥的路径。
  • -H:指定 Docker daemon 的地址和端口号。

2. 解除 Docker daemon 的 TLS 连接验证

$ export DOCKER_TLS_VERIFY=0
$ export DOCKER_HOST=<your-server-hostname>:<docker port>

示例说明

示例一:使用官方提供的 docker-machine 工具

使用 docker-machine 工具创建 Docker daemon 服务并开启 TLS 认证,具体步骤如下:

  1. 安装 docker-machine
  2. 在本地生成客户端证书和私钥,并将 ca.pem 文件发送到本地
  3. 使用 docker-machine 创建远程 Docker daemon,并将生成的服务器证书和私钥复制到服务器上(注意备份)
  4. 修改 Docker daemon 的配置,完成 TLS 配置
  5. 重启 Docker daemon 服务,并验证 TLS 连接
# 注意替换成自己的值
YOUR_REMOTE_HOST=<your-server-ip>
DOCKER_PORT=2376

# 创建 docker-machine
$ docker-machine create \
    --driver generic \
    --generic-ip-address $YOUR_REMOTE_HOST \
    --generic-engine-port $DOCKER_PORT \
    --generic-ssh-port 22 \
    --engine-install-url "https://releases.rancher.com/install-docker/19.03.11.sh" \
    remote_docker

# 复制证书和私钥到服务器
$ scp -r ~/.docker/machine/certs remote_docker:/home/ubuntu

# 在服务器上完成配置
$ ssh remote_docker

# 修改 Docker daemon 配置
$ sudo vi /etc/docker/daemon.json

# 重启 Docker daemon 服务
$ sudo service docker restart

# 验证 TLS 连接
$ docker --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/cert.pem --tlskey=/etc/docker/key.pem -H=$YOUR_REMOTE_HOST:$DOCKER_PORT version

示例二:使用 docker-compose 部署应用

使用 docker-compose 部署应用,具体步骤如下:

  1. 在本地生成客户端证书和私钥,并将 ca.pem 文件发送到远程主机
  2. 编写 docker-compose.yml 文件,指定 Docker daemon 的连接信息和使用的证书
  3. 在远程主机上通过 docker-compose 启动应用
# docker-compose.yml 文件内容
version: "3"

services:
  nginx:
    image: nginx
    container_name: test-nginx
    ports:
      - 80:80
    tls:
      ca_cert: /etc/docker/ca.pem
      cert: /etc/docker/cert.pem
      key: /etc/docker/key.pem
      verify: True
      host: "tcp://<your-server-ip>:2376"
    command: nginx -g "daemon off;"
# 将证书文件发送远程主机
$ scp -r /path/to/certs ubuntu@<your-server-ip>:/home/ubuntu

# 在远程主机上使用 docker-compose 启动应用
$ sudo docker-compose up

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Docker之开启远程访问的实现 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Docker中 Ubuntu 容器 apt-get update网络访问失败解决办法

    学习Docker在Ubuntu容器中使用apt-get update命令遇到如下网络连接错误: $ docker run -it ubuntu root@3c5e3b049c88:/# apt-get update Err:1 http://archive.ubuntu.com/ubuntu bionic InRelease Temporary failur…

    Docker 2023年4月13日
    00
  • Docker基本命令使用详解(推荐)

    Docker基本命令使用详解(推荐) 简介 Docker是一种容器化技术,可以将应用程序及其依赖打包成一个独立的可执行的容器。使用Docker可以避免应用程序之间的冲突,也可以方便地部署应用程序。 Docker命令 容器命令 docker run docker run是Docker最常用的命令之一,用于启动一个新的容器。 一个最简单的docker run命令…

    Docker 2023年5月16日
    00
  • docker网络及部署集群和打包镜像问题

    我来为您讲解完整的“Docker网络及部署集群和打包镜像问题”的攻略吧。 Docker网络 在Docker中,网络是将容器连接到一起以及容器与主机进行通信的重要方式。目前,Docker支持四种网络模式: bridge模式:Docker默认的网络模式,提供在同一主机上容器之间的通信。 host模式:使得容器与主机共享网络命名空间,可以访问主机上的所有端口。 n…

    Docker 2023年5月16日
    00
  • 记一次Ubuntu19无法安装docker源

    按照各大网站以及个人习惯我会使用下面这种方法添加Docker源: root@ubuntu:~# sudo add-apt-repository “deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable”   然而使用上面这条命令…

    Docker 2023年4月13日
    00
  • Docker到底是什么,要解决什么问题,好处又在哪里?

    软件开发最大的麻烦事之一,就是环境配置。用户计算机的环境都不相同,你怎么知道自家的软件,能在那些机器跑起来?用户必须保证两件事:操作系统的设置,各种库和组件的安装。只有它们都正确,软件才能运行。举例来说,安装一个 Python 应用,计算机必须有 Python 引擎,还必须有各种依赖,可能还要配置环境变量。如果某些老旧的模块与当前环境不兼容,那就麻烦了。开发…

    Docker 2023年4月13日
    00
  • 两种方式创建docker镜像的启动容器时区别介绍(总结篇)

    创建Docker镜像的方式有两种:使用Dockerfile创建和通过容器创建。在启动容器时,这两种方式的区别取决于你创建镜像时使用的方法。 使用Dockerfile创建镜像 Dockerfile是Docker镜像的构建文件,可以在其中指定Docker镜像的基础环境、安装的软件包、代码等。当你通过Dockerfile创建Docker镜像后,启动Docker容器…

    Docker 2023年5月16日
    00
  • redis 连接 docker容器 6379端口失败

    容器内redis-cli是可以直接连上的,但是在另一台服务器上就不能用外网ip来连了 虽然我创建redis容器时声明了映射TCP 6379。 image linux/0805 是我本地提交镜像 基于 centos7+jdk8       1.安装 yum install mongodb-org 2.安装 yum install redis 提交镜像到本地  …

    Docker 2023年4月16日
    00
  • Docker可视化管理工具DockerUI的使用

    DockerUI是一个Docker的可视化管理工具,它可以让用户轻松地管理自己的Docker容器以及镜像。使用DockerUI,用户可以很容易地运行、停止、创建和删除一只或多个Docker容器。以下是关于DockerUI使用的完整攻略。 安装DockerUI 首先,用户需要安装DockerUI。为此,用户可以参考以下步骤: 在本地机器上安装Docker和np…

    Docker 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部