SpringBoot制作docker镜像

SpringBoot制作docker镜像

开启2375端口

修改docker配置文件

  • vim /usr/lib/systemd/system/docker.service
  • ExecStart=/usr/bin/dockerd配置加上如下内容
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
  • 添加完之后的完整内容如下:
Type=notify
NotifyAccess=main
EnvironmentFile=-/run/containers/registries.conf
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
Environment=GOTRACEBACK=crash
Environment=DOCKER_HTTP_HOST_COMPAT=1
Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
ExecStart=/usr/bin/dockerd-current \
          -H tcp://0.0.0.0:2375 \
          -H unix:///var/run/docker.sock \
          --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
          --default-runtime=docker-runc \
          --exec-opt native.cgroupdriver=systemd \
          --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
          --init-path=/usr/libexec/docker/docker-init-current \
          --seccomp-profile=/etc/docker/seccomp.json \
          $OPTIONS \
          $DOCKER_STORAGE_OPTIONS \
          $DOCKER_NETWORK_OPTIONS \
          $ADD_REGISTRY \
          $BLOCK_REGISTRY \
          $INSECURE_REGISTRY \
          $REGISTRIES

  • 重启docker

配置环境变量

  • 添加环境变量DOCKER_HOST的值为tcp://ip:2375

Dockerfile

  • 将编写的Dockerfile文件放在/src/main/docker下,内容如下:
FROM java:8

MAINTAINER https://chenjiabing666.github.io

# 指定虚拟卷,/tmp是tomcat运行时需要的,/usr/local/images是上传文件需要的,/usr/local/weblogs/demo是记录日志需要的
VOLUME ["/tmp","/usr/local/images","/usr/local/weblogs/demo"]

# 添加jar
ADD demo-server.jar demo.jar

# 暴露8080端口
EXPOSE 8080

# 运行jar
CMD ["java","-jar","demo.jar"]

配置maven插件

<build>
        <finalName>demo-server</finalName>
        <plugins>
            <!-- springBoot的maven打包插件 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.13</version>
                
                <!-- 将docker:build这个动作绑定在package这个动作上,只要maven install 即可上传到远程服务器 -->
                <executions>
                    <execution>
                        <id>build-image</id>
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
                
                <configuration>
                    
                    <!-- 指定镜像的名称+版本,必须是满足[a-z,0-9]这个正则才行 -->
                    <imageName>${project.artifactId}:${project.version}</imageName>
                    
                    <!-- 覆盖相同标签镜像 -->
                    <forceTags>true</forceTags>
                    
                    <!-- 指定Dockerfile的文件位置 -->
                    <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
                    
                    <!-- 指定Dockerfile的文件位置 -->
                    <dockerHost>http://39.105.123.197:2375</dockerHost>
                    
                    <!-- 指定jar包所在的位置 -->
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
    </build>

运行

  • 我们制作镜像运行的时候需要挂载自己的虚拟卷,否则诸如创建文件夹和上传文件之类的都是在容器内创建的,不会在本机创建,因此我们需要将其挂载在自己的宿主机上,运行命令如下:
    • 使用-v挂载即可
 docker run --name demo -p 8080:8080 -v /usr/local:/usr/local -v /tmp:/tmp -d 8877edd71d5a

源码

参考文章

推荐阅读更多精彩内容