Docker开启远程访问+idea配置docker+dockerfile发布java项目

一、docker开启远程访问

1.编辑docker服务文件
java 复制代码
vim /usr/lib/systemd/system/docker.service

docker.service原文件如下:

java 复制代码
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target docker.socket firewalld.service containerd.service time-set.target
Wants=network-online.target containerd.service
Requires=docker.socket

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutStartSec=0
RestartSec=2
Restart=always

# Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229.
# Both the old, and new location are accepted by systemd 229 and up, so using the old location
# to make them work for either version of systemd.
StartLimitBurst=3

# Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230.
# Both the old, and new name are accepted by systemd 230 and up, so using the old name to make
# this option work for either version of systemd.
StartLimitInterval=60s

# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity

# Comment TasksMax if your systemd version does not support it.
# Only systemd 226 and above support this option.
TasksMax=infinity

# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes

# kill only the docker process, not all processes in the cgroup
KillMode=process
OOMScoreAdjust=-500


[Install]
WantedBy=multi-user.target

找到ExecStart头添加代码如图所示:

java 复制代码
-H tcp://0.0.0.0

添加完成,如下图标记

2.重启docker的daemon服务
java 复制代码
systemctl daemon-reload
3.重启docker服务
java 复制代码
systemctl restart docker
4.开启防火墙指定端口:2375
java 复制代码
firewall-cmd --zone=public --add-port=2375/tcp --permanent
5.重启防火墙
java 复制代码
firewall-cmd --reload
6.进入浏览器中访问:http://ip:2375/version

如图所示

能够访问到该页面说明已经开启了远程访问。

二、idea配置docker

1.进入idea,进入目录:File-Settings-Plugins搜索:docker,并安装:如图:

2.配置docker,进入目录:File-Settings-Build,Execution,Deployment

如图:

Engine API URL:

java 复制代码
tcp://ip:2375

最后点击Apply,再点击ok

3.在配置docker部署时就可以选择以上添加的docker了

如图:

三、编写一个java Demo,使用dockerfile部署

项目工程如下:

代码展示:HelloWorldController.java

java 复制代码
package com.hcl.helloworld.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("hello")
public class HelloWorldController {

    @GetMapping("world")
    public String hello(){
        return "蜉蝣之羽,衣裳楚楚。<br/>"+
                "心之忧矣,於我归处?<br/>" +
                "蜉蝣之翼,采采衣服。<br/>" +
                "心之忧矣,於我归息?<br/>" +
                "蜉蝣掘阅,麻衣如雪。<br/>" +
                "心之忧矣,於我归说?";
    }
}

代码展示:HelloWorldApplication.java

java 复制代码
package com.hcl.helloworld;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloWorldApplication {

    public static void main(String[] args) {
        SpringApplication.run(HelloWorldApplication.class, args);
    }

}

代码展示:application.yaml

java 复制代码
server:
  port: 8081

代码展示:Dockerfile

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

# 执行维护者信息
MAINTAINER abliner

# 创建一个存放工程的目录
RUN mkdir -p /data/project-bak

ADD target/hello-world-0.0.1-SNAPSHOT.jar /data/project-bak/hello-world-0.0.1-SNAPSHOT.jar

# 对外暴露的端口
EXPOSE 8084

# 执行启动
ENTRYPOINT ["/bin/sh","-c","java -jar /data/project-bak/hello-world-0.0.1-SNAPSHOT.jar"]

四、开始配置

1.进入配置,如图:
2.添加docker,选择Dockerfile如图:
3.如图

最后点击Apply再点击ok
注意:dockerfile中对外暴露的端口也就是上面配置的端口"8084"开启防火墙的一定要去开放端口,否则无法访问。如果是阿里云上面则也要配置打开该端口。

4.idea打包项目,先clear再package,保证是最新的包

如图:

5.启动

如图:

6.访问
相关推荐
骄马之死1 小时前
SpringMVC + SpringBoot 核心知识点总结
java·spring boot·后端
暮云星影2 小时前
个人总结 搭建Docker监控
docker·容器·grafana·prometheus
郑洁文3 小时前
基于Spring Boot的流浪动物救助网站
java·spring boot·后端·毕设·流浪动物救助
螺丝钉code3 小时前
JAVA项目 Claude code CLAUDE.md 到底应该怎么写
java·人工智能·claude code
维度攻城狮5 小时前
在Vscode连接的Docker容器中使用codex,并配置DeepSeek模型
vscode·docker·codex
摇滚侠5 小时前
Maven 入门+高深 单一架构案例 54-59
java·架构·maven·intellij-idea
VidDown5 小时前
Webhook 调试器:让第三方回调“原形毕露”
java·开发语言·javascript·编辑器·postman
折哥的程序人生 · 物流技术专研5 小时前
Java 23 种设计模式:从踩坑到精通 | 原型模式 —— 克隆对象,深拷贝与浅拷贝的坑你踩过吗?
java·设计模式·架构·原型模式·单一职责原则
装不满的克莱因瓶5 小时前
基于 OpenResty 扩展开发实现动态服务注册与发现能力
java·开发语言·架构·openresty
程序员小羊!5 小时前
06Java 异常机制与常用类
java