共计 4572 个字符,预计需要花费 12 分钟才能阅读完成。
项目构建于 Maven,需要先在 pom.xml 中增加 docker 的 plugin:
<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> | |
<groupId>com.docker.springboot.www</groupId> | |
<artifactId>com.wang.seckill</artifactId> | |
<version>0.0.1-SNAPSHOT</version> | |
<packaging>jar</packaging> | |
<name>com.wang.seckill</name> | |
<url>http://maven.apache.org</url> | |
<properties> | |
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | |
</properties> | |
<parent> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-parent</artifactId> | |
<version>1.4.0.RELEASE</version> | |
<relativePath></relativePath> | |
</parent> | |
<dependencies> | |
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-web</artifactId> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-test</artifactId> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework.data</groupId> | |
<artifactId>spring-data-commons</artifactId> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-starter-data-mongodb</artifactId> | |
</dependency> | |
</dependencies> | |
<build> | |
<plugins> | |
<plugin> | |
<groupId>org.springframework.boot</groupId> | |
<artifactId>spring-boot-maven-plugin</artifactId> | |
</plugin> | |
<plugin> | |
<groupId>com.spotify</groupId> | |
<artifactId>docker-maven-plugin</artifactId> | |
<version>0.4.3</version> | |
<configuration> | |
<imageName>docker.SprongBoot/${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> | |
<!-- end::plugin[] --> | |
</plugins> | |
</build> | |
</project> |
Spring Boot Maven plugin 提供了很多方便的功能:
- 它收集的类路径上所有 jar 文件,并构建成一个单一的、可运行的“über-jar”,这使得它更方便地执行和传输服务。
- 它搜索的 public static void main() 方法来标记为可运行的类。
- 它提供了一个内置的依赖解析器,用于设置版本号以匹配 Spring Boot 的依赖。您可以覆盖任何你想要的版本,但它会默认选择的 Boot 的版本集。
Spotify 的 docker-maven-plugin 插件是用于构建 Maven 的 Docker Image
- imageName 指定了镜像的名字,本例为 docker.SprongBoot/${project.artifactId}
- dockerDirectory 指定 Dockerfile 的位置
- resources 是指那些需要和 Dockerfile 放在一起,在构建镜像时使用的文件,一般应用 jar 包需要纳入。本例,只需一个 jar 文件。
配置完成后运行 maven 打包命令:
mvn package
此时会在 target 目录下出现 jar 包:
com.wang.seckill-0.0.1-SNAPSHOT.jar (artifactId+version)
将项目容器化
Docker 使用 Dockerfile 文件格式来构建 image,
FROM frolvlad/alpine-Oraclejdk8 | |
VOLUME /tmp | |
ADD docker-spring-boot-1.0.0.jar app.jar | |
ENTRYPOINT ["Java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] |
Dockerfile 文件是手动用来构建 docker image 所使用的:
- FROM(指定基础 image)
VOLUME 指定了临时文件目录为 /tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的 /tmp(指定挂载点)。/tmp 目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用 /tmp 作为工作目录
ADD(从 src 复制文件到 container 的 dest 路径)项目的 jar 文件作为“app.jar”添加到容器的
- ENTRYPOINT(设置 container 启动时执行的操作本例为执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向“/dev/urandom”作为 Entropy Source
构建 Docker Image
执行构建成为 docker image:
mvn package docker:build
运行
运行 Docker Image:
docker run -p 8080:8080 -t xxx
此时你访问 localhost:8080 即访问 Spring Boot 应用。
配置 Nging 反向代理:
先下载 nginx 镜像
docker pull nginx
启动 nginx, 并配置与我们启动的 springboot 容器互连
docker run -p 9090:80 -ti --link=xxx:background nginx
这里的 xxx 是启动 springboot 的容器的名称如果没有提供–name 参数制定则通过 docker ps 来查看 docker 自动分配的 name 值。(–link 必须指定)
修改 /etc/nging/nginx.conf 并启动 nginx
server{listen 80; | |
location /{# 反向代理, 链接到 springboot 容器 | |
proxy_pass http://background:8080; | |
} | |
} | |
//--link 参数必须指定,虽然即使不指定,默认两个容器也是互连的,但这里写 springboot 容器的 ip 地址根本无法链接过去。 |
退出容器
ctrl+P ctrl+Q
此时提供宿主机的浏览器来访问 localhost:9090 则访问到 springboot 应用。
配置 mongoDB
下载 mongDB 容器并启动指定 name 为 mongoDB
docker run -ti --name mongoDB tutum/mongodb
重新启动 springboot 容器, 先停止之前的:
docker run -ti --name springboot --link=mongoDB:mongoDB xxxx
springboot 应用中 resouces 的配置为:
spring.data.mongodb.host=mongoDB | |
spring.data.mongodb.port=27017 | |
spring.data.mongodb.database=baseStationInfo |
此时在 springboot 应用中访问 mongoDB 数据库则会访问这个 mongoDB 的这个容器,而访问是由 nginx 反向代理过去的。
提供三个容器来部署一个项目。
最后总结一下启动顺序:
- 启动 mongoDB 容器制定 name
- 启动 springboot 并 link 到 mongoDB 容器,代码中链接 mongoDB 的 URL 即为 mongoDB 容器的 name
- 启动 Nginx 镜像并 link 到 springboot 容器并配置反向代理。
更多 Docker 相关教程见以下内容:
Docker 安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm
Ubuntu 14.04 安装 Docker http://www.linuxidc.com/linux/2014-08/105656.htm
Ubuntu 使用 VNC 运行基于 Docker 的桌面系统 http://www.linuxidc.com/Linux/2015-08/121170.htm
阿里云 CentOS 6.5 模板上安装 Docker http://www.linuxidc.com/Linux/2014-11/109107.htm
Ubuntu 15.04 下安装 Docker http://www.linuxidc.com/Linux/2015-07/120444.htm
在 Ubuntu Trusty 14.04 (LTS) (64-bit)安装 Docker http://www.linuxidc.com/Linux/2014-10/108184.htm
在 Ubuntu 15.04 上如何安装 Docker 及基本用法 http://www.linuxidc.com/Linux/2015-09/122885.htm
Docker 的详细介绍:请点这里
Docker 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-10/136353.htm
