如何将我们的项目在进行打包的时候,自动的推送到docker容器之中,进行一个自动部署,减少部署的成本。

1、依赖的导入

  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. 端口暴露
// 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(关闭防火墙)

Desktop Docker 部署 docker方式部署_jar


Desktop Docker 部署 docker方式部署_运维_02


Desktop Docker 部署 docker方式部署_docker_03

  1. 下载基础镜像
// 下载基础镜像,这里下载的是jdk11版本
	docker pull openjdk:11

Desktop Docker 部署 docker方式部署_Desktop Docker 部署_04


Desktop Docker 部署 docker方式部署_jar_05

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、测试

Desktop Docker 部署 docker方式部署_容器_06


Desktop Docker 部署 docker方式部署_jar_07

启动
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