docker生成springboot镜像

Posted 阿拉的梦想

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker生成springboot镜像相关的知识,希望对你有一定的参考价值。

1. 环境信息

macbook m1
java 1.8

2. 准备程序文件

2.1 文件准备

  1. 创建一个空文件夹docker-test
  2. 将springboot项目打包成可执行jar,放到文件夹;
  3. 将application.properties复制出来,保存成config.properties;
  4. 新建一个文本名为Dockerfile,去掉扩展名;
    如下:
docker-test
├── Dockerfile
├── config.properties
└── demo.jar

因为demo要连接mysql容器中的MySQL数据库,因此要先查看mysql容器的ip地址:

2.2 配置mysql容器的IP

# 查看mysql内部IP
docker  inspect  mysql


把172.17.0.2配置到config.properties中

3. 写Dockerfile

# Docker image for springboot file run
# VERSION 0.0.1
# Author: eangulee
# 基础镜像使用java,这里是适合mac m1芯片的版本
FROM openjdk:oraclelinux8
# 作者
MAINTAINER ccl <ccl@qq.com>
# 生命要使用的端口
EXPOSE 8080
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp 
# 将jar包添加到容器中并更名为app.jar
ADD demo.jar /app/app.jar 
ADD config.properties /app/config.properties
# 运行jar包
ENTRYPOINT ["sh","-c","java -Dspring.config.location=/app/config.properties -Djava.security.egd=file:/dev/./urandom -jar /app/app.jar"]

4. 生成镜像

使用命令

docker build -t demo .

查看生成的镜像:
demo就是

$ docker images
REPOSITORY               TAG       IMAGE ID       CREATED          SIZE
demo                     latest    38e095527f1e   18 minutes ago   544MB
redis                    latest    93f2223d3607   4 weeks ago      107MB
docker/getting-started   latest    720f449e5af2   4 weeks ago      27.2MB
mysql/mysql-server       latest    087c6f86492c   7 weeks ago      509MB

也可以在客户端程序看:

这样就说明已经打包成镜像了。

5. 启动容器

5.1 启动

使用命令:

docker run -d -p 8081:8080 --link mysql --name demo demo

参数说明:
run:启动
-d :后台启动
-p :端口映射,后面跟主机端口和容器端口
–link:连接另一个容器,后面跟容器的名字,比如demo要使用mysql容器中的MySQL数据库,这样配置后demo容器就可以访问mysql容器了,不然网络不通;
–name :生成的容器的名字,不指定的话会随机命名,不易区分。
最后的demo是镜像的名字。

5.2 查看容器

使用命令:docker ps

$ docker ps              
CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS                  PORTS                                     NAMES
4cd443339ff2   demo                        "sh -c 'java -Dsprin…"   30 minutes ago   Up 30 minutes           0.0.0.0:8081->8080/tcp                    demo
7aa165fe0620   mysql/mysql-server:latest   "/entrypoint.sh mysq…"   3 days ago       Up 14 hours (healthy)   0.0.0.0:3306->3306/tcp, 33060-33061/tcp   mysql
0ae371dde311   redis                       "docker-entrypoint.s…"   4 weeks ago      Up 14 hours             0.0.0.0:6379->6379/tcp                    redis-test
d2dfb0d259b0   docker/getting-started      "/docker-entrypoint.…"   4 weeks ago      Up 13 hours             0.0.0.0:80->80/tcp                        gifted_robinson

或者docker desktop:

5.3 进入容器

可以查看容器内部文件
使用命令

$ docker exec -it demo /bin/sh
sh-4.4# ls
app	 bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
app.jar  boot  etc  lib   media  opt  root  sbin  sys  usr
sh-4.4# cd app
sh-4.4# ls app
ls: cannot access 'app': No such file or directory
sh-4.4# ls
app.jar  config.properties
sh-4.4# cd ..
sh-4.4# ls tmp/
hsperfdata_root  tomcat-docbase.8080.4168017359765144938  tomcat.8080.11638847895460439748
sh-4.4# 

也可以在docker desktop进入:

6. 验证容器内程序是否可用

可以访问成功,并从mysql容器中获取到数据了,完美。乱码是小事。

以上是关于docker生成springboot镜像的主要内容,如果未能解决你的问题,请参考以下文章

docker使用Dockerfile把springboot项目jar包生成镜像并运行

SpringBoot项目构建镜像方法

Springboot2 Vue 前后端分离 整合打包 docker镜像

spring boot项目生成docker镜像并完成容器部署

maven 打包 spring boot 生成docker 镜像

在SpringBoot中使用Docker(利用dockerfile-maven-plugin插件)