创建一个 SpringBoot 项目,下面是我的一个测试 demo:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/")
public class TestController {
@GetMapping("/hello/{info}")
public String sayHello(@PathVariable("info") String info) {
return "Hello, " + info;
}
}
设置端口为 8080:
server:
port: 8080
servlet:
context-path: /
使用 Maven 将项目 Package 打包得到 jar 包:demo-1.0.0.jar
2、编写 Dockerfile
文件名称就叫 Dockerfile,没有后缀:
# 使用 Java8 为基础镜像 FROM java:8 # 指定临时文件挂载目录 VOLUME /tmp # 将jar包添加到容器中并更名为app.jar ADD demo-1.0.0.jar app.jar # 运行jar包 RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
配置解释:
FROM:指定基础镜像,如果是第一次打包,它会自动下载 java:8 的镜像,以后再制作镜像的时候就不会再下载了;VOLUME:指定了临时文件目录为 /tmp,其效果是在主机 /var/lib/docker 目录下创建了目录 /tmp,并链接到容器的 /tmp。该步骤是可选的,如果涉及到文件系统的应用就很有必要,/tmp 目录用来持久化到 Docker 数据文件夹,因为 SpringBoot 使用的内嵌 Tomcat 容器默认使用 /tmp 作为工作目录;ENTRYPOINT:执行项目 app.jar,为了缩短 Tomcat 启动时间,添加一个系统属性指向 /dev/./urandom 作为 Entropy Source。
3、制作镜像
将 jar 包和 Dockerfile 放在同一个目录下:
[user@localhost home]$ ls ------------------------- demo-1.0.0.jar Dockerfile
然后执行镜像构建命令(别漏了最后面还有一个点 .):
docker build -t demo4docker .
命令解释:
-t:参数指定镜像的 tag 名;.:指定镜像构建过程中的上下文环境的目录(不是指 Dockerfile 的路径);
4、启动容器
docker run -d --name demo -p 8080:8080 demo4docker
-d:表示让容器后台运行;--name:指定容器运行时的名称;-p:进行端口映射,将服务器的 8080 端口映射到容器中的 8080 端口中。
启动之后访问测试接口:
curl http://localhost:8080/hello/wangingyun ------------------------------------------- Hello, wangingyun



