• Idea集成Docker


    1、前言

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

    2、开启docker远程

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

    2.1、配置远程访问模式

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

    添加-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 
    
    • 1
    • 2

    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
    
    • 1

    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
    
    • 1
    1. 接着生成认证证书。
      生成证书脚本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 "生成文件完成"
    ###生成结束###
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54

    直接执行该脚本:

    sh create_cert.sh
    
    • 1

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

    1. 重启docker。
     systemctl daemon-reload
     systemctl restart docker
    
    • 1
    • 2
    1. 将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"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    4.2、配置启动项

    选择Dockerfile的方式。

    • 1:选择我们的Dockerfile文件,
    • 2:填写我们的镜像名称,
    • 3:我们容器的名称,
    • 4:填写我们的端口映射,前面的是暴露宿主机端口,后面的是容器端口。
      在这里插入图片描述
      配置完后,直接运行,观察控制台输出日志信息。
      在这里插入图片描述
      在这里插入图片描述
      同时,控制台的左侧已经有了我们刚构建的镜像和容器:
      在这里插入图片描述
      此时,容器已经启动!

    4.3、访问接口

    由于我们映射出来的端口为8899,所以我们访问http://ip:8899/books/test。
    在这里插入图片描述

  • 相关阅读:
    即拼七人团增加消费者复购欲望,为企业赋能
    LCR 078. 合并 K 个升序链表
    Redis企业级问题及解决方案
    http 请求405 错误
    ffmpeg.dll在哪个文件夹?怎么快速的修复ffmpeg.dll文件的丢失
    postMessage跨域传参
    《动机与人格》笔记(二)——认识和理解的欲望
    重定向和转发
    鸿蒙开发游戏(二)---大鱼吃小鱼(摇杆控制)
    Gradient Domain High Dynamic Range Compression
  • 原文地址:https://blog.csdn.net/qq_41428418/article/details/133813487