Idea和Docker如何集成

 更新时间:2023年10月16日 11:59:38   作者:Major_xx  
今天就介绍下idea和Docker如何集成,要集成之前,需要我们本机能够访问docker服务,也就是我们的docker服务需要开启远程模式,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

1、前言

上一节中,我们介绍了Dockerfile的方式构建自己的镜像。但是在实际开发过程中,一般都会和开发工具直接集成,如Idea。今天就介绍下idea和Docker如何集成。

2、开启docker远程

要集成之前,需要我们本机能够访问docker服务,也就是我们的docker服务需要开启远程模式。

2.1、配置远程访问模式

vi /usr/lib/systemd/system/docker.service

添加-H tcp://0.0.0.0:2375即可。

  • -H:即添加host。
  • tcp:表示tcp协议连接。
  • 0.0.0.0: 表示不限制远程访问ip。
  • 2375:表示远程访问端口。

添加后如下图所示:

2.2、重启docker服务

注意,如果防火墙有设置端口,这里需要开放2375端口。

systemctl daemon-reload 
systemctl restart docker 

2.3、验证

重启服务后,可以直接浏览器访问http://ip:2375/version。如果能够成功访问到信息,则说明远程配置成功。

3、Idea配置Docker

打开idea的设置,File -> Settings -> Build, Execution, Deployment -> Docker
在Connect to Docker daemon with:选择TCP socket。并在Engine API URL输入tcp://ip:2375,ip即我们虚拟机中ip。
输入后,下方显示Connection successful,即说明连接成功。

3.1、配置证书登录

上面介绍的方式是直接开放tcp端口登录,但是这样回存在安全问题。实际项目中,我们一般还要加上证书的认证。

1.先配置docker.service

vi /usr/lib/systemd/system/docker.service

ExecStart后面追加配置,/etc/docker/certs为生成证书的路径,2375为docker开启的远程端口:

--tlsverify --tlscacert=/etc/docker/certs/ca.pem --tlscert=/etc/docker/certs/server-cert.pem --tlskey=/etc/docker/certs/server-key.pem -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

2.接着生成认证证书。
生成证书脚本create_cert.sh,全局替换下公网IP,证书密码:

cker TLS 证书
#!/bin/bash
 
#相关配置信息
SERVER="${公网IP}"
PASSWORD="${证书密码}"
COUNTRY="CN"
STATE="qqq"
CITY="xxx"
ORGANIZATION="sssss"
ORGANIZATIONAL_UNIT="product"
EMAIL="sasdasd"
 
###开始生成文件###
echo "开始生成文件"
 
mkdir -pv /etc/docker/certs
 
#切换到生产密钥的目录
cd /etc/docker/certs 
#生成ca私钥(使用aes256加密)
openssl genrsa -aes256 -passout pass:$PASSWORD  -out ca-key.pem 4096
#生成ca证书,填写配置信息
openssl req -new -x509 -passin "pass:$PASSWORD" -days 3650 -key ca-key.pem -sha256 -out ca.pem -subj "/C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$SERVER/emailAddress=$EMAIL"
 
#生成server证书私钥文件
openssl genrsa -out server-key.pem 4096
#生成server证书请求文件
openssl req -subj "/CN=$SERVER" -new -key server-key.pem -out server.csr
 
sh -c 'echo subjectAltName = IP:0.0.0.0,IP:${公网IP},IP:127.0.0.1 >> extfile.cnf'
sh -c 'echo extendedKeyUsage = serverAuth >> extfile.cnf'
 
#使用CA证书及CA密钥以及上面的server证书请求文件进行签发,生成server自签证书
openssl x509 -req -days 3650 -in server.csr -CA ca.pem -CAkey ca-key.pem -passin "pass:$PASSWORD" -CAcreateserial  -out server-cert.pem -extfile extfile.cnf
 
#生成client证书RSA私钥文件
openssl genrsa -out key.pem 4096
#生成client证书请求文件
openssl req -subj '/CN=${公网IP}' -new -key key.pem -out client.csr
 
sh -c 'echo "extendedKeyUsage=clientAuth" > extfile-client.cnf'
#生成client自签证书(根据上面的client私钥文件、client证书请求文件生成)
openssl x509 -req -days 3650 -in client.csr -CA ca.pem -CAkey ca-key.pem  -passin "pass:$PASSWORD" -CAcreateserial -out cert.pem  -extfile extfile-client.cnf
 
#更改密钥权限
chmod 0400 ca-key.pem key.pem server-key.pem
#更改密钥权限
chmod 0444 ca.pem server-cert.pem cert.pem
#删除无用文件
rm client.csr server.csr
 
echo "生成文件完成"
###生成结束###

直接执行该脚本:

sh create_cert.sh

执行成功后,在/etc/docker/certs可以看到我们生成的证书。

3.重启docker。

 systemctl daemon-reload
 systemctl restart docker

4.将certs整个复制到本地。打开Idea的Docker设置,Certificates folder选择我们存放的cert目录即可。

可以看到显示Cnnection successful,表示连接成功。

4、创建Dockerfile

我们继续使用上一篇的dockerfile-springboot工程,在该工程下添加Dockerfile文件。

我们需要使用Dockerfile构建我们的镜像到我们的Docker服务上,并运行该程序,最终访问接口打印“success!”。

4.1、编写Dockerfile

# 指定基础镜像作为该容器的基础环境,如springboot应用最起码得有jdk环境
FROM openjdk:17

# 执行维护者的信息
MAINTAINER xx

# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 创建一个存放该工程的目录,将项目target目录下的jar文件复制到容器中的目录下
RUN mkdir -p /mydata/project
COPY target/springboot_08_ssmp-0.0.1-SNAPSHOT.jar /mydata/project/springboot_08_ssmp.jar

# 执行启动
ENTRYPOINT ["java", "-jar", "/mydata/project/springboot_08_ssmp.jar"]

4.2、配置启动项

选择Dockerfile的方式。

  • 1:选择我们的Dockerfile文件,
  • 2:填写我们的镜像名称,
  • 3:我们容器的名称,
  • 4:填写我们的端口映射,前面的是暴露宿主机端口,后面的是容器端口。

配置完后,直接运行,观察控制台输出日志信息。

同时,控制台的左侧已经有了我们刚构建的镜像和容器:

此时,容器已经启动!

4.3、访问接口

由于我们映射出来的端口为8899,所以我们访问http://ip:8899/books/test。

到此这篇关于Idea集成Docker的文章就介绍到这了,更多相关Idea集成Docker内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决spring结合mybatis时一级缓存失效的问题

    解决spring结合mybatis时一级缓存失效的问题

    这篇文章主要介绍了解决spring结合mybatis时一级缓存失效的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • springboot @validated List校验失效问题

    springboot @validated List校验失效问题

    这篇文章主要介绍了springboot @validated List校验失效问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Java动态修改配置即时生效的方式WatchService

    Java动态修改配置即时生效的方式WatchService

    这篇文章给大家分享了Java动态修改配置即时生效的方式WatchService的相关知识点内容,有兴趣的朋友可以参考学习下。
    2018-06-06
  • 浅析Spring工厂的反射和配置文件

    浅析Spring工厂的反射和配置文件

    这篇文章主要介绍了浅析Spring工厂的反射和配置文件,spring是通过反射和配置文件的方式来获取 JavaBean 对象,需要的朋友可以参考下
    2023-04-04
  • java获取服务器基本信息的方法

    java获取服务器基本信息的方法

    这篇文章主要介绍了java获取服务器基本信息的方法,涉及java获取系统CPU、内存及操作系统等相关信息的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • 一文详解如何配置MyBatis实现打印可执行的SQL语句

    一文详解如何配置MyBatis实现打印可执行的SQL语句

    在MyBatis中,动态SQL是一个强大的特性,允许我们在XML映射文件或注解中编写条件语句,根据运行时的参数来决定SQL的具体执行内容,这篇文章主要给大家介绍了关于如何配置MyBatis实现打印可执行的SQL语句的相关资料,需要的朋友可以参考下
    2024-08-08
  • Java多线程wait()和notify()方法详细图解

    Java多线程wait()和notify()方法详细图解

    wait()和notify()是直接隶属于Object类,也就是说所有对象都拥有这一对方法,下面这篇文章主要给大家介绍了关于Java多线程wait()和notify()方法详细图解的相关资料,需要的朋友可以参考下
    2022-10-10
  • 获取JsonObject某一未知key的值操作

    获取JsonObject某一未知key的值操作

    这篇文章主要介绍了获取JsonObject某一未知key的值操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • MybatisPlus为何可以不用@MapperScan详解

    MybatisPlus为何可以不用@MapperScan详解

    这篇文章主要给大家介绍了关于MybatisPlus为何可以不用@MapperScan的相关资料,文中通过图文介绍的非常详细,对大家学习或者使用MybatisPlus具有一定的参考学习价值,需要的朋友可以参考下
    2023-04-04
  • Idea springboot如何实现批量启动微服务

    Idea springboot如何实现批量启动微服务

    这篇文章主要介绍了Idea springboot如何实现批量启动微服务,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05

最新评论