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 存储管理的几种方式

    Docker 存储管理的几种方式: 1. 数据卷 数据卷是 Doker 中最常用的一个存储管理方式,它可以将主机上的一个目录或文件挂载到容器中,使得容器中的数据可以被持久化。具体操作如下: 创建一个数据卷: docker volume create my_volume 运行容器并将数据卷挂载到容器中: docker run -it -v my_volume:…

    Docker 2023年5月16日
    00
  • docker-图形化-portainer管理多台docker主机

    1. portainer管理多台docker主机 2. 管理其他docker主机,需要开启docker api # vi /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock …

    Docker 2023年4月16日
    00
  • 1.【原创】Ubuntu下Docker的安装&设置开机启动

    根据官方文档进行docker安装(文档地址:https://docs.docker.com/engine/install/ubuntu/):   1.安装前提条件: 必须要在64位的系统下才能安装,当前版本的docker是不支持32位系统的。 发行的版本号如下,16.04之前的版本建议进行升级: Ubuntu Focal 20.04 (LTS) Ubuntu…

    Docker 2023年4月12日
    00
  • Docker 网络模式(四种)详细介绍

    Docker 网络模式(四种)详细介绍 Docker 容器的网络模式分为四种,分别是: Host 模式 Bridge 模式 Container 模式 None 模式 Host 模式 在 Host 模式中,Docker 容器使用主机的网络命名空间和 IP 地址。这意味着容器和主机共享同一个网络环境,容器可以通过主机的网络接口来访问外部网络。它适用于需要快速启动…

    Docker 2023年5月16日
    00
  • docker从安装入门到应用部署及私有仓库搭建基础命令

    Docker入门 Docker是一款优秀的应用容器引擎,可以方便的实现应用的打包、传输和部署,让应用开发者和系统管理员轻松管理和部署应用。下面我们来一步步了解如何安装、使用docker。 Docker安装 Docker的安装非常简单快捷。具体安装步骤根据不同操作系统略有差异,这里以Ubuntu为例。 # 更新apt源 sudo apt-get update …

    Docker 2023年5月16日
    00
  • Docker容器内无法解析DNS的问题 Could not resolve host

    在docker容器内使用  yum 或者 wget 命令,会提示  cannot resolving host address 无法解析主机地址  ,也就是容器内无法解析DNS。 Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&…

    Docker 2023年4月11日
    00
  • Docker for windows安装与使用

    1、安装Docker for windows之前,需要将系统的hyper-v功能打开2、下载Docker for windows进行安装访问url:https://docs.docker.com/docker-for-windows/install/#download-docker-for-windows3、下载完之后,安装4、安装完成后,进入powersh…

    Docker 2023年4月12日
    00
  • 一文带你了解linux中Docker背后的原理

    一文带你了解Linux中Docker背后的原理 简介 Docker是一种开源的容器化平台,可以帮助开发人员、系统管理员和DevOps工程师在多种环境中快速、便捷地构建、打包、部署和管理应用程序。本文将详细介绍Docker的原理。 Docker的基本概念 在开始之前,有必要介绍一些Docker的基本概念: 镜像(Image):是Docker容器的静态模板,类似…

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