通过maven插件推送docker镜像

前面已经给大家简单的认识了docker,以及如何通过dockerfile创作一个镜像,和推送镜像到私仓。这篇回到springcloud开发的后端微服务怎么通过docker来制作镜像和推送镜像

这里我以我的网关服务为例 ,我要准备从我本地的开发机(不用安装docker),通过远程到远程安装好docker的机器上进行创建镜像并推送到私仓里。

第一步,肯定是要让安装了docker的机器可以允许远程调用
那么在要在这个远程台上先开放一个远程端口

{
"hosts":["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"],   #这里0.0.0.0表示给所有IP,开放2375端口
"insecure-registries":["192.168.1.14"] 
}

然后重启docker,这样就可以远程调用本机器的docker

systemctl daemon-reload
systemctl restart docker

第二步,在开发机的项目文件中建一个文件夹同样新建一个Dockerfile文件,用于制作镜像
通过maven插件推送docker镜像
在文件中编写内容

FROM 192.168.1.14/common/jdk:jdk8   --这是我提前制作好的包含Jdk8的基础镜像
ENV PROJECT_FILENAME gateway-server-1.2.9-SNAPSHOT.jar
USER root
ADD $PROJECT_FILENAME /$PROJECT_FILENAME
VOLUME /tmp/mclog
COPY wait-for-it.sh /opt/
RUN chmod +x /opt/wait-for-it.sh
EXPOSE 8081
ENTRYPOINT /opt/wait-for-it.sh 127.0.0.1:8848 -- java -Xmx500m -Xms500m -Xmn500m  -Dspring.profiles.active=pre  -jar /$PROJECT_FILENAME > /tmp/mclog/gateway.log

这里格外提一下复制进去的这个wait-for-it.sh可执行文件,这是开源的的个shell文件,下载地址https://gitcode.net/mirrors/vishnubob/wait-for-it?utm_source=csdn_github_accelerator,由于我们各微服务运行前需要判断注册中心nacos是否启用,这个工具持续判断nacos的8848端口是否可用,可用后执行--后面的 java -Xmx500m -Xms500m -Xmn500m -Dspring.profiles.active=pre -jar xxx这一串命令

编写好之后,我们在POM文件中引用docker-maven-plugin这个插件

 <plugins>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.2.2</version>
                <executions>
                    <execution>
                        <id>build-image</id>
                        <phase>deploy</phase>   <!--在mvn deploy 这个阶段执行下面的build,push-->
                        <goals>
                            <goal>build</goal>
                            <goal>push</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <!--这是开放远程创建镜像的docker机器IP-->
                    <dockerHost>192.168.1.14:2375</dockerHost> 
                      <!--替换成你的私仓,项目名,仓库名和其它参数 ,这里都是我的-->
                    <imageName>192.168.1.14/私仓上项目名/${project.name}:${project.version}
                    </imageName>
                   <!--你的Dockerfile所在目录-->
                    <dockerDirectory>${project.build.directory}/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <directory>${project.build.directory}</directory> 
                            <include>${project.build.finalName}.${project.packaging}</include>
                        </resource>
                    </resources>
                    <serverId>your-docker-registry</serverId>
                    <registryUrl>${docker.repostory}</registryUrl>
                    <noCache>true</noCache>
                    <forceTags>true</forceTags>
                </configuration>
            </plugin>
        </plugins>

上面我已加上注释
最后执行mvn deploy进行构建部署并推送到私仓

docker deploy 

接下来会讲解如何用docker-compose作容器的编排

上一篇:gdb应用程序-用户层的第一条指令


下一篇:一文搞懂Docker是什么东东