本文用到的工具:jar包、docker环境
前置文章:如何在阿里创建自己的Docker镜像仓库
我们准备一个jar包,里面只有一个接口,没有配置数据库相关文件。后面的文章会有包含配置文件等打包镜像操作。
1.编写jar包
本地简单编写了一个jar包,里面有一个接口,返回下面数据。
applicaton.yml
server:
port: 8081
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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>test</artifactId> <version>1.0-SNAPSHOT</version> <!-- 引入 Spring Boot 统一版本父项目管理依赖 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.7</version> </parent> <properties> <java.version>1.8</java.version> </properties> <dependencies> <!-- Spring Web 依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
启动类:
package site.longkui; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
接口:
package site.longkui.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class hello { @ResponseBody @RequestMapping("/hello") public String hello() { return "Hello World!"; } }
然后将项目进行打包,得到一个xxx.jar。
2.编写dockerfile文件
dockerfile是一个文本文件,其中包含一个一个的指令,用指令来说明要执行什么操作来构建镜像。将来docker可以根据dockerfile帮我们构建镜像。
指令 | 说明 | 示例 |
FROM | 指定基础镜像 | FROM centos:7 |
ENV | 设置环境变量(key value形式) | ENV key value |
COPY | 拷贝本地文件到镜像的指定目录 | COPY ./test.tar.gz /tmp |
RUN | 执行Linux的shell命令 | RUN tar -zxvf /tmp/test.tar.gz |
EXPOSE | 指定容器运行时监听的端口 | EXPOSE 8081 |
ENTRYPOINT | 镜像中应用的启动命令,容器运行时调用 | ENTRYPOINT java -jar xxx.jar |
那么根据我们的命令,我们创建dockerfile文件参考如下:
#基础镜像
FROM openjdk:11.0-jre-buster
#拷贝jar包
copy test.jar /app.jar
#入口
ENTRYPOINT ["java","-jar","/app.jar"]
3.创建镜像
我们把dockerfile文件和jar包都拷贝到linux服务器下,放到同一个文件下。
然后使用docker build -t myImage:1.0 . 方式创建镜像。其中,-t表示给镜像起名。
注意,命令最后有个点,表示当前目录。
我们cd到服务器上的文件所在目录,
docker build -t test .
注意命令后面的点
可以看到,正常构建镜像。
我们尝试运行一下镜像,
docker run -d --name testjar -p 80:8081 test
这个地方的8081端口是我们一开始编写java代码配置的端口,我们用宿主机的80端口映射我们容器内的8081端口。
然后访问我们刚才的网址:
可以看到,我们正常访问我们创建的容器。
4.将镜像推送到仓库
到上一步我们已经可以在本地使用镜像创建容器了。但是有的时候不一定是单机部署,有可能需要在其他地方部署,这个时候如果把制作好的镜像推送到公共仓库,每次用的时候直接从仓库拉下来镜像创建容器即可。
我们参考开始的文章,在阿里云创建一个docker仓库。
根据阿里云给的命令,我们把创建的镜像推送到阿里云仓库中。
推送成功后,我们就可以根据阿里云的获取地址进行镜像的拉取操作,非常方便。