Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
本篇文章主要介绍了 Spring Boot 与 Docker 部署详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
本文介绍了 Spring Boot 与 Docker 部署,分享给大家,希望对大家有帮助
开启 Docker 远程访问首先需要开启 docker 远程访问功能,以便可以进行远程操作。
CentOS 6修改 / etc/default/docker 文件,重启后生效(service docker restart)。
CentOS 7
- DOCKER_OPTS = "-H=unix:///var/run/docker.sock -H=0.0.0.0:2375"
打开 / usr/lib/systemd/system/docker.service 文件,修改 ExecStart 这行。
- ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
重启后生效
- systemctl daemon-reload
- systemctl restart docker.service
测试是否生效
新建 Maven 工程
- curl http://127.0.0.1:2375/info
pom.xml 配置如下:
- <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>test.springboot.docker</groupId>
- <artifactId>docker-springboot</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>1.5.3.RELEASE</version>
- </parent>
- <properties>
- <java.version>1.8</java.version>
- </properties>
- <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>
- <scope>test</scope>
- </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.14</version>
- <configuration>
- <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
- <dockerDirectory>src/main/docker</dockerDirectory>
- <dockerHost>http://192.168.1.200:2375</dockerHost>
- <resources>
- <resource>
- <targetPath>/</targetPath>
- <directory>${project.build.directory}</directory>
- <include>${project.build.finalName}.jar</include>
- </resource>
- </resources>
- </configuration>
- </plugin>
- </plugins>
- </build>
- </project>
imageName:指定了镜像的名字
dockerDirectory:指定 Dockerfile 的位置
dockerHost:指定 Docker 远程 API 地址
resources:指那些需要和 Dockerfile 放在一起,在构建镜像时使用的文件,一般应用 jar 包需要纳入
创建 Java 类
- package hello;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- @SpringBootApplication
- @RestController
- public class Application {
- @RequestMapping("/")
- public String home() {
- return "Hello Docker World";
- }
- public static void main(String[] args) {
- SpringApplication.run(Application.class, args);
- }
- }
创建 Dockerfile
在 src/main/docker 目录下创建一个名为 Dockerfile 的文件,配置如下:
- FROM java
- VOLUME /tmp
- ADD docker-springboot-0.0.1-SNAPSHOT.jar app.jar
- RUN bash -c 'touch /app.jar'
- ENV JAVA_OPTS=""
- ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
FROM java:指 Docker Hub 上官方提供的 java 镜像,有了这个基础镜像后,Dockerfile 可以通过 FROM 指令直接获取它的状态——也就是在容器中 java 是已经安装的,接下来通过自定义的命令来运行 Spring Boot 应用。
VOLUME /tmp:创建 / tmp 目录并持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用 / tmp 作为工作目录。
ADD docker-springboot-0.0.1-SNAPSHOT.jar app.jar:将应用 jar 包复制到 / app.jar
ENTRYPOINT:表示容器运行后默认执行的命令
完整目录结构如下所示:
运行以下命令创建 Docker 镜像:package docker:build
Docker 启动镜像
查看项目是否上传成功
启动镜像
- docker run - p 8888 : 8080 springboot / docker - springboot
通过浏览器访问
来源: http://www.phperz.com/article/18/0104/355715.html