docker 自定义部署Springboot——依赖与代码分离部署


第一步:执行mvn package 命令打出jar包,然后解压jar包,把lib放到服务器合适的目录下面

第二步:打出不带jar包的SpringBoot工程

首先配置pom.xml文件

<build>
    <finalName>demo</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <mainClass>com.liekkas.DemoApplication</mainClass>
                <layout>ZIP</layout>
                <includes>
                    <include>
                        <groupId>nothing</groupId>
                        <artifactId>nothing</artifactId>
                    </include>
                </includes>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

执行mvn package 命令打出jar包,和lib的放在同一目录下

第三步:在服务器创建Dockerfile文件,并填入一下内容

#依赖镜像
FROM java:8-alpine
#把当前的hello.jar当如到容器中(目前为了方便放入更目录,可以自己选择)
ADD hello.jar /app.jar
#拷贝依赖jar到容器中
ADD lib/ /home/lib/
#拷贝启动脚本到容器中
COPY start.sh /start.sh
#给脚本添加执行权限
RUN chmod +x start.sh
#容器启动时执行脚本
ENTRYPOINT ./start.sh
#暴露服务端口
EXPOSE 8080

同目录下创建start.sh,并填入以下内容,这样容器启动的时候就会启动Springboot项目

echo ">>>>>> create log file"
cd /tmp
touch app.log
chmod 666 /tmp/app.log
echo ">>>>>> create log file success"

echo ">>>>>> project is starting"
java  -Dloader.path=/home/lib -jar /app.jar >/tmp/app.log
echo ">>>>>> start success"

第三步:jar包和Dockerfile文件放在同一目录,把项目打成docker镜像,注意后面 有个小点不能少

docker build -t hello .

第四步:springboot项目打包成 docker镜像成功之后,这个时候执行下面的命令可以查看你的 镜像

docker images

第五步:启动容器

docker run -d -p 8080:8080 hello

第六步查看容器启动状态

docker ps -a

附录

进入容器命令

docker exec -it 容器Id /bin/sh

目前不清楚/bin/bash进不去,可能没有/bin/bash解释器

由于Dockerfile文件中的ADD命令是从本目录下寻找文件的,所以ADD 主机的文件只能在和Dockerfile文件的同一目录或者子目录

如果源路径是个文件,且目标路径是以 / 结尾, 则docker会把目标路径当作一个目录,会把源文件拷贝到该目录下。 如果目标路径不存在,则会自动创建目标路径。

2、如果源路径是个文件,且目标路径是不是以 / 结尾,则docker会把目标路径当作一个文件。 如果目标路径不存在,会以目标路径为名创建一个文件,内容同源文件; 如果目标文件是个存在的文件,会用源文件覆盖它,当然只是内容覆盖,文件名还是目标文件名。 如果目标文件实际是个存在的目录,则会源文件拷贝到该目录下。 注意,这种情况下,最好显示的以 / 结尾,以避免混淆。

3、如果源路径是个目录,且目标路径不存在,则docker会自动以目标路径创建一个目录,把源路径目录下的文件拷贝进来。 如果目标路径是个已经存在的目录,则docker会把源路径目录下的文件拷贝到该目录下。

4、如果源文件是个归档文件(压缩文件),则docker会自动帮解压。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM