1.版本信息
通过 docker version 命令可以获取当前docker版本信息
Client:
Version: 1.13.1
API version: 1.26
Package version: docker-1.13.1-103.git7f2769b.el7.centos.x86_64
Go version: go1.10.3
Git commit: 7f2769b/1.13.1
Built: Sun Sep 15 14:06:47 2019
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Package version: docker-1.13.1-103.git7f2769b.el7.centos.x86_64
Go version: go1.10.3
Git commit: 7f2769b/1.13.1
Built: Sun Sep 15 14:06:47 2019
OS/Arch: linux/amd64
Experimental: false
2.创建一个简单的SpringBoot web应用
2.1maven配置文件如下
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/>
</parent>
<groupId>wang.sunce</groupId>
<artifactId>docker</artifactId>
<version>0.0.1</version>
<packaging>jar</packaging>
<name>docker</name>
<description>demo for web</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<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-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
2.2 新建项目启动类
创建启动类
@RestController
@SpringBootApplication
public class DockerApplication {
public static void main(String[] args) {
SpringApplication.run(SearchApplication.class, args);
}
@RequestMapping("/test")
public String test(){
return "hello world";
}
}
启动项目并验证 浏览器访问:http://127.0.0.1:8080/test ,返回如下结果
hello world
3.进行对项目进行docker配置
3.1 创建Dockerfile文件
文件目录结果如下
Dockerfile文件内容
FROM java:8
ADD ./docker-0.0.1.jar ./app.jar
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone
EXPOSE 8080
ENTRYPOINT ["java", "-jar","-Duser.timezone=GMT+08", "./app.jar"]
-
FROM 表示依赖镜像
-
ADD 表示添加内容到镜像
-
EXPOSE 表示声明容器内监听端口
-
ENTRYPOINT 表示指定镜像的默认入口命令
-
“-Duser.timezone=GMT+08” 解决时区问题
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone
解决docker时区问题
3.2 升级pom文件配置
添加docker registry相关变量到 properties
<image.name>${project.artifactId}:${project.version}</image.name>
- image.name 镜像名称
在pom文件中添加plugins
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>${image.name}</imageName>
<dockerDirectory>./</dockerDirectory>
<resources>
<rescource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</rescource>
</resources>
</configuration>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
<execution>
<id>tag-image</id>
<phase>install</phase>
<goals>
<goal>tag</goal>
</goals>
<configuration>
<image>${image.name}</image>
<newName>${registry.url}/${image.name}</newName>
</configuration>
</execution>
<execution>
<id>push-image</id>
<phase>install</phase>
<goals>
<goal>push</goal>
</goals>
<configuration><imageName>${registry.url}/${project.build.finalName}</imageName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
- imageName 表示镜像名称
- resources 表示需要的资源
- executions 表示执行的命令集合
- phase 例如:
install 表示执行maven install时 - goals 表示:对应的目标指令
- <goal>build</goal> 相当于 docker build 命令
- <goal>tag</goal> 相当于 docker tag 命令
- <goal>push</goal> 相当于 docker push 命令
创建镜像
4.运行镜像
docker run -p 8080:8080 -d --name docker-demo \
-v /etc/localtime:/etc/localtime docker:0.0.1
5.不依赖Dockerfile 方式
以上操作的方式是需要我们创建Dockerfile文件,并在pom文件中指定文件的位置,我们也可以不依赖Dockerfile文件,来创建应用镜像;需要我们在pom配置plugin时,加上相关配置即可
添加相关变量
添加docker registry相关变量到 properties
<registry.url>registry地址</reqistry.url>
- registry.url registry地址,例如registry.sunce.xin
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>${project.build.finalName}</imageName>
<dockerDirectory>./</dockerDirectory>
<baseImage>java:8</baseImage>
<entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
<resources>
<rescource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</rescource>
</resources>
</configuration>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
<execution>
<id>tag-image</id>
<phase>install</phase>
<goals>
<goal>tag</goal>
</goals>
<configuration>
<image>${project.build.finalName}</image>
<newName>${registry.url}/${project.build.finalName}</newName>
</configuration>
</execution>
<execution>
<id>push-image</id>
<phase>install</phase>
<goals>
<goal>push</goal>
</goals>
<configuration>
<imageName>${registry.url}/${project.build.finalName}</imageName>
</configuration>
</execution>
</executions>
</plugin>
5.扩展阅读
5.1 Dockerfile 文件指令集
分类 | 指令 | 说明 |
---|---|---|
配置指令 | ARG | 定义创建镜像过程中使用的变量 |
配置指令 | FROM | 指定所创建镜像的基础镜像 |
配置指令 | LABEL | 为生成的镜像添加元数据标签 |
配置指令 | EXPOSE | 声明镜像内服务监听的端口 |
配置指令 | ENV | 指定环境变量 |
配置指令 | ENTRYPOINT | 指定镜像默认入口命令 |
配置指令 | VOLUME | 创建一个数据挂载点 |
配置指令 | USER | 指定运行容器是的用户名 |
配置指令 | WORKDIR | 配置工作目录 |
配置指令 | ONBUILD | 创建子镜像时指定自动执行的操作命令 |
配置指令 | STOPSIGNAL | 指定退出的信号值 |
配置指令 | HEALTHCHECK | 指定如何进行健康检查 |
操作指令 | RUN | 运行指定命令 |
操作指令 | CMD | 启动容器是指定默认执行命令 |
操作指令 | ADD | 添加内容到镜像 |
操作指令 | COPY | 复制内容到镜像 |
作者是一个技术肥宅,还在不断的学习进步中,十分欢迎各位 杠精 读者指出文中不足之处,欢迎您来留言提问;也欢迎转载,烦请注明出处。
- 本文链接: https://www.sunce.wang/archives/docker部署springboot应用指南
- 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!