前面已经给大家简单的认识了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文件,用于制作镜像
在文件中编写内容
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作容器的编排