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打包

 

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