美文网首页spring
Docker Swarm + SpringCloud(三)构建镜

Docker Swarm + SpringCloud(三)构建镜

作者: 影秋 | 来源:发表于2018-12-24 14:09 被阅读0次

Maven 插件

dockerfile-maven-plugin:1.4.9,前生是docker-maven-plugin,是一个快速构建docker镜像的maven插件,github地址:https://github.com/spotify/dockerfile-maven

配置setting.xml

setting.xml文件一般在用户目录下的.m2文件夹下

  1. 在<servers><servers>中添加neuxs和docker推送的认证信息
<servers>
    <server>
       <id>neuxs</id>
       <username>admin</username>
       <password>admin123</password>
    </server>
     <server>
        <id>192.168.30.205:5000</id>
        <username>admin</username>
        <password>admin123</password>
    </server>
<servers>
  1. 在<profiles></profiles>中添加远程仓库的配置信息
<profiles>
    <profile>
      <id>mario-nexus</id>
      <repositories>
          <repository>
            <id>mario nexus repository</id>
            <name>mario nexus repository</name>
            <url>http://192.168.30.205:8081/repository/maven-public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
      </repositories>
    </profile>
</profiles>
  1. 在<activeProfiles></activeProfiles>中激活上面的配置
<activeProfiles>
    <activeProfile>mario-nexus</activeProfile>
</activeProfiles>

配置dockerfile-maven-plugin

  1. 在父pom.xml 中添加docker镜像的仓库地址和nexus的仓库地址
<properties>
    ...
    <docker.repository>192.168.30.206:5000</docker.repository>
</properties>

....
<distributionManagement>
    <repository>
        <id>nexus</id>
        <url>http://192.168.30.205:8081/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>nexus</id>
        <url>http://192.168.30.205:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

2.在discovery中的pom.xml配置镜像信息

<build>
    <plugins>
        ......
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>dockerfile-maven-plugin</artifactId>
            <executions>
                <execution>
                    <id>default</id>
                    <goals>
                        <goal>build</goal>
                        <goal>push</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <repository>${docker.repository}/${project.artifactId}</repository>
                <tag>${project.version}</tag>
                <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
                <buildArgs>
                    <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
                </buildArgs>
            </configuration>
        </plugin>
    </plugins>
</build>

<useMavenSettingsForAuth>true</useMavenSettingsForAuth>会使用settting.xml中的认证信息,通过docker仓库的地址匹配
<buildArgs>可以设置自定义参数,给Dockerfile使用

  1. 编写Dockerfile文件
    在discovery的pom.xml同目录下新建一个Dockerfile文件
FROM openjdk:8-jre-alpine
ARG JAR_FILE
COPY target/${JAR_FILE} discovery.jar
EXPOSE 8761
ENTRYPOINT ["java","-jar","/discovery.jar"]

4.修改discovery,provider-user,provider-order的application.yml中的defaultZone属性,因为在一个宿主机的不同容器间需要通过容器名,并且配置network才能通讯,之间是通过--link,新版本已不再推荐

//defaultZone: http://locahost:8761/eureka/
defaultZone: http://discovery:8761/eureka/

FROM 设置基础镜像,openjdk:8-jre-alpine,一个小的基础jdk镜像,会有时区问题,可以自行修改
ARG 使用pom.xml定义的参数

构建并推送

  1. 为了本地能识别远程docker仓库,还需要将仓库地址配置到本地的insecure-registries列表中
  • linux 在 /etc/docker/ 新建或修改 daemon.json,编辑保存
{
   "insecure-registries":["http://192.168.30.205:5000"]
}

重启docker systemctl restart docker

  • docker桌面版,直接在设置->Daemon中配置后重启
  • image.png
  1. 登录仓库docker login 192.168.30.206:5000,输入用户名和密码
Username: admin
Password: 
Login Succeeded
  1. 在discovery目录下执行mvn clean deploy,插件会自动执行打包,构建,推送
    控制会打印执行过程,比如build
[INFO] Image will be built as 192.168.30.205:5000/discovery:0.0.1-SNAPSHOT
[INFO] 
[INFO] Step 1/5 : FROM openjdk:8-jre-alpine
[INFO] 
[INFO] Pulling from library/openjdk
[INFO] Digest: sha256:e8a689c4b2913f07e401e5e9325d66cecc33d30738aadf1dbe3db5af70997742
[INFO] Status: Image is up to date for openjdk:8-jre-alpine
[INFO]  ---> 2e01f547f003
[INFO] Step 2/5 : ARG JAR_FILE
[INFO] 
[INFO]  ---> Using cache
[INFO]  ---> d3f32052650f
[INFO] Step 3/5 : COPY target/${JAR_FILE} discovery.jar
[INFO] 
[INFO]  ---> cf105f53d1b7
[INFO] Step 4/5 : EXPOSE 8761
[INFO] 
[INFO]  ---> Running in ca9b00054168
[INFO] Removing intermediate container ca9b00054168
[INFO]  ---> 80706e9991d6
[INFO] Step 5/5 : ENTRYPOINT ["java","-jar","/discovery.jar"]
[INFO] 
[INFO]  ---> Running in 099810346b7c
[INFO] Removing intermediate container 099810346b7c
[INFO]  ---> 2010ed4e1fcb
[INFO] Successfully built 2010ed4e1fcb
[INFO] Successfully tagged 192.168.30.205:5000/discovery:0.0.1-SNAPSHOT

push

[INFO] --- dockerfile-maven-plugin:1.4.9:push (default) @ discovery ---
[INFO] The push refers to repository [192.168.30.205:5000/discovery]
[INFO] Image 1d56fe2feaed: Preparing
[INFO] Image 9bca1faaa73e: Preparing
[INFO] Image 0c3170905795: Preparing
[INFO] Image df64d3292fd6: Preparing
[INFO] Image df64d3292fd6: Layer already exists
[INFO] Image 9bca1faaa73e: Layer already exists
[INFO] Image 0c3170905795: Layer already exists
[INFO] Image 1d56fe2feaed: Pushing
[INFO] Image 1d56fe2feaed: Pushed
[INFO] 0.0.1-SNAPSHOT: digest: sha256:0a311489626a96f2ee922cbba3e62bd6161922442c49d5e627399d032bbc314d size: 1159

访问 http://192.168.30.205:8081/,选择docker-hosted,可以看到镜像已经上传成功

  • image.png

其他两个服务provider-user,provider-order 也是类似的操作,最终可以看到三个服务都已上传成功

  • image.png

下一篇 Docker Swarm + SpringCloud(四)docker-compose编排镜像

相关文章

网友评论

    本文标题:Docker Swarm + SpringCloud(三)构建镜

    本文链接:https://www.haomeiwen.com/subject/zqnekqtx.html