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