准备向先看dockerfile的,看了一下,有点晦涩难懂,所以准备先将写一个可以部署到docker的springboot项目,这样慢慢理解才能更加容易。
一.项目准备
1.maven依赖
<?xml version="1.0" encoding="UTF-8"?>
<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.xichuan.dev</groupId>
<artifactId>springboot-docker</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-docker</name>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<docker.image.prefix>springboot-docker</docker.image.prefix>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.4.RELEASE</version>
<relativePath></relativePath>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Camden.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- Docker maven plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>${docker.image.prefix}/${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>
</plugins>
</build>
</project>
注意的是,此文件有两处docker的配置
1.在properties中添加镜像名称
<properties>
<docker.image.prefix>springboot-docker</docker.image.prefix>
</properties>
2.在plugins中添加docker插件
<!-- Docker maven plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>${docker.image.prefix}/${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>
2.启动文件
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
public class SpringbootDockerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootDockerApplication.class, args);
}
@RestController
public class DockerController {
@RequestMapping("/")
public String index() {
return "Hello Docker!";
}
}
}
3.application.yml配置文件
server:
port: 8005
项目运行后输入:http://localhost:8050/ 会看到下面文字

二.在linux中操作docker
在linux中创建一个文件:Dockerfile ,并价格springboot项目的jar包与此文件放到同一个问价夹中。
1.添加下面文字到dockerfile中:
# 指定基础镜像
FROM java:8
# 维护者信息
MAINTAINER xichuan
# 定义匿名卷
VOLUME /tmp
#复制文件或修改名称
ADD springboot-docker-0.0.1-SNAPSHOT.jar app.jar
# 允许指定的端口
EXPOSE 8005
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

2.使用的Dockerfile命令基本介绍:
- FROM:表示基础镜像,即运行环境
- VOLUME:一个特别指定的目录,用于存储数据,该命令的作用是在/var/lib/docker创建一个名为tmp的目录,在开启redis服务时,需要特别指定redis的数据存储在哪个文件夹,此时这个命令就十分有用
- ADD:拷贝文件并且重命名
- EXPOSE:并不是真正的发布端口,这个只是容器部署人员与建立image的人员之间的交流,即建立image的人员告诉容器布署人员容器应该映射哪个端口给外界
- ENTRYPOINT:容器启动时运行的命令,相当于我们在命令行中输入java -jar xxxx.jar,为了缩短 Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为 ENTRYPOINT
3.生成docker image
在Dockerfile目录下,运行下面命令:
#根据Dockerfile生成镜像
docker build -t springboot-docker .
可以看到docker是根据Dockerfile中的每一行顺序执行指令的

4.通过docker imgaes查看所有的镜像:
docker images

5.在docker上运行springboot项目
docker run -p 8080:8005 -d springboot-docker
-p表示端口映射,冒号左边为docker容器外的端口号,右边为容器内的端口号,-d表示后台运行 docker表示REPOSITORY的值
在浏览器上输入:http://ip:8080/,就可以看到了

6.此搭建过程命令总结,以及其他要用到的命令
#根据Dockerfile生成镜像
docker build -t springboot-docker .
#查看所有镜像
docker images
#删除镜像,删除镜像的时候,必须现先将镜像所有的container删除
docker rmi docker.io/tomcat:7.0.77-jre7 或者 docker rmi b39c68b7af30
#在docker运行项目
docker run -p 8080:8005 -d springboot-docker
#查看哪些容器正在运行
docker ps
#查看所有容器,包括已经停止的容器
docker ps -a
#启动、停止、启动容器
docker start container_name/container_id
docker stop container_name/container_id
docker restart container_name/container_id
#启动后,想进入容器,可以进入容器查看日志
docker attach container_name/container_id
#删除容器
docker rm container_name/container_id
更多命令详情,可以查看之前写的博客:docker基础知识总结_兮川的博客-优快云博客_docker基础知识
想要使用此镜像的同鞋可以使用下面命令拉去获取镜像
docker pull xichuan/springboot-docker:first
参考链接:
在docker上部署springboot项目_菜到怀疑人生的博客-优快云博客
Spring Boot 2 (四):使用 Docker 部署 Spring Boot - 纯洁的微笑博客
github上有我更多的笔记:Raray-chuan (兮川) · GitHub,欢迎stars与following,如果有问题可以在issue中向我咨询

关注我的公众号,获取更多关于后端、大数据的知识


本文详细介绍了如何在Docker上部署SpringBoot项目,包括项目准备、配置maven依赖、创建Dockerfile、生成及运行docker镜像。在Dockerfile中,讲解了FROM、VOLUME、ADD、EXPOSE、ENTRYPOINT等命令的用法,并提供了运行和检查镜像的命令。最后,提到了镜像拉取和相关资源链接。
2556

被折叠的 条评论
为什么被折叠?



