你自山河林间来
惊鸿一瞥百花开
从此我便无别意
千头万绪皆为爱


docker远程访问

之前刚学的时候,看见网上很多关于开启远程访问的教程,都是修改docker.service文件,然后开启2375端口,这种方式只适合在本地测试,后面我在线上部署了一个,第二天发现服务器被拉去挖矿了,我丢。
但是我又想在线上服务器docker部署服务,所以我们需要对服务器进行加密,你也可以使用jenkins,当然这也就不需要开启docker远程端口了。

生成证书

我们需要生成ca证书,然后引用证书
证书生成参考自:https://blog.csdn.net/qq_15071263/article/details/94997887

  • 在服务器上创建一个文件夹,用于存放证书
mkdir /usr/tls
cd /usr/tls
  • 创建key,输入密码,确认密码,后面需要使用这个密码
openssl genrsa -aes256 -out ca-key.pem 4096
  • 填写一些信息,用于生成加密的字符串,随便填就可以了,主要是为了生成加密字符串
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
Country Name (2 letter code) [XX]:china
State or Province Name (full name) []:Guizhou
Locality Name (eg, city) [Default City]:Guiyang
Organization Name (eg, company) [Default Company Ltd]:gmsj
Organizational Unit Name (eg, section) []:java
Common Name (eg, your name or your server's hostname) []:zlh
  • 生成server-key.pem
openssl genrsa -out server-key.pem 4096
  • 绑定IP或者域名,$HOST填写你的服务器外网IP 或者服务器外网域名
openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
  • 配置白名单,如果上面使用的是ip,需要将DNS改成ip,$HOST改为刚刚配置的
echo subjectAltName = DNS:$HOST,IP:0.0.0.0 >> extfile.cnf

例如:

echo subjectAltName = IP:123.23.33.3,IP:0.0.0.0 >> extfile.cnf

0.0.0.0就是0段ip表示任何人都可以访问,一般就配置0.0.0.0就ok,然后配置证书就可以访问,不然即使有证书也访问不了

  • 生成ca-key,需要输入之前的密码
echo extendedKeyUsage = serverAuth >> extfile.cnf
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \-CAcreateserial -out server-cert.pem -extfile extfile.cnf
openssl genrsa -out key.pem 4096
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
echo extendedKeyUsage = clientAuth >> extfile.cnf
  • 生成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
  • 修改权限
chmod -v 0400 ca-key.pem key.pem server-key.pem
chmod -v 0444 ca.pem server-cert.pem cert.pem

然后修改docker.service

vim /lib/systemd/system/docker.service

在Execstart中加入我们刚刚生成的证书

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375 --tlsverify --tlscacert=/usr/tls/ca.pem --tlscert=/usr/tls/server-cert.pem --tlskey=/usr/tls/server-key.pem
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
  • 重启docker
systemctl daemon-reload
systemctl restart docker

如果报错大概率是因为刚刚修改的配置文件有问题

idea连接docker

将刚刚生成的证书中的ca.pem, cert.pem, key.pem通过xftp或者其他的工具拷贝到本地的目录下
然后idea已经安装了docker插件
在这里插入图片描述

可以看见连接成功了,没有证书是连接不了的,所以加密访问就实现了
我们还可以将镜像推送到镜像仓库
在这里插入图片描述

我这里使用的是阿里云的镜像仓库

共享配置

docker加密访问已经完成,接下来就是部署服务到docker
首先我们需要将Dockerfile放到目录中
在这里插入图片描述

然后添加配置
在这里插入图片描述
点击添加选择docker,选择dockerfile方式
在这里插入图片描述
如果不需要配置共享点击运行就可以将我们的服务部署到docker,在service控制台即可看见我们的docker服务器
在这里插入图片描述
注意一点:当我们修改了代码需要再次部署的时候,idea会自动重新构建一个新的,不需要我们手动去删除原来的镜像,原来的镜像会被抛弃,在docker镜像中以sha开头,我们需要对不要的镜像定期进去清理,你可以直接在idea控制台选中多个直接清理,也可以写个脚本,it`s up to you

但这样会有一个问题就是我的idea配置好了,如果团队其他的小伙伴要使用还需要配置,这样就很麻烦,
idea提供了共享配置的功能,我们只需要在添加配置时勾选share through VCS(上图中可以看见),
勾选后在项目的.idea目录的runConfigurations就可以看见刚刚创建的配置
在这里插入图片描述
然后分享到git,当小伙伴拉下来他的配置中就有刚刚添加的这个配置了
一般git我们会将.idea目录忽略,所以上传的时候不要把.idea的其他目录上传。
然后就介绍完了。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐