侧边栏壁纸
博主头像
seeyou博主等级

Programming makes me happy,Programming every day, happy every day.

  • 累计撰写 27 篇文章
  • 累计创建 2 个标签
  • 累计收到 11 条评论

目 录CONTENT

文章目录

docker+idea+证书连接

seeyou
2022-04-14 / 0 评论 / 1 点赞 / 135 阅读 / 4,666 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-05-06,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Intellij IDEA 集成 Docker 发布

不使用证书安全验证

1、Docker开启远程访问,注意端口不要用默认的,防止被攻击

[root@localhost ~]# vi /usr/lib/systemd/system/docker.service 

2、开启远程访问

# 修改该行-注意端口不要用默认的 2375,这里用的是12375
# ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:12375

image-1649931001596
开放端口

#防火墙开放端口
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-port=12375/tcp
[root@localhost ~]# firewall-cmd --reload
#重新加载配置文件
[root@localhost ~]# systemctl daemon-reload    
#重启服务
[root@localhost ~]# systemctl restart docker.service 
#查看端口是否开启
[root@localhost ~]# netstat -nlpt
#直接curl看是否生效
[root@localhost ~]# curl http://127.0.0.1:12375/info

开放安全组
image-1649931231043

idea连接docker

image-1649931245783
image-1649931253574

通过数字签名证书连接

1、创建证书

创建目录存放证书文件

mkdir -pv /home/docker-cert
cd /home/docker-cert

2、创建ca-key.pem文件,输入密码

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

3、创建ca.pem,依次输入密码、国家、省、市、组织名称等(除了密码外其他的可以直接回车跳过)

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、生成server.csr,(把下面的IP换成你自己服务器外网的IP或者域名)

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

或者域名

openssl req -subj "/CN=www.example.com" -sha256 -new -key server-key.pem -out server.csr

这个后面看你是用ip还是域名连接docker服务

6、配置白名单

0.0.0.0表示所有ip都可以连接。(这里需要注意,虽然0.0.0.0可以匹配任意,但是仍需要配置你的外网ip和127.0.0.1,否则客户端会连接不上)

echo subjectAltName = IP:0.0.0.0,IP:123.123.123.123,IP:127.0.0.1 >> extfile.cnf

或者域名

echo subjectAltName = DNS:www.example.com,IP:123.123.123.123,IP:127.0.0.1 >> extfile.cnf

7、将Docker守护程序密钥的扩展使用属性设置为仅用于服务器身份验证

echo extendedKeyUsage = serverAuth >> extfile.cnf

8、输入之前设置的密码,生成签名证书

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

10、生成client.csr(把下面的IP换成你自己服务器外网的IP或者域名)

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

11、创建扩展配置文件,把密钥设置为客户端身份验证用

echo extendedKeyUsage = clientAuth > extfile-client.cnf

12、生成cert.pem,输入前面设置的密码,生成签名证书

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

13、删除不需要的配置文件和两个证书的签名请求

rm -v client.csr server.csr extfile.cnf extfile-client.cnf

一律输入y,按回车就好了

14、为了防止公、私钥文件被更改以及被其他用户查看,修改其权限为所有者只读

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

15、将证书放在主机目录的指定位置,方便之后修改Docker的配置文件

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

16、修改Docker配置

vim /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:12375 -H unix:///var/run/docker.sock

image-1649932006019

17、重新加载daemon并重启docker

systemctl daemon-reload
systemctl restart docker

如果这里重新启动失败,检查下你的docker配置文件是否正确配置
放开12375端口

18、idea连接

下载证书到本地目录

ca.pem
ca-key.pem
cert.pem
key.pem

image-1649932024964

image-1649932048868

image-1649932643888

注意这个地方由原来的tcp://变成了https:// 记得替换,否则会报错

Spring Boot服务docker部署

pom.xml添加

<properties>
    <docker.image.prefix>seeyou</docker.image.prefix>
</properties>

<build>
      <plugins>
          <plugin>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-maven-plugin</artifactId>
          </plugin>
          <!-- Docker maven plugin -->
          <plugin>
              <groupId>com.spotify</groupId>
              <artifactId>docker-maven-plugin</artifactId>
              <version>1.2.0</version>
              <configuration>
                  <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                  <dockerDirectory></dockerDirectory>
                  <resources>
                      <resource>
                          <targetPath>/</targetPath>
                          <directory>${project.build.directory}</directory>
                          <include>${project.build.finalName}.jar</include>
                      </resource>
                  </resources>
              </configuration>
          </plugin>
          <!-- Docker maven plugin -->
      </plugins>
  </build>

编写dockerfile

image-1649932073571

# 基础镜像
FROM java:8
#作者信息
MAINTAINER seeyou 705221483@qq.com
#申明一个环境变量
ENV HOME_PATH /root/zongheng/server
#指定容器启动时,执行命令会在该目录下执行
WORKDIR $HOME_PATH
VOLUME /tmp
#应用构建成功后的jar复制到容器指定目录下
ADD target/ticket-message-1.0-SNAPSHOT.jar $HOME_PATH/app.jar
RUN bash -c 'touch /ticket-message-1.0-SNAPSHOT.jar'
#修改Docker时区-否则里面的时间会慢8小时
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
#指定容器内部端口
EXPOSE 8024
#容器启动时执行的命令
ENTRYPOINT ["java","-jar","app.jar"]

image-1649932089308

image-1649932099192

image-1649932107003

Environment variables 参数的值不能带“”双引号
命令解释:
Image tag:指定镜像名称和tag,镜像名称为docker-demo,tag为1.1
Bind ports:绑定宿主机端口到容器内部端口。格式为[宿主机端口]:[容器内部端口]
Bind mounts:将宿主机目录挂到到容器内部目录中。格式为[宿主机目录]:[容器内部目录]。这个Spring Boot项目会将日志打印在容器/home/developer/app/logs/目录下,将宿主机目录挂载到容器内部目录后,那么日志就会持久化容器外部的宿主机目录中。

选到这个docker运行即可,当然在运行前 需要正常的mvn clean package,或者也可在上面的配置界面的before launch
image-1649932121650

可以看到已经部署成功了
image-1649932131088
服务器里镜像也创建了
image-1649932139747

1

评论区