| 
                         那这些变量是在哪设置的呢?待会儿编写 Dockerfile 的时候就可以看到,会在 Dockerfile 里设置这几个变量为环境变量,当启动 Docker  容器的时候,程序就会读取到 Dockerfile 中设置的值并应用到项目中。 
编写Dockerfile
下面是 education 模块的 Dockerfile: 
- FROM java:8 
 - VOLUME /tmp 
 - ADD education.jar app.jar 
 - RUN bash -c 'touch /app.jar' 
 -  
 - ENV SPRING-CLOUD-EUREKA-ZONE http://123.456.789.10:8761/eureka/ 
 - ENV SPRING-CLOUD-MYSQL-HOST 123.456.789.10 
 - ENV SPRING-CLOUD-DB-NAME edu 
 - ENV SPRING-CLOUD-RABBIT-MQ-HOST 123.456.789.10 
 - ENV SPRING-CLOUD-REDIS-HOST 123.456.789.10 
 -  
 - ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] 
 - EXPOSE 8899 
 
  
简单的解释下每句话的作用: 
    - FROM java:8:指定基础镜像,必须为第一个命令
 
    - VOLUME /tmp:用于指定持久化目录
 
    - ADD education.jar app.jar:将本地文件 education.jar 添加到容器中并命名为 app.jar。注意这里的  education.jar 要换成你自己项目打包出来的 jar 包名字,如果你打的包名字叫 abc.jar,那应该这么写:ADD abc.jar  app.jar。
 
    - RUN bash -c 'touch /app.jar':在镜像容器中执行的命令,运行 jar 包。
 
    - ENV:这几行以 ENV 开头的是设置环境变量,还记得上面 application-pro.yml 文件里的那几个 ${}  变量吗?就是在这里设置的。把该填地址的地方都换成这台服务器的公网 IP 地址,本配置假设你服务器的地址是 123.456.789.10  ,用的时候把这个地址换成你自己服务器地址即可。
 
    - ENTRYPOINT:配置容器,使其可执行化。
 
    - EXPOSE 8899:对外暴露 8899 端口。这个端口要和项目的配置文件中 server.port 设置的端口一致。
 
 
总结一下,Dockerfile 文件你要改的,只有三个地方: 
    - 第三行 education.jar 换成你打包出来的 jar 包名字
 
    - ENV 开头的环境变量自己根据 application-pro.yml 的配置进行设置
 
    - 最后一行 EXPOSE 8899 改成你项目的端口号
 
 
再贴一个模块的 Dockerfile 作对比: 
- FROM java:8 
 - VOLUME /tmp 
 - ADD gateway.jar app.jar 
 - RUN bash -c 'touch /app.jar' 
 -  
 - ENV SPRING-CLOUD-EUREKA-ZONE http://123.456.789.10:8761/eureka/ 
 - ENV SPRING-CLOUD-REDIS-HOST 123.456.789.10 
 -  
 - ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] 
 - EXPOSE 8888 
 
  
按照这种方法,把每个需要打包的微服务项目的 Dockerfile 写好。 
打包
配置好三个 applicaiton.yml 和 Dockerfile(其实打包这一步用不到  Dockerfile),在项目的根目录下执行以下命令打包: 
- mvn clean package -Dmaven.test.skip=true 
 
  
看到控制台输出 SUCCESS 则打包成功: 
  
打完的包在项目目录/target 里,如图: 
  
检查一下 jar 包的大小,如果是好几十 M 就没啥问题,如果是几百 K 那就是打包配置有问题,检查 pom.xml 文件的  标签配置是否正确。 
附 <build>配置: 
- <build> 
 - <plugins> 
 -   <plugin> 
 -     <groupId>org.springframework.boot</groupId> 
 -     <artifactId>spring-boot-maven-plugin</artifactId> 
 -     <executions> 
 -       <execution> 
 -         <goals> 
 -           <goal>repackage</goal> 
 -         </goals> 
 -       </execution> 
 -     </executions> 
 -   </plugin> 
 -   <plugin> 
 -     <groupId>org.springframework.boot</groupId> 
 -     <artifactId>spring-boot-maven-plugin</artifactId> 
 -   </plugin> 
 - </plugins> 
 - <finalName>education</finalName> 
 - </build> 
 
  
编写自动化脚本
写完 Dockerfile 文件还要执行命令打包成 image 镜像,还需要运行起容器,两行代码虽然不多但每次写还是麻烦,把它封装成一个 sh  脚本,每次直接运行脚本省时省力。                         (编辑:泰州站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |