微服务之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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章