docker生成springboot镜像
Posted 阿拉的梦想
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker生成springboot镜像相关的知识,希望对你有一定的参考价值。
docker生成springboot镜像
1. 环境信息
macbook m1
java 1.8
2. 准备程序文件
2.1 文件准备
- 创建一个空文件夹docker-test
- 将springboot项目打包成可执行jar,放到文件夹;
- 将application.properties复制出来,保存成config.properties;
- 新建一个文本名为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包生成镜像并运行
Springboot2 Vue 前后端分离 整合打包 docker镜像
spring boot项目生成docker镜像并完成容器部署