微服務之docker基於Dockerfile將springboot項目構建成鏡像,並推送遠端倉庫

一、Dockerfile構建docker鏡像

1、創建Dockerfile,放置到跟jar包相同目錄,文件內容如下,具體常用指令請看另一篇文章 Dockerfile 基礎

#指定基礎鏡像,這個需要根據自己配置的倉庫上的版本寫
FROM openjdk:8-jdk-alpine
#持久化目錄
VOLUME /mnt/study/project
#指定源包,前者是你的jar包
ADD project-0.0.1-SNAPSHOT.jar app.jar
#指定容器啓動時執行的命令
ENTRYPOINT ["java","-jar","/app.jar"]
#對外端口
EXPOSE 8080

2、創建鏡像,注意後面的 . 表示當前目錄

docker build -t spring/project .

   

3、查看創建好的鏡像(docker images)

   

4、運行(docker run -d -p 8080:8080 --name project spring/project)-p 前者是主機端口,後者是容器端口,由於項目設置的訪問端口是8080,所以映射的容器端口需要是8080纔可訪問到,可以看到正常運行

   

    

二、使用maven 構建docker鏡像

1、項目跟鏡像同臺機器,在項目的pom.xml 中的plugins節點增加插件,然後在命令窗口執行構建命令

<!-- docker 構建-->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.12</version>
                <configuration>
                    <!--鏡像名-->
                    <imageName>project</imageName>
                    <baseImage>java</baseImage>
                    <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>


#項目根目錄,也就是pom所在目錄,命令行窗口執行構建命令
mvn clean package docker:build

2、項目跟鏡像不同臺機器,利用idea,遠程構建推送

  • 在項目的pom.xml 中的plugins節點增加插件
<!-- docker 構建-->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.12</version>
                <configuration>
                    <imageName>project/start</imageName>  <!--指定鏡像名稱 倉庫/鏡像名:標籤-->
                    <baseImage>openjdk:8-jdk-alpine</baseImage> <!--指定基礎鏡像-->
                    <dockerHost>http://192.168.1.60:2375</dockerHost>  <!-- 指定服務器倉庫地址 -->
                    <entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint> <!-- 容器啓動執行的命令 -->
                    <resources>
                        <resource>
                            <targetPath>/</targetPath> <!-- 指定要複製的目錄路徑,這裏是當前目錄 -->
                            <directory>${project.build.directory}</directory> <!-- 指定要複製的根目錄,這裏是target目錄 -->
                            <include>${project.build.finalName}.jar</include> <!-- 指定需要拷貝的文件,這裏指最後生成的jar包 -->
                        </resource>
                    </resources>
                </configuration>
            </plugin>
  • 設置好服務器各種端口
#打開/etc/sysconfig/docker
vi /etc/sysconfig/docker

#添加
DOCKER_OPTS='-H unix:///var/run/docker.sock -H 0.0.0.0:2375'

#打開 /usr/lib/systemd/system/docker.service
vi /usr/lib/systemd/system/docker.service

#ExecStart後添加
$DOCKER_OPTS \

#刷新重啓
systemctl daemon-reload
systemctl restart docker

#開啓防火牆端口
firewall-cmd --zone=public --add-port=2375/tcp --permanent
也可直接關閉防火牆
systemctl stop firewalld

#刷新重啓
firewall-cmd --reload

   

  • idea設置

  

 

三、maven結合Dockerfile構建鏡像並上傳DockerHub

1、前期工作如上方的第一部分的第一點,創建Docderfile,但這次是放到項目/src/main/docker目錄下面

2、接着做上方第二部分的第一步在pom.xml文件增加插件配置,但內容有所不同

<!-- docker 構建-->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.12</version>
                <configuration>
                    <!--這是DockerHub上repo的地址--><!--如果是私服,路徑爲:私有倉庫地址/你鏡像路徑,如 registry.lin.com/study-->
                    <imageName>linzhuzai/study</imageName>
                    <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                    <serverId>docker-hub</serverId><!--與maven配置中serviceid一致-->
                    <registryUrl>https://index.docker.io/v1/</registryUrl>
                </configuration>
            </plugin>

2、修改maven配置文件settings.xml

<servers>
	<server>
		<id>docker-hub</id>
		<username>你的DockerHub用戶名</username>
		<password>你的DockerHub密碼</password>
		<configuration>
			<email>你的DockerHub郵箱</email>
		</configuration>
	</server>
</servers>

3、項目根目錄,也就是pom.xml所在目錄,構建

mvn clean package docker:build -DpushImage

四、額外知識點

1、上方几種方式在構建時我們都需要打 docke:build ,我們可以用 phase 將docker和maven的命令進行綁定,這樣在構建時只需要跟用maven打包其他項目一樣,只需要輸入 mvn clean package 即可。綁定的docker命令也會執行。我們以上方第二部分的第一點,修改一下pom.xml 文件 ,增加<executions> 那部分內容

<plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <executions>
					<execution>
						<id>build-image</id>
						<phase>package</phase>
						<goals>
							<goal>build</goal><!--執行maven命令時,docker build-->
						</goals>
					</execution>
				</executions>
                <configuration>
                    <!--鏡像名-->
                    <imageName>project</imageName>
                    <baseImage>java</baseImage>
                    <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>

 

 

發佈了50 篇原創文章 · 獲贊 13 · 訪問量 6617
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章