Docker开启远程访问(加密)(idea连接Docker实现一键部署)

一、准备工作

服务器上安装好docker,未安装的请跳转到docker安装教程

PS:个人不建议Idea一键部署,打成镜像耗时太长,完全没有自己将包放入服务器启动来的快。如有更好的方法,欢迎留言讨论。

二、开启远程访问(加密)

官网的远程访问配置所有人都能连接,不安全
官网配置允许所有人都可以访问的,因为docker默认是root权限的,你把2375端口暴露在外面,意味着别人随时都可以提取到你服务器的root权限,是很容易被黑客黑的,因此,docker官方推荐使用加密的tcp连接,以Https的方式与客户端建立连接,由于网上搜来的以及官网上面的配置有很多地方比较难懂,稍有不慎,配下来就不能成功连接,所以这里再贴一下docker ca认证的配置方法.

1.先在/usr/local目录下创建个文件夹,这里取名叫ca,然后进入ca文件夹中

mkdir -p /usr/local/ca
cd /usr/local/ca

2.执行下面的命令,需要输入密码,自由指定,两次输入保持一致并记住即可.

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

3.根据提示分别输入国家,省份,城市,组织,等一系列信息(可以随便输,无所谓的其实)

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

4.生成server-key.pem,输入下面命令敲回车即可.

openssl genrsa -out server-key.pem 4096

5.把下面的$Host换成你自己服务器外网的IP或者域名:比如:openssl req -subj “/CN=192.168.1.0” -sha256…

openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr

6.配置白名单,也就是你接下来要允许那些ip可以连接到服务器的docker,因为已经是ssl连接,所以我推荐配置0.0.0.0,也就是所有Ip都可以连接(但只有拥有证书的才可以连接成功),这样配置好之后公司其他人也可以使用.如果你不想这样,那你可以配置Ip,用逗号分隔开.下面的$Host依旧是你服务器外网的IP或者域名,请自行替换.

(这里如果你使用的是服务器Ip的话,请将前面的DNS换成IP,否则配下来连接还是不会成功,如果你使用的是服务器域名,那么就用DNS就可以了)

echo subjectAltName = DNS:$HOST,IP:0.0.0.0 >> extfile.cnf

7.执行下面语句:

echo extendedKeyUsage = serverAuth >> extfile.cnf

8.执行下面语句,然后输入前面设置过的密码,用以生成ca-key.

openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \-CAcreateserial -out server-cert.pem -extfile extfile.cnf

9.生成客户端所需的key.pem,依旧在该服务器下执行下面命令,到时候把生成好的几个公钥私钥拷出去即可.

openssl genrsa -out key.pem 4096
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
echo extendedKeyUsage = clientAuth >> extfile.cnf

10.生成cert.pem,需要输入前面设置的密码:

openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \-CAcreateserial -out cert.pem -extfile extfile.cnf
rm -v client.csr server.csr

11.修改权限:

chmod -v 0400 ca-key.pem key.pem server-key.pem
chmod -v 0444 ca.pem server-cert.pem cert.pem

12.归集服务器证书:

cp server-*.pem  /etc/docker/
cp ca.pem /etc/docker/

13.修改docker配置:

vi /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd
替换为:
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock

14.重新加载daemon并重启docker

systemctl daemon-reload
systemctl restart docker 

15.开放2376端口(有些服务器需要在控制台配置安全组策略)(或者关闭防火墙)

/sbin/iptables -I INPUT -p tcp --dport 2376 -j ACCEPT
iptables-save

16.重启docker

service docker restart

17.然后使用工具比如winscp,或者xshell,把你当前所在的/usr/local/ca文件夹里的拷贝到你本地电脑的某个文件夹里

18.打开IDEA测试一下,选择ca文件夹,端口号为2376

三、idea远程连接docker

1.idea设置中下载docker插件,重启idea

2.File->settings->Build…->Docker->点击+号->选中TCP socket->

在这里插入图片描述

3.连接完成后可以在IDEA左下角找到Docker:(没找到的点击左下角的Services,里面有docker)

4.点击上图左上角的播放按钮或者双击,即可连接到服务器的docker

5.服务器上下载好java镜像

docker pull java:8
docker images

如果是arm64/aarch64系统内核无法使用该java环境
Docker自定义java镜像(解决java:8镜像不支持arm64/aarch64的问题)

6.创建镜像和容器并启动容器:

(1)先把项目打成jar包,
(2)在项目下新建Dockerfile(推荐在项目顶层文件夹下新建,不要放在别处,否则可能创建镜像失败):

FROM java:8
 
ADD eVoucher-starter/target/eVoucher.jar shiwei-app.jar
 
EXPOSE 11000
 
ENTRYPOINT ["java", "-jar", "shiwei-app.jar"]

7.配置docker一键部署

点击Run->Run->Edit Configurations->点击+号->选择Docker->Dockerfile->然后按下图所示填写信息,填完点ok即可.
在这里插入图片描述

8.点击启动按钮,根据刚刚的配置自动创建镜像,并用镜像创建容器启动

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐