docker 打包新镜像原有配置丢失_Docker部署SpringBoot项目,springclound 项目

8da903dea739801f9963db92a4e3191b.png

以我本地的eureka项目为例进行部署:

e7133ef0f458a32eb38c304602d49869.png

打包为:JAR

新建一个自己觉得好看的文件夹,将该JAR文件移动到该文件夹下备孕:

进入到该文件夹下,编写Dockerfile文件:

vim Dockerfile

cd8d6c729c51a83f64e7fd6ebde84857.png
# Docker image for family-eureka-1.0.0-SNAPSHOT file run 
# VERSION 1.0.0-SNAPSHOT 
# Author: hirsi 
# 基础镜像使用java8 
FROM java:8 

# VOLUME 指定了临时文件目录为/tmp。 
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp 
VOLUME /tmp 

# 将jar包添加到容器中并更名为eureka.jar 
ADD family-eureka-1.0.0-SNAPSHOT.jar eureka.jar

# 运行jar包
RUN bash -c 'touch /eureka.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/eureka.jar"]


VOLUME
可实现挂载功能,可以将内地文件夹或者其他容器种得文件夹挂在到这个容器种
语法为:
VOLUME ["/data"]
说明:
["/data"]可以是一个JsonArray ,也可以是多个值。所以如下几种写法都是正确的
VOLUME ["/var/log/"]
VOLUME /var/log
VOLUME /var/log /var/db
一般的使用场景为需要持久化存储数据时
容器使用的是AUFS,这种文件系统不能持久化数据,当容器关闭后,所有的更改都会丢失。
所以当数据需要持久化时用这个命令。
ENTRYPOINT
功能是启动时的默认命令
语法如下:
1. ENTRYPOINT ["executable", "param1", "param2"]
2. ENTRYPOINT command param1 param2

部署文件

在服务器新建一个docker文件夹,将maven打包好的jar包和Dockerfile文件复制到服务器的docker文件夹下 ,最后有个. 意思为在当前文件夹下:

docker build -t family-eureka-1.0.0-SNAPSHOT .

931172468708142024090a13c2b44fe1.png

注意命名:

eec31490d3d6592ea1c8d0417007d6de.png

解决方法:

出现该问题的原因是docker镜像命名错误:存在大写字母

docker build -t family-eureka-1.0.0 .

b4f995a25fbeaf1adde2dc29b7560ea1.png

制作完成后通过docker images命令查看我们制作的镜像:

d292b421f224287dc191161c8f2142a4.png
docker run -d -p 7070:7070  family-eureka-1.0.0
-d参数是让容器后台运行 
-p 是做端口映射,此时将服务器中的7070端口(: 前面)映射到容器中的7070(项目中端口配置的是7070: 后面)端口

00d3622117557434e72a5a340553ea0a.png

运行报错:No main manifest attribute.

9acdbee9a3c2921f3d68fd541b02ea09.png

在docker run时通过查看日志看到如此错误,需要设置goal-repackage属性为true,否则打包后文件依赖文件没有一起打包,然后镜像内没有可以运行的程序文件

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <!-- 指定该Main Class为全局的唯一入口 -->
                <mainClass>com.EurekaApplication</mainClass>
                <layout>ZIP</layout>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <!--可以把依赖的包都打包到生成的Jar包中-->
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

重新打包,将新的打包文件替换并重新生成镜像:

8bcccced7a5b90e1f0e5b2dffa9b272a.png

查询刚才生成的镜像,并停止它:

docker ps -n 2
docker stop 53bf66af9bff

为防止混淆,删除镜像:

docker rm 53bf66af9bff

进入dockerFile文件夹,重新生成镜像

因为镜像包含操作系统完整的 root 文件系统,其体积往往是庞大的,因此在 Docker 设计时,就充分利用 Union FS 的技术,将其设计为分层存储的架构。所以严格来说,镜像并非是像一个 ISO 那样的打包文件,镜像只是一个虚拟的概念,其实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。 镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。 分层存储的特征还使得镜像的复用、定制变的更为容易。甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像。

可以复用的就不用再次下载,编译很快

docker build -t family-eureka-1.0.0 .

beedc103c0d72a02b99d79f1cec7b555.png

查看日志:成功了呀!!!

978324cd37ca01a7cf704492073ffedf.png

访问网站

直接浏览器访问: http://localhost:7070/

15b54103275d4559b963dcf2c3161294.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值