【Docker】在IDEA中实现一键部署到服务器(附ssl连接加密)

近年来微服务可谓是火遍大江南北,随着业务的拆分和高可用和集群,服务变得越来越多,不再像原来的单体应用架构那样,部署只需要执行一条nohup java -jar xx.jar &就可以完成部署,如果在微服务里还是用这种方式完成部署的话那就太low太耗时间了,Docker的出现很好的解决了这个问题,可以说Docker和微服务是天生一对,用上Docker问题已经解决一大半了,但人是贪心的,总感觉还不够完美,要是能像在IDEA中启动项目一样完成部署,且日志显示在控制台就好了,于是本篇就带大家从零开始到梦想成真.(默认大家已经学完了docker,并且熟悉linux常用命令,如果没有前面这两样基础,建议可以稍微去了解下,不然不太容易理解后面的概念)

先截张图给大家看看使用IDEA一键部署有多爽:

被爽到了吧,那就耐下心来跟我一起配置,从最简单的开始,一直到配置ca加密安全连接...

乞丐版:

我以IDEA2018.1和CentOS7.3为例(版本不同影响也不大)

在你的服务器上安装docker,这里我就不花篇幅介绍如何安装了,想学的可以百度或者去我简书学习(传送门:https://www.jianshu.com/p/31174a43e173)

安装后开放docker的远程连接访问:

执行:vi /usr/lib/systemd/system/docker.service

修改ExeStart为:/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

重新加载配置并重启Docker:

执行:systemctl daemon-reload 执行:systemctl restart docker

开放防火墙2375端口:

执行: /sbin/iptables -I INPUT -p tcp --dport 2375 -j ACCEPT

执行:iptables-save

OK,至此服务器端配置完成.

接下来配置IDEA:

File->settings->plugings->Browse repositories->搜索docker->选中docker integration->点击右下角install安装,完成后重启IDEA.

重启后继续打开File->settings->Build...->Docker->点击+号->选中TCP socket->输入你服务器的ip和docker远程连接的端口号2375. 输入后会自动建立连接,如果这时候你看到显示连接成功后->apply->ok. 如果显示连接失败,请关闭windows防火墙,并确认服务器端防火墙的2375端口是否已开放且处于监听状态(netstat -tnl 去找一下是否有2375且显示Listen状态)

连接完成后可以在IDEA左下角找到Docker:

没错,就是这只萌萌的小鱼,点击上图左上角的播放按钮,即可连接到服务器的docker:

然后下面带大家亲自创建镜像和容器并启动容器:

第一步:先把项目打成jar包,这个我不多说了,用maven直接打包,跟以前部署没啥两样,打包之后在target中可以找到打包好的项目:

第二步:在项目下新建DockerFile(推荐在项目顶层文件夹下新建,不要放在别处,否则可能创建镜像失败):

第三步:编写DockerFile

为了方便大家复制,再贴一遍:

From hub.c.163.com/library/java:8-jre

ADD target/*.jar ylt-config-01.jar

EXPOSE 8888

ENTRYPOINT ["java", "-jar", "ylt-config-01.jar"]

第四步:配置docker一键部署

点击Run->Run->Edit Configurations->点击+号->选择Docker->Dockerfile->然后按下图所示填写信息,填完点ok即可.

至此,自动一键部署已配置完成,下面我们来测试一下:

选中刚刚创建的docker,点击启动按钮,然后耐心等待一下,它就会帮你自动部署完成.

创建好的镜像还可以推送到远端镜像仓库,然后下次需要在其他服务器上部署时,只需要一条命令docker pull拉下来,再docer run就可以完成部署,非常爽,推送到远端仓库的话需要额外配置一下:

最后,如果你觉得这样就万事大吉了,那我只能告诉你图样图森破了,前面提到的配置是允许所有人都可以访问的,因为docker默认是root权限的,你把2375端口暴露在外面,意味着别人随时都可以提取到你服务器的root权限,是很容易被黑客黑的,因此,docker官方推荐使用加密的tcp连接,以Https的方式与客户端建立连接,由于网上搜来的以及官网上面的配置有很多地方比较难懂,稍有不慎,配下来就不能成功连接,所以这里再贴一下docker ca认证的配置方法.

大神版:

参考地址(官方):https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl

打开你的服务器,分别执行下面的命令:

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

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

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

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

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

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

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

openssl genrsa -out server-key.pem 4096

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

或:openssl req -subj "/CN=www.laohan.com" -sha256...(这么做前提是你有域名,该域名DNS解析后指向你的服务器)

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

5.配置白名单,也就是你接下来要允许那些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

6.执行下面语句:

echo extendedKeyUsage = serverAuth >> extfile.cnf

7.执行下面语句,然后输入前面设置过的密码,用以生成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

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

openssl genrsa -out key.pem 4096

9.执行下面命令:

openssl req -subj '/CN=client' -new -key key.pem -out client.csr

10.执行下面命令:

echo extendedKeyUsage = clientAuth >> extfile.cnf

11.生成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

12.删除"废物"

rm -v client.csr server.csr

13.修改权限:

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

14.归集服务器证书:

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

15.修改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

16.重新加载daemon并重启docker

systemctl daemon-reload
systemctl restart docker 

17.开放2376端口

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

18.重启docker

service docker restart

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

(我这里本地在桌面新建了一个叫ca的文件夹)

20.至此万事大吉,大吉大利,今晚吃鸡了...下面我们打开IDEA测试一下:

没有问题,很爽,成功建立连接,接下来部署项目就可以一键部署了,而且不用担心安全问题,刚刚ca文件夹里的三个秘钥请妥善保管,只有拥有这三个秘钥的人才可以连接到远端的docker,本期教程到此为止,欢迎关注本博,会持续分享一些新知识和一些好用的工具给大家.

  • 17
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 22
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值