通常部署项目的时候,dockerFile文件编写的时候,FROM构建基础镜像都是直接以运行环境 JDK多少版本来做,然而在宿主机上其实都是有安装好的环境。
同理,还有其他依赖,如果宿主机有,在dockerFile中再去引入,制作镜像的时候都需要将依赖打进容器,这样很累赘,会发现一个镜像的体积很大。所以一些存在的能共用宿主机的直接使用,简而代之。
不过,也有弊端,当宿主机某些环境变更升级什么的,也可能会导致一些问题,视实际情况决定。
部署操作步骤:
1.起一个简单的springboot项目作为例子,直接使用https://start.spring.io/,创建一个项目。

2.idea导入项目,application.properties都是空的,很简单项目,直接一个测试接口,get请求访问。具体结构如下:

TestController如下:
package com.king.mydemo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("test")
public class TestController {
@GetMapping("one")
public String testGetAccess(){
return "访问成功";
}
}
POM文件如下:
<?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.7.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.king</groupId>
<artifactId>mydemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mydemo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</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>
</plugins>
</build>
</project>
3.编写dockerFile文件内容,如下:
#镜像是没有jdk环境的,所以在生成容器的时候一定要把宿主机jdk目录挂载到容器中
FROM debian:latest
# SpringBoot内嵌的Tomcat容器默认使用该 /tmp 作为工作目录
VOLUME /tmp
# 拷贝文件(SpringBoot项目打包的Jar包名)并重命名(另起一个新名字)
ADD mydemo-0.0.1-SNAPSHOT.jar /app.jar
ENV JAVA_HOME="/usr/local/jdk-11"
ENV PATH="${PATH}:${JAVA_HOME}/bin:${JAVA_HOME}/sbin"
# 容器启动时的命令(等价于 java -jar xxxx.jar)
ENTRYPOINT [ "java", "-jar", "/app.jar" ]
简单介绍 debian:latest 为了选用更小的基础镜像。
常用的 Linux 系统镜像一般有 ubuntu、centos、debian,其中debian 更轻量,而且够用,对比如下:
REPOSITORY TAG IMAGE ID VIRTUAL SIZE
centos 7 214a4932132a 215.7 MB
centos 6 f6808a3e4d9e 202.6 MB
ubuntu trusty d0955f21bf24 188.3 MB
ubuntu precise 9c5e4be642b7 131.9 MB
debian jessie 65688f7c61c4 122.8 MB
debian wheezy 1265e16d0c28 84.96 MB
替换 debian:jessie 作为我们的基础镜像。
4.maven编译打包

5.操作服务器,将jar包和dockerFile文件放至同一目录,创建文件夹:/home/myproject/

进入对应目录执行如下命令操作:
docker build -t mydemo .

6.结束后,启动容器:
宿主机jdk为11,安装目录是在/usr/local/jdk-11
生成容器时必须要将宿主机的运行环境目录挂载到容器中,也就是下面的 -v /usr/local:/usr/local操作
docker run -d --name mydemo -p 8080:8080 -v /usr/local:/usr/local --restart=always mydemo
网友评论