docker安装
首先下载docker , Mac版本:
直接双击下载的docker包,安装完成后打开terminal,输入:
docker --version
如果出现:
证明docker安装成功!
新建springboot项目
新建springboot的方式有三种,可以参考使用eclipse构建springboot项目,列出项目主要代码:
package com.ibm;
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);
}
}
package com.ibm.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloDockerController {
@RequestMapping(value="")
public String helloDocker() {
return "hello, Docker!";
}
}
修改application.properties文件,修改tomcat默认端口为8081,
启动springboot项目,在浏览器输入:localhost:8081 ,如果能出现:
证明项目构建没有问题!
pom.xml配置maven和docker相关依赖
<?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 http://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.1.6.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>com.cczhao</groupId>
<artifactId>springbootdemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springbootdemo</name>
<description>Demo project for Spring Boot</description>
<!-- properties中添加docker镜像支持-->
<properties>
<java.version>1.8</java.version>
<docker.image.prefix>springboot</docker.image.prefix>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- Docker maven plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
</project>
springboot项目写Dockerfile
新建src/main/docker文件夹,
并在文件夹内创建Dockerfile文件,文件内容如下:
FROM java:8
EXPOSE 8081
VOLUME /tmp
ADD springbootdemo-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
- FROM 表示要构建的镜像基于哪个镜像,java:8表示使用jdk8环境为基础镜像
- EXPOSE 告诉Docker这个容器在运行时会监听哪些端口。
- VOLUME 指向了一个/tmp的目录,由于 Spring Boot 使用内置的Tomcat容器,Tomcat 默认使用/tmp作为工作目录。这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
- ADD 表示把文件拷入docker ,并改名成 app.jar
- ENTRYPOINT 表示使用指定命令在镜像运行时执行,启动jar。
注:这里让docker监听8081端口,没有按照Tomcat默认的8080端口来启动,所以在springboot项目中需要修改tomcat端口为8081.
maven打包项目,并测试打包结果
-
打开terminal,并进入项目目录,
- 打包
mvn package
成功后,如下图:
- 启动项目
java -jar target/springbootdemo-0.0.1-SNAPSHOT.jar
项目启动成功后,如下图:
-
我们可以在浏览器中查看:localhost:8080 ,可以看到:
到此为止,表明我们的jar包打的没有问题!
构建docker镜像并启动
- 构建docker镜像,
mvn package docker:build
如果出现下图所示内容,证明镜像构建成功,
- 启动镜像
查看构建的镜像内容,
docker images
最后启动镜像,外部通过访问8080端口来访问,
docker run -p 8888:8080 -t springboot/springbootdemo
可查看当前所有启动的container信息:
docker container ls -a
证明container已经启动成功!可从localhost:8888端口去访问!