idea使用Alibaba Cloud Toolkit插件远程操作Docker

idea使用Alibaba Cloud Toolkit插件远程操作Docker

文章目录

  • 前言
  • 一、`tcp://IP:2375或者Unix socket` 连接Docker(不安全)
    • 问题1:为什么本地虚拟机能连上,xxx云ECS服务器连不上?
    • 问题2:什么是Unix域套接字?有什么作用?
    • 问题3:2375端口一般是干什么的?
    • 总结:
  • 二、TLS 方式连接远程服务器的Docker(安全)
    • 1)、Linux 系统 生成CA证书
      • 1. 进入生成证书的目录
      • 2. 创建 TLS 证书 (根证书、服务端证书、客户端证书)
      • 3. 给脚本权限,并执行脚本
      • 4. 测试客户端通过TLS方式是否能访问docker
    • 2)、使用`Alibaba Cloud Toolkit`插件远程操作Docker
    • FAQ:
      • FAQ1: `Can not generate private key from file: C:\Users\xxx\key.pem`
      • FAQ2: `Can not generate private key from file: C:\Users\xxx\cert.pem`
      • FAQ3: `Can not generate private key from file: C:\Users\xxx\ca.pem`
      • FAQ4: TCP远程连接Docker服务测试Success,但是双击Docker,又连不上。
  • 转载

前言

从github下载的开源项目源码,你基本上都能在项目根目录下发现会有个Dockerfile文件,Dockerfile文件是记录构建docker容器的构建命令,用途:一般用来将本地的jar包远程传输到服务器上,然后执行Dockerfile文件实现容器化部署服务。

结合 Alibaba Cloud ToolKit 插件如何实现容器化部署呢?

一、tcp://IP:2375或者Unix socket 连接Docker(不安全)

对比 本地虚拟机环境 跟 远程服务器的Docker连接情况:

tcp:// 192.xxx.xxx:2375 连接本地的虚拟机内部的Linux系统,连接成功。

https:// 13x.xxx.xxx:2375 连接XX云ECS远程服务器,连接失败。

连接本地虚拟机docker
连接远程docker

问题1:为什么本地虚拟机能连上,xxx云ECS服务器连不上?

对比 两个环境的docker.service 配置

 vim /lib/systemd/system/docker.service

docker配置 搜索 ExecStart ,对比配置:

# 远程ECS服务器的配置
# 默认监听unix域套接字,而不是tcp、ip端口
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 

# 本地虚拟机的配置
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H=0.0.0.0:2375  # 注意,直接"-H=0.0.0.0:2375"开放2375端口,任何ip任何人都可以通过2375端口操作docker,这有很大风险,容易被攻击。

发现本地虚拟机环境docker配置了 -H=0.0.0.0:2375 ,而远程服务器使用的是默认配置-H fd://,这个命令的意思是启动一个Docker守护进程,使其监听Unix域套接字和containerd的Unix套接字,等待客户端连接。

问题2:什么是Unix域套接字?有什么作用?

Unix域套接字

问题3:2375端口一般是干什么的?

Linux 2375端口通常是用于Docker的远程API服务。当使用Docker命令或客户端进行访问时,它可以允许用户通过网络远程管理Docker守护进程,可以查询Docker运行时环境的状态,启动或停止容器,创建或删除Docker镜像以及执行其他管理任务。但需要注意的是,如果该端口未正确配置或未受到适当的保护,则可能会导致安全漏洞,因此需要谨慎使用和管理。

总结:

默认情况下,Docker远程API未设置的认证机制,因此无论使用哪种连接方式(tcp://IP:2375或者Unix socket),都不需要使用账号密码进行认证。但是这也导致了潜在的安全风险,因为任何人都可以通过该连接方式连接到服务器,并执行Docker相关操作。为了增强安全性,建议对Docker远程API进行认证和授权设置,例如使用TLS证书或设置认证代理等。

注意,直接"-H=0.0.0.0:2375"开放2375端口,任何ip任何人都可以通过2375端口操作docker,这有很大风险,容易被攻击。本地虚拟机可以这么搞,但是上生产环境就不能这么搞了。那么应该怎么做呢?

可以通过开启 TLS证书的方式连接远程Dockr服务器,详见:第二步

二、TLS 方式连接远程服务器的Docker(安全)

1)、Linux 系统 生成CA证书

1. 进入生成证书的目录

cd /home/docker
# 内容比较多, 就写成一个shell脚本, 将需要绑定的服务端ip或域名做参数传入即可
vi tlscert.sh

2. 创建 TLS 证书 (根证书、服务端证书、客户端证书)

脚本内容如下:

#!/bin/bash

 
if [ $# != 1 ] ; then 
echo "USAGE: $0 [HOST_IP]" 
exit 1; 
fi 
#============================================#
#   下面为证书密钥及相关信息配置,注意修改   #
#============================================#
# 必填,CA证书密码
PASSWORD="study@1024"
COUNTRY=CN
# 可选,省份
PROVINCE=yourprovince
# 可选,城市
CITY=yourcity
# 可选,机构/公司名
ORGANIZATION=yourcompany
# 可选,分组
GROUP=yourgroup
# 可选,名称
NAME=yourname
# 必填,CA证书颁发者(即需要被远程连接docker的公网ip或域名)
HOST=$1
SUBJ="/C=$COUNTRY/ST=$PROVINCE/L=$CITY/O=$ORGANIZATION/OU=$GROUP/CN=$HOST"
# CA证书有效天数,这里设置10年
TIME_DAY=3650
 
echo "your host is: $1"
echo "your CA's password is : $PASSWORD"
 
# 1.生成根证书RSA私钥,PASSWORD作为私钥文件的密码
openssl genrsa -passout pass:$PASSWORD -aes256 -out ca-key.pem 4096
 
# 2.用根证书RSA私钥生成自签名的根证书
openssl req -passin pass:$PASSWORD -new -x509 -days $TIME_DAY -key ca-key.pem -sha256 -out ca.pem -subj $SUBJ
 
#============================================#
#          用根证书签发server端证书          #
#============================================#
 
# 3.生成服务端私钥
openssl genrsa -out server-key.pem 4096
 
# 4.生成服务端证书请求文件
openssl req -new -sha256 -key server-key.pem -out server.csr -subj "/CN=$HOST"
 
# 5.使tls连接能通过ip地址方式,绑定IP
echo subjectAltName = IP:127.0.0.1,IP:$HOST > extfile.cnf
 
# 6.使用根证书签发服务端证书
openssl x509 -passin pass:$PASSWORD -req -days $TIME_DAY -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
 
 
#============================================#
#          用根证书签发client端证书          #
#============================================#
 
# 7.生成客户端私钥
openssl genrsa -out key.pem 4096
 
# 8.生成客户端证书请求文件
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
 
# 9.客户端证书配置文件
echo extendedKeyUsage = clientAuth > extfile.cnf
 
# 10.使用根证书签发客户端证书
openssl x509 -passin pass:$PASSWORD -req -days $TIME_DAY -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf
 
#============================================#
#                    清理                    #
#============================================#
# 删除中间文件
rm -f client.csr server.csr ca.srl extfile.cnf
 
# 转移目录。服务端的证书保存在server目录下,客户端的证书保存在client目录下
mkdir client server
cp {ca,cert,key}.pem client
cp {ca,server-cert,server-key}.pem server
rm {cert,key,server-cert,server-key}.pem
 
# 设置私钥权限为只读
chmod -f 0400 ca-key.pem server/server-key.pem client/key.pem

3. 给脚本权限,并执行脚本

# 给脚本添加运行权限
chmod 755 tlscert.sh
HOST_IP=your master Ip
sh ./tlscert.sh $HOST_IP
# 拷贝服务端server目录下的证书,保存在docker目录
sudo cp server/* /etc/docker

# 修改docker守护线程的配置
vim /lib/systemd/system/docker.service
# 找到 ExecStart 并替换

## 这是默认配置,意思是:监听unix域套接字,而不是tcp/ip端口
# ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
## 方式一:这是 直接监听2375端口,任意ip都可以访问,只要别人知道了你的ip和端口,都能连接。不安全!!!
# ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H=0.0.0.0:2375
### 方式二:启用TLS验证,使用TLS模式监听2376端口 (防火墙记得放开,允许外网通过tcp访问该端口,云服务器在安全组设置入站规则)
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock \
  --tlscacert=/etc/docker/ca.pem \
  --tlscert=/etc/docker/server-cert.pem \
  --tlskey=/etc/docker/server-key.pem \
  -H=0.0.0.0:2376


# 重载docker守护进程配置 
sudo systemctl daemon-reload	
# 重启docker服务  
sudo service docker restart		

执行脚本示意图
脚本执行示意图

4. 测试客户端通过TLS方式是否能访问docker

命令任选其一,测试:

# 客户端加tls参数访问
docker --tlsverify --tlscacert=client/ca.pem --tlscert=client/cert.pem --tlskey=client/key.pem -H tcp://127.0.0.1:2376 version
 
# Docker API方式访问
curl https://127.0.0.1:2376/images/json --cert client/cert.pem --key client/key.pem --cacert client/ca.pem

测试成功

ok

2)、使用Alibaba Cloud Toolkit插件远程操作Docker

  1. 拷贝 “/client”客户端相关文件到window本地,比如:我拷贝到C:\Users\HZL\yk证书\client

  2. File –> Settings –> Alibaba Cloud Toolkit –> Docker配置 TCP连接https://ip:端口,并测试。

    • 勾选 Enable authentication ,指定 CA证书目录,目录下必须要有三个文件: key.pemcert.pemca.pem

    • 点击 Test Connection测试连接, 提示 success ,代表TCP连接远程docker成功

    success

  3. 添加 Docker Image配置,创建 新的Docker连接

添加docker

配置好后,保存退出,

View -> Tool Windows -> Services 调出控制台

services

点击,刚才配置的 远程服务器的Docker,连接成功后,会显示容器内部的详情,如下:

双击

FAQ:

FAQ1: Can not generate private key from file: C:\Users\xxx\key.pem

FAQ2: Can not generate private key from file: C:\Users\xxx\cert.pem

FAQ3: Can not generate private key from file: C:\Users\xxx\ca.pem

FAQ1-3的问题类似:Alibaba Cloud Toolkit 内部固定默认读取 key.pemcert.pemca.pem文件,如果提示这个,就是因为你指定的证书目录下,没有这三个文件,或者你的文件名不一致导致找不到。重命名即可,或者重新生成。

FAQ4: TCP远程连接Docker服务测试Success,但是双击Docker,又连不上。

openssl-success
fail

原因:出在生成CA证书的时候,颁发者Common Name 设置了 /CN=*正确应该是,设置远程Docker所在的服务器公网IP或域名。这种情况, 重新生成CA证书即可解决。

转载

[ Docker Daemon 连接方式详解 ] : https://www.jianshu.com/p/7ba1a93e6de4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/24941.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux之创建进程、查看进程、进程的状态以及进程的优先级

文章目录 前言一、初识fork1.演示2.介绍3.将子进程与父进程执行的任务分离4.多进程并行 二、进程的状态1.进程的状态都有哪些?2.查看进程的状态2.运行(R)3.阻塞4.僵尸进程(Z)1.僵尸状态概念2.为什么要有僵尸状态&#…

伺服系统使用S曲线

在之前文章《S形曲线规划方式汇总》 介绍过贝塞尔曲线方式,并且在Marlin开源工程中也有贝塞尔曲线步进系统的实现方式。本篇介绍伺服系统中基于时间分割法实现的贝塞尔S曲线。 1 贝塞尔曲线路程规划 上文中推导过贝塞尔曲线,本文直接用结论&#xff1a…

OFGF光流引导特征:用于视频动作识别的快速且稳健的运动表示【含源码】

论文地址:https://openaccess.thecvf.com/content_cvpr_2018/papers/Sun_Optical_Flow_Guided_CVPR_2018_paper.pdf 这个 repo 包含论文的实现代码: Optical Flow Guided Feature: A Fast and Robust Motion Representation for Video Action Recognition,Shuyang Sun,Zh…

TCO-PEG-Thiol,反式环辛烯聚乙二醇巯基,具有末端硫醇基团的双功能TCO PEG衍生物

产品描述: TCO PEG Thiol是具有末端硫醇基团的双功能TCO PEG衍生物。TCO(反式环辛烯)基团与四嗪基团快速有效地反应,而硫醇(巯基)可用于与马来酰亚胺反应,与金表面结合并参与许多其他反应。 TC…

医疗IT系统安科瑞隔离电源装置在医院的应用

【摘要】介绍该三级综合医院采用安科瑞隔离电源系统5件套,使用落地式配电柜安装方式,从而实现将TN系统转化为IT系统,以及系统绝缘情况监测。 【关键词】医用隔离电源系统;IT系统;绝缘情况监测;三级综合医院…

Java版本企业电子招投标采购系统源码之项目说明和开发类型源码

项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及…

办公OA系统性能分析案例

前言 信息中心老师反应,用户反馈办公系统有访问慢的情况,需要通过流量分析系统来了解系统的运行情况,此报告专门针对系统的性能数据做了分析。 信息中心已部署NetInside流量分析系统,使用流量分析系统提供实时和历史原始流量&am…

基于LeNet-5的手写数字识别实战

图像识别是计算机视觉最常用的任务之一,几乎所有的有关图像识别的教程都会将MNIST数据集作为入门数据集,因为MNIST数据集是图像识别问题中难度最小、特征差异较为明显的数据集,非常适合作为图像识别入门者的学习案例。本案例使用MNIST数据集&…

【k8s】【Prometheus】【待写】

环境 k8s v1.18.0 192.168.79.31 master 192.168.79.32 node-1 192.168.79.33 node-2一、Prometheus 对 kubernetes 的监控 1.1 node-exporter 组件安装和配置 node-exporter 可以采集机器(物理机、虚拟机、云主机等)的监控指标数据,能够采…

微服务开发系列 第七篇:RocketMQ

总概 A、技术栈 开发语言:Java 1.8数据库:MySQL、Redis、MongoDB、Elasticsearch微服务框架:Spring Cloud Alibaba微服务网关:Spring Cloud Gateway服务注册和配置中心:Nacos分布式事务:Seata链路追踪框架…

网络通信:http协议

虽然我们说, 应用层协议是我们程序猿自己定的. 但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议) 就是其中之一. 认识URL 统一资源定位符(Uniform Resource Locator,缩写:URL),…

DAY07_HTMLCSS

目录 1 HTML1.1 介绍1.1.1 WebStrom中基本配置 1.2 快速入门1.3 基础标签1.3.1 标题标签1.3.2 hr标签1.3.3 字体标签1.3.4 换行标签1.3.5 段落标签1.3.6 加粗、斜体、下划线标签1.3.7 居中标签1.3.8 案例 1.4 图片、音频、视频标签1.5 超链接标签1.6 列表标签1.6.1 列表中图表类…

【Selenium】提高测试爬虫效率:Selenium与多线程的完美结合

前言 使用Selenium 创建多个浏览器,这在自动化操作中非常常见。 而在Python中,使用 Selenium threading 或 Selenium ThreadPoolExecutor 都是很好的实现方法。 应用场景: 创建多个浏览器用于测试或者数据采集;使用Selenium…

C语言深度解析--操作符

目录 操作符 1.算数操作符 2.移位操作符 左移操作符<<&#xff1a; 右移操作符>>&#xff1a; 3.位操作符 按位与&&#xff1a; 按位或 | &#xff1a; 按位异或 ^ &#xff1a; 4.赋值操作符 5.单目操作符 6.关系操作符 7.逻辑操作符 8.条件操作…

如何快速搭建SpringBoot+Vue前后端分离的开发环境

唠嗑部分 今天我们来说一说&#xff0c;如何快速搭建SpringBootVue前后端分离的开发环境 需要前置环境nodejs&#xff0c;请自行安装(傻瓜式安装) SpringBoot采用2.4.2版本&#xff0c;Vue采用Vue2版本 言归正传 创建Vue项目 1、安装vue npm install -g vue/cli2、检查v…

TDengine 报错 failed to connect to server, reason: Unable to establish connection

一、前文 TDengine 入门教程——导读 二、遇到问题 taos 命令行&#xff08;CLI&#xff09;连接不上&#xff0c;进不去。 [rootiZ2ze30dygwd6yh7gu6lskZ ~]# taos Welcome to the TDengine Command Line Interface, Client Version:3.0.0.1 Copyright (c) 2022 by TDengine…

Linux 安装nodejs、npm、yarn、nrm(超实用)

前言&#xff1a;初衷想要本地通过dockerfile文件直接把项目打包到linux服务器&#xff0c;不用再本地加载再上传等&#xff0c;后续再贴上配置文件 一、什么是nodejs 来自官网的介绍&#xff0c;Node.js 是一个开源的跨平台 JavaScript 运行时环境。它几乎是任何类型项目的流…

JVM内存结构介绍

我们都知道&#xff0c;Java代码是要运行在虚拟机上的&#xff0c;而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域&#xff0c;这些区域都有各自的用途。其中有些区域随着虚拟机进程的启动而存在&#xff0c;而有些区域则依赖用户线程的启动和结束…

远程访问群晖Drive并挂载为电脑磁盘同步备份文件「无需公网IP」

文章目录 前言视频教程1.群晖Synology Drive套件的安装1.1 安装Synology Drive套件1.2 设置Synology Drive套件1.3 局域网内电脑测试和使用 2.使用cpolar远程访问内网Synology Drive2.1 Cpolar云端设置2.2 Cpolar本地设置2.3 测试和使用 3. 结语 转发自CSDN远程穿透的文章&…

【Netty】Reactor 模型(十)

文章目录 前言一、传统服务的设计模型二、NIO 分发模型三、Reactor 模型3.1、Reactor 处理请求的流程3.2、Reactor 三种角色 四、单Reactor 单线程模型4.1、消息处理流程4.2、缺点 五、单Reactor 多线程模型5.1、消息处理流程5.2、缺点 六、主从Reactor 多线程模型6.1、Reactor…