springboot使用Maven來構建Docker鏡像並上傳到私服倉庫

一:開啓docker遠端地址

1、修改 /etc/sysconfig/docker文件
vi /etc/sysconfig/docker
在最下面添加一行
DOCKER_OPTS='-H unix:///var/run/docker.sock -H 0.0.0.0:2375'


2、在/usr/lib/systemd/system/docker.service,配置遠程訪問。
vi /usr/lib/systemd/system/docker.service
主要是在[Service]這個部分,修改ExecStart參數,在ExecStart後面添加 $DOCKER_OPTS \
如圖:


3、重啓
systemctl daemon-reload
systemctl restart docker
4、防火牆開放2375端口號
firewall-cmd --zone=public --add-port=2375/tcp --permanent
重啓防火牆
firewall-cmd --reload
5、用瀏覽器訪問查看是否成功
http://192.168.1.47:2375/images/json

二:配置springboot項目的pom.xml

<build>
    <finalName>${project.artifactId}</finalName>
    <plugins>
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>1.0.0</version>
            <!--將插件綁定在某個phase執行-->
            <executions>
                <execution>
                    <id>build-image</id>
                    <!--用戶只需執行mvn package ,就會自動執行mvn docker:build-->
                    <phase>package</phase>
                    <goals>
                        <goal>build</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <!--指定dockerfile文件目錄-->
                <dockerDirectory>${project.basedir}/docker/demo</dockerDirectory>
                <!--指定生成的鏡像名-->
                <imageName>ft/${project.artifactId}</imageName>
                <!--指定標籤-->
                <imageTags>
                    <imageTag>latest</imageTag>
                </imageTags>
                <forceTags>true</forceTags>    <!--覆蓋相同標籤鏡像-->
                <!--指定遠程 docker api地址-->
                <dockerHost>http://192.168.1.XXX:2375</dockerHost>
                <!-- 這裏是複製 jar 包到 docker 容器指定目錄配置 -->
                <resources>
                    <resource>
                        <targetPath>/</targetPath>
                        <!--jar 包所在的路徑  此處配置的 即對應 target 目錄-->
                        <directory>${project.build.directory}</directory>
                        <!-- 需要包含的 jar包 ,這裏對應的是 Dockerfile中添加的文件名 -->
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
            </configuration>
        </plugin>
    </plugins>
</build>

三:編寫dockerfile文件

# Docker image for springboot file run
# 基礎鏡像使用java
FROM java:8
# 作者
MAINTAINER jzq
# VOLUME 指定了臨時文件目錄爲/tmp# 其效果是在主機 /var/lib/docker 目錄下創建了一個臨時文件,並鏈接到容器的/tmp
VOLUME /tmp
# jar包添加到容器中並更名爲app.jar
ADD ft-service-demo.jar app.jar
# 運行jarRUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

 

注:VOLUME 指定了臨時文件目錄爲/tmp。其效果是在主機 /var/lib/docker 目錄下創建了一個臨時文件,並鏈接到容器的/tmp。該步驟是可選的,如果涉及到文件系統的應用就很有必要了。/tmp目錄用來持久化到 Docker 數據文件夾,因爲 Spring Boot 使用的內嵌 Tomcat 容器默認使用/tmp作爲工作目錄
項目的 jar 文件作爲 “app.jar” 添加到容器的
ENTRYPOINT 執行項目 app.jar。爲了縮短 Tomcat 啓動時間,添加一個系統屬性指向 “/dev/./urandom” 作爲 Entropy Source
如果是第一次打包,它會自動下載java 8的鏡像作爲基礎鏡像,以後再製作鏡像的時候就不會再下載了。

四:maven打包即可

如果報錯:

container_linux.go:247: starting container process caused "process_linux.go:258: applying cgroup configuration for process caused \"Cannot set property TasksAccounting, or unknown property.\"" /usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "process_linux.go:258: applying cgroup configuration for process caused \"Cannot set property TasksAccounting, or unknown property.\"".

解決:主要原因還是centos系統版本兼容性問題,將系統做更新升級,即可解決: 

1、執行:yum update
2、重啓docker:systemctl restart docker
3、重新maven打包

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章