那这些变量是在哪配置的呢?待会儿编写 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 剧本,每次直接运行剧本省时省力。 (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|