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
配置正确会有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
进行部署
这是一个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的忽略配置相似,再次构建的时候就会发现速度提升了很多。
好了,部署完成了,可以访问项目试一试了。