1、编写Dockerfile
#基础镜像使用java
FROM java:8
#维护者信息
MAINTAINER sm
#将容器挂载如下目录
VOLUME /tmp
#将jar包添加到容器中并更名为app.jar
ADD cloud-eureka-server7001-1.0-SNAPSHOT.jar app.jar
# 运行jar包
RUN bash -c 'touch /app.jar'
# 时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone \
#声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务
EXPOSE 7001
#容器启动后需要执行的命令
ENTRYPOINT ["java","-Xmx1344M","-Xms1344M","-Xmn448M","-XX:MaxMetaspaceSize=192M","-XX:MetaspaceSize=192M","-Dspring.profiles.active=uat","-jar","/app.jar"]
2、编写脚本
#!/bin/bash
docker stop sm-provider-eureka1
docker rm sm-provider-eureka1
cd $PWD
docker build -t sm-provider-eureka1 .
docker run --name sm-provider-eureka1 -d -p 7001:7001 --privileged=true -v /data/project/background/sm-provider-eureka1/logs:/logs sm-provider-eureka1
docker logs --tail 300 -f sm-provider-eureka1
3、打包
mvn clean package -pl cloud-provider-payment8001 -am
clean:都将清除上一次Maven执行的结果。这意味着他们将删除目标文件夹。
package:命令是编译代码,并将其打包。
install:install会编译和打包,同时也会把这个包放到你的本地仓库中。这将使其他项目可以引用它并从本地存储库中获取它。
-pl : 指定模块
-am: 是向下的。表示同时处理选定模块所依赖的模块。
4、问题
Q1:Docker之WARNING: IPv4 forwarding is disabled. Networking will not work.
vim /etc/sysctl.conf
#配置转发
net.ipv4.ip_forward=1
#重启服务,让配置生效
systemctl restart network
#查看是否成功,如果返回为“net.ipv4.ip_forward = 1”则表示成功
sysctl net.ipv4.ip_forward
Q2:注册中心错误 Request execution error. endpoint=DefaultEndpoint{serviceUrl='http://localhost:8761/eureka/}
如果配置文件使用了 - - - 多环境配置,记得改文件名为bootstrap.yml,而不是application.yml
bootstrap.yml 中配置的是应用启动时所必须的配置信息。
application.yml 中配置的是应用运行过程中所必须的配置信息。
bootstrap.yml 优先于 application.yml 进行加载。
Q3:不能执行jar:“no main manifest attribute”
修改pom.xml
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.3.RELEASE</version>
<configuration>
<fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
5、运行结果