IDEA部署应用到远程Docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,使用Docker可保证每个人的环境保持一致,减少团队开发中因项目环境不一致导致的问题,本文介绍如何使用IDEA直接部署Docker。

配置服务端Docker

首先需要修改 Docker 配置文件让其开放 Docker REST API

vim /etc/docker/daemon.json

{
  "hosts":[
    "unix:///var/run/docker.sock",
    "tcp://0.0.0.0:2375"
  ]
}
# 重新加载配置文件,并重启Docker
systemctl daemon-reload
systemctl restart docker

IDEA连接Docker

Docker配置完成后,我们配置IDEA

20200927194234

配置正确会有Connection successful提示

IDEA 2021.2版本之后支持ssh连接

Dockerfile文件

熟悉Docker的对Dockerfile应该不会陌生,我这里写一个简单的

FROM openjdk:8u102-jdk

ADD target/*.jar app.jar
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

我用的是maven进行打包,打包后的文件放在target目录中,ADD target/*.jar app.jar是将target中的jar文件添加近容器并重命名为app.jar

docker中的时区与我们不同,手动设置东八区。

注意openjdk的版本,我最开始使用的是alpine版本,占用体积较小。但实际运行时,生成验证码接口报错,同样的代码我在CentOS中能运行,Docker中报错。最后换了JDK的版本解决了,猜测是alpine可能精简一部分功能。

IDEA部署Docker

在Run/Debug Configurations中添加Docker配置,支持Docker Image,Docker-compose,Dockerfile,我这里使用Dockerfile进行部署

20200928090658

这是一个Spring Cloud项目,启动容器后发现向调度中心注册的地址不是本机IP,而是Docker中的桥接网卡的地址,运行参数我添加了--network=host,容器直接使用宿主机的网络,不进行桥接。

以上直接配置好后,启动项目

Deploying 'admin-service Dockerfile: Dockerfile'...
Building image...
Preparing build context archive...
[==================================================>]1540/1540 files
Done

Sending build context to Docker daemon...
[==================================================>] 107.5MB
Done

Step 1/4 : FROM openjdk:8u102-jdk
 ---> ca5dd051db43
Step 2/4 : ADD target/*.jar app.jar
 ---> 8d0c14567ec9
Step 3/4 : RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
 ---> Running in a289f48a6aa9
Removing intermediate container a289f48a6aa9
 ---> 12cbefb7337e
Step 4/4 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
 ---> Running in 208933b6329b
Removing intermediate container 208933b6329b
 ---> 7e398428e4c6

Successfully built 7e398428e4c6
Successfully tagged admin-service:latest
Creating container...
Container Id: b45137c747b9fd52713b191b92bf826fba7b0bdefd2996ddcbbfde98dbe872bc
Container name: 'admin-service'
Attaching to container 'admin-service'...
Starting container 'admin-service'
'admin-service Dockerfile: Dockerfile' has been deployed successfully.

注意Preparing build context archive...Sending build context to Docker daemon...,构建时默认是把同级目录下的所有文件发送到docker daemon,我们项目中日志和代码还有很多文件在此处是没有用处的,我们可以建立个.dockerignore将这部分文件忽略,配置方式和git的忽略配置相似,再次构建的时候就会发现速度提升了很多。

好了,部署完成了,可以访问项目试一试了。


IDEA部署应用到远程Docker
https://blog.yjll.blog/post/bee47fed.html
作者
简斋
发布于
2020年9月27日
许可协议