EP8 在Idea中使用Docker
编写一个简单的SpringBootWeb程序
创建一个最简单的SpringBootWeb程序
-
目录
-
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.cy4ever</groupId>
<artifactId>SpringBootDemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>SpringBootDemo</name>
<description>SpringBootDemo</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>SpringBootDemo</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
- 添加一个启动程序
package com.cy4ever.springbootdemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringBootDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDemoApplication.class, args);
}
}
- 一个
controller
package com.cy4ever.springbootdemo;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
/**
* @author chenrui
* @date 2022/10/31 17:01
*/
@RestController
@RequestMapping("/")
public class HelloWorldController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String helloWorld() {
return "helloWorld";
}
}
-
启动项目
-
通过浏览器访问8080端口
编写Dockerfile
在项目根目录新建文件Dockerfile
### 基础镜像
FROM openjdk:8-jdk-alpine
#作者
MAINTAINER Chenrui
#系统编码
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
#声明一个挂载点,容器内此路径会对应宿主机的某个文件夹
VOLUME /tmp
#应用构建成功后的jar文件被复制到镜像内,名字也改成了app.jar
ADD target/SpringBootDemo.jar /SpringBootDemo.jar
#启动容器时的进程
ENTRYPOINT ["java","-jar","/SpringBootDemo.jar"]
#暴露端口,这个端口对应的是服务本身的端口
EXPOSE 8080
注意「ADD target/SpringBootDemo.jar /SpringBootDemo.jar」这里jar的名称要与pom.xml中的finalName对应.
Idea中安装Docker插件
在Idea设置->Plugins->Marketplace中搜索Docker,点击install安装(图中已经安过了)
安装好以后重启Idea,就可以在设置->
build中看到Docker设置了
如果要连接本地Docker通过新建按钮添加一个Docker Daemon,连接方式选择Docker for Mac(Windows)
如果要连接远程的
Docker Daemon,首先需要开启Docker Daemon的远程连接端口:
- ssh连接Docker所在的服务器(此处Centos7.x)
- 编辑
docker.service文件
vim /usr/lib/systemd/system/docker.service
3. 找到ExecStart,在最后面添加 -H tcp://0.0.0.0:2375,这里2375端口可以自定义
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
4. 重启docker
systemctl daemon-reload
systemctl restart docker
开启远程连接端口后,在Idea中新建Docker Daemon连接方式选择TCP scoket,Engine API URL填写:tcp:ip:2375(端口与上文设置的需要一致)
远程连接Docker Server并打包部署服务
此时我们web项目、Dockerfile、Docker插件都已经准备好了;下面就需要将项目打包部署到docker里面运行了。
-
打开
Run/Debug配置,新增配置,选择Dockerfile设置好以后运行:
会先通过maven打包项目
然后构建镜像并且在远程的docker上部署