用 Docker 发布来一个 Nginx+Spring Boot+MongoDB应用
来源:互联网 发布:致远oaa6数据库字典 编辑:程序博客网 时间:2024/06/05 08:38
项目构建于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,该文件位于src/main/docker
FROM frolvlad/alpine-oraclejdk8VOLUME /tmpADD docker-spring-boot-1.0.0.jar app.jarENTRYPOINT ["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=mongoDBspring.data.mongodb.port=27017spring.data.mongodb.database=baseStationInfo
此时在springboot应用中访问mongoDB数据库则会访问这个mongoDB的这个容器,而访问是由nginx反向代理过去的。
提供三个容器来部署一个项目。
最后总结一下启动顺序:
- 启动mongoDB容器制定name
- 启动springboot并link到mongoDB容器,代码中链接mongoDB的URL即为mongoDB容器的name
- 启动Nginx镜像并link到springboot容器并配置反向代理。
- 用 Docker 发布来一个 Nginx+Spring Boot+MongoDB应用
- 用 Docker 构建、运行、发布来一个 Spring Boot 应用
- 用 Docker 构建、运行、发布来一个 Spring Boot 应用
- 用 Docker 构建、运行、发布一个 Spring Boot 应用
- 用 Docker 构建、运行、发布一个 Spring Boot 应用
- [Docker]构建、运行、发布一个 Spring Boot 应用
- spring boot 应用发布到 docker (完整版)
- 第一个 spring Boot 应用通过Docker 来实现构建、运行、发布
- 第一个 spring Boot 应用通过Docker 来实现构建、运行、发布
- Docker安装 , Docker介绍Spring Boot工程发布到Docker
- 分布式Session研究(一):Docker + spring boot +Nginx构建分布式应用
- 使用Docker打包Java/Spring Boot应用
- 使用Docker部署 spring-boot maven应用
- Docker容器化spring boot应用
- Spring Boot应用Docker打包成镜像
- Docker 容器整合 Spring Boot 应用
- 使用Docker部署 spring-boot maven应用
- 使用docker发布spring cloud应用
- Android studio在使用过程中常见的问题及解决方法(不定期更新),androidstudi
- Android版本:如何更改复选框的大小?
- 源码-Oracle数据库管理-第十一章-Oracle内置函数-Part 1(字符型函数)
- 32位 Matlab2013b +Visual Studio 2010联合编程配置
- 1005. 继续(3n+1)猜想 (25)——sort(a,b,cmp)
- 用 Docker 发布来一个 Nginx+Spring Boot+MongoDB应用
- 多点触摸时ACTION_POINTER_UP和ACTION_UP冲突问题
- Sublime Text 3 快捷键总结(拿走)
- Bootstrap 简介
- 自定义仿优酷界面
- jquery总结
- 编程作业:简单的学生管理系统
- WAP面经 live coding
- OpenCV-Python[第一章]——开发环境搭建(Windows)