一、创建springboot项目
创建一个 springboot 工程 spring-boot-docker
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
HelloController.java
@RestController
public class HelloController {
@GetMapping("/docker")
public String hello() {
return "Hello Docker!!";
}
}
编写 Dockerfile ,放置到 src/docker 目录下
FROM java:8
VOLUME /tmp
ADD spring-boot-docker-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
二、部署项目到 Docker
1. 准备文件
执行 mvn 命令打包 springboot 工程
mvn install
把 jar 包和 Dockerfile 复制到某一个文件夹中
2. 构建镜像文件
cd
到存放 jar 包和 Dockerfile 的目录下
执行镜像构建命令
docker build -t spring-boot-docker .
-t
代表要构建的镜像的名字和标签,通常为 name:tag 或者 name 格式,若不声明 tag 则默认是 latest
.
代表当前目录,也就是Dockerfile所在的目录
运行完成之后查看 images ,可以看到镜像已经构建成功
docker images
3. 运行项目
运行镜像
docker run -p 8080:8080 -d spring-boot-docker
-p
表示端口映射,冒号左边为 Docker 容器外的端口号,右边为容器内的端口号
-d
表示后台运行
查看 springboot 的启动日志
# 查看容器
docker container ls
# 查看运行日志
docker logs -f -t --tail 行数 容器名
查看运行的镜像
docker ps
浏览器访问 http://localhost:8080/docker ,查看接口返回结果
三、问题处理
Windows 访问浏览器显示连接不可用。
Docker 是运行在 Linux 上的,我们在 Windows 系统中运行 Docker ,实际上是先在 Windows 下先安装了一个 Linux 环境,然后在这个环境中运行的 Docker 。所以,访问服务中使用的 localhost 指的是这个 Linux 环境的地址,而不是 Windows 。
在 QuickStart 终端执行 docker-machine ip default
,找到 Window 系统下的 Linux 环境的地址为 192.168.99.100 。
访问 http://192.168.99.100:8080/docker ,依旧返回连接不可用。
其实原因出在 Docker Toolbox 无法被外网访问。
打开 Oracle VM VirtualBox ,在 设置 > 网络 > 网卡1 > 高级 中配置“端口转发”,新增转发规则,将主机( 127.0.0.1 )的 8080 端口指向子系统的 8080 端口,配置生效后再次访问 http://localhost:8080/docker 即可。