如何将我们的项目在进行打包的时候,自动的推送到docker容器之中,进行一个自动部署,减少部署的成本。
1、依赖的导入
- 第一步:导入需要的插件
<build>
<plugins>
<!-- maven打包插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- 镜像构建、推送插件-->
<plugin>
<!-- Spotify公司开发的Maven插件-->
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<!--执行例如mvn clean package时,插件就自动构建Docker镜像。 要想实现这点,只须将插件的goal绑定在某个phase即可 -->
<executions>
<execution>
<!--就可将插件绑定在package这个phase上。也就是说,用户只须执行mvn clean package,就会自动执行mvn docker:build-->
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<!--覆盖已存在的标签 镜像-->
<forceTags>true</forceTags>
<!--镜像名称:命令规则为artifactId和版本,可以自定义镜像名称, 比如指定镜像名称 仓库/镜像名:标签:xmlee/nacos:0.0.1-->
<imageName>${project.artifactId}:${project.version}</imageName>
<!--使用 Dockerfile,查找Dockfile文件-->
<dockerDirectory>src/main/resources</dockerDirectory>
<!-- 指定Docker仓库地址,需要暴露2375端口, 因为maven docker插件需要通过rest方式调用Docker API进行构建和上传镜像 -->
<dockerHost>http://192.168.200.137:2375</dockerHost>
<resources>
<!-- 指定资源文件 -->
<resource>
<!-- 指定要复制的目录路径,这里是当前目录 -->
<targetPath>/</targetPath>
<!-- 指定要复制的根目录,这里是target目录 -->
<directory>${project.build.directory}</directory>
<!-- 指定需要拷贝的文件,这里指最后生成的jar包 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
<!-- 注意:这里有一个小坑,在JDK1.8的时候是不存在的,我们知道在JDK11之后,移除掉了JDK自带的javax.activation.DataSource类,所以要在此处引入改依赖 -->
<!-- 注意:引入的位置要注意,不要引入到外面 -->
<dependencies>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
2、docker容器端口的暴露
- 端口暴露
// 1、去编辑docker的配置文件
vim /usr/lib/systemd/system/docker.service
// 2、添加如下配置
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
// 3、重新加载docker配置文件,执行以下的配置
// 3.1、加载docker守护线程
systemctl daemon-reload
// 3.2、重庆docker
systemctl restart docker
// 3.3、关闭防火墙,或打开端口
systemctl stop firewalld.service(关闭防火墙)
- 下载基础镜像
// 下载基础镜像,这里下载的是jdk11版本
docker pull openjdk:11
3、DockerFile文件的编写
#指定基础镜像,必须为第一个命令这里使用openjdk的基础镜像
FROM openjdk:11
#MAINTAINER: 维护者信息,这里是维护者是XMLee
MAINTAINER XMLee
#VOLUME:用于指定持久化目录,挂载镜像
VOLUME /XMLee
#将本地文件添加到容器中,这里是从target下复制itheima-service-elasticsearch-1.0.0.RELEASE.jar到根目录
ADD xmlee-service-elasticsearch-1.0.0.RELEASE.jar app.jar
#RUN:构建镜像时执行的命令,这里是设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
EXPOSE 8888
#ENV:设置环境变量
ENV JAVA_OPTS=""
#egd表示收集守护进程;=后面为快速生成随机数
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=pro","-jar","/app.jar"]
4、测试
启动
docker run --name service-elasticsearch --net xmleeNetwork --ip 172.188.0.33 --privileged=true -p 8888:8888 --restart=always -d xfzcode-service-elasticsearch:1.0.0-SNAPSHOT