原创

IDEA 一键部署spring boot项目到阿里云docker容器中

1、IDEA 安装docker 插件
打开idea, file->settings->Plugins,点击install jetbrains plugin
file
在搜索框中输入docke, 选中docker integration插件进行安装,安装完成之后提示重启idea.
file
file
2、阿里云esc docker 安装
参考安装
安装后开放docker的远程连接访问:

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

修改ExeStart为:/usr/bin/dockerd-current -H tcp://0.0.0.0:xxxx -H unix://var/run/docker.sock
可以利用sublime_text工具修改查看
file
重新加载配置并重启Docker:

执行:systemctl daemon-reload 执行:systemctl restart docker
OK,至此服务器端配置完成.

3、IDEA docker配置
接下来配置IDEA:
重启后继续打开File->settings->Build...->Docker->点击+号->选中TCP socket->输入你服务器的ip和docker远程连接的端口号xxxx. 输入后会自动建立连接,如果这时候你看到显示连接成功后->apply->ok. 如果显示连接失败,请关闭windows防火墙,并确认服务器端防火墙的xxxx端口是否已开放且处于监听状态(netstat -tnl 去找一下是否有xxxx且显示Listen状态)
file
file
file
连接完成后可以在IDEA左下角找到Docker:
file
没错,就是这只萌萌的小鱼,点击上图左上角的播放按钮,即可连接到服务器的docker:
file
然后下面带大家亲自创建镜像和容器并启动容器:

第一步:先把项目打成jar包,这个我不多说了,用maven直接打包,跟以前部署没啥两样,打包之后在target中可以找到打包好的项目:
file
第二步:在项目下新建DockerFile(推荐在项目顶层文件夹下新建,不要放在别处,否则可能创建镜像失败):
file
为了方便大家复制,再贴一遍:

FROM java:8

ADD target/*.jar admin.jar

RUN bash -c 'touch /admin.jar'

EXPOSE xxxx

ENTRYPOINT ["nohup","java","-jar","admin.jar","&"]

第四步:配置docker一键部署

点击Run->Run->Edit Configurations->点击+号->选择Docker->Dockerfile->然后按下图所示填写信息,填完点ok即可
file
file
file
至此,自动一键部署已配置完成,下面我们来测试一下:

选中刚刚创建的docker,点击启动按钮,然后耐心等待一下,它就会帮你自动部署完成.
file
创建好的镜像还可以推送到远端镜像仓库,然后下次需要在其他服务器上部署时,只需要一条命令docker pull拉下来,再docer run就可以完成部署,非常爽,推送到远端仓库的话需要额外配置一下:
file
最后,如果你觉得这样就万事大吉了,那我只能告诉你图样图森破了,前面提到的配置是允许所有人都可以访问的,因为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:xxxx -H unix:///var/run/docker.sock

16.重新加载daemon并重启docker


systemctl daemon-reload
systemctl restart docker

17.重启docker

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

(我这里本地在F盘新建了一个叫safe_ca的文件夹)
file
19.至此万事大吉,大吉大利,今晚吃鸡了...下面我们打开IDEA测试一下:
file
没有问题,很爽,成功建立连接,接下来部署项目就可以一键部署了,而且不用担心安全问题,刚刚ca文件夹里的三个秘钥请妥善保管,只有拥有这三个秘钥的人才可以连接到远端的docker,本期教程到此为止,欢迎关注本博,会持续分享一些新知识和一些好用的工具给大家.

3、IDEA 一键部署测试
经过以上步骤之后,我们利用idea 一键部署发布到阿里云上,并且访问下是否成功。
file
file
file
后台查看进程ps -aux|grep java
file
查看日志先获取docker容器id docker ps
file
获取容器id之后,输入日志查询命令docker logs -f -t 99386b4c598a
file

如果有什么问题,可以直接添加我的qq:461332178.群号:173539076

正文到此结束
Loading...