IDEA远程快速部署SpringBoot项目到Docker环境

一:基础准备

1.首先在linux服务器安装Docker环境,具体安装步骤及Docker使用参考官网或网络资料(这里重点是快速部署项目到Docker环境)

2.配置Docker远程连接端口

1.vim /usr/lib/systemd/system/docker.service
2.找到ExecStar 在后面添加 -H tcp://0.0.0.0:2375

3.重启Docker

 systemctl daemon-reload
 systemctl start docker

4.如果防火墙已经打开则需要开放2375端口

firewall-cmd --zone=public --add-port=2375/tcp --permanent

5.Idea安装Docker插件并配置连接Docker

  

 6.连接成功会列出远程的容器和镜像,并且可以直接右键快速启动、关闭、删除容器或镜像

 二:构建Springboot项目

1.pom文件在plugin添加docker-maven-plugin、maven-antrun-plugin插件

<build>
        <finalName>study-demo</finalName>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>application.properties</include>
                    <include>**/*.xml</include>
                    <include>**/*.json</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <filtering>true</filtering>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
        <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>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <configuration>
                            <tasks>
                                <copy todir="src/main/docker" file="target/${project.build.finalName}.${project.packaging}"></copy>
                            </tasks>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

 2.在src/main目录下创建docker目录,并创建Dockerfile文件

这里给出了一个Dockerfile几个重要指令比较详细的参考说明

FROM java:8

#维护者信息
MAINTAINER boris@email.com

#添加元数据到镜像,LABEL是以键值对形式
LABEL maintainer="bo.zou <boris@email.com>"
LABEL copyright="2015 ~ 2020 www.boris.com Inc. All rights reserved."
LABEL version="1.0.0"
LABEL declaration="Boris Test Dockerfile"

#ENV设置环境变量 timezone
ENV TIMEZONE Asia/Shanghai

#设置容器的工作目录
# WORKDIR
#RUN指令:用于指定 docker build 过程中要运行的命令
RUN mkdir /usr/local/boris
WORKDIR /usr/local/boris

#复制指令,从上下文目录中复制文件或者目录到容器里指定路径
#ADD 指令和 COPY 的使用格式一致(同样需求下,官方推荐使用 COPY)
#将jar包添加到容器中并更名为app.jar
COPY *.jar /usr/local/boris/app.jar

#定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。
#可以在镜像中创建挂载点,只要通过该镜像创建的容器都有了挂载点
#作用是和docker run命令的-v是一样,将宿主机和容器的目录做映射
#区别是:通过 VOLUME 指令创建的挂载点,无法指定宿主机上对应的目录,是自动生成的。可以通过查看容器的信息查看到,例:docker inspect 容器ID
#VOLUME ["/usr/local/boris/dockerlog"]

###声明启动端口号
EXPOSE 8080

#CMD 和 ENTRYPOINT 在docker run 时运行(启动容器时执行),主要用来指定容器默认执行的命令.
#CMD作用:当Docker镜像被启动后Docker容器将会默认执行的命令,CMD 指令指定的程序会被 docker run 命令行参数中指定要运行的程序所覆盖
#ENTRYPOINT作用:类似于 CMD 指令,区别在于不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序
#一个Dockerfile中只能有一个CMD或ENTRYPOINT命令,多个仅最后一个生效。多数情况下它们应该是单独使用的。
#配合使用时:
#• 如果 ENTRYPOINT 使用了 shell 模式,CMD 指令会被忽略。
#• 如果 ENTRYPOINT 使用了 exec 模式,CMD 指定的内容被追加为 ENTRYPOINT 指定命令的参数。
#• 如果 ENTRYPOINT 使用了 exec 模式,CMD 也应该使用 exec 模式。
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]

3.创建springboot项目controller和启动类做测试

 

4.增加配置

说明:

Dockerfile:指定你的Dockerfile文件 

Image tag : 指定镜像名称和tag,冒号分隔

Bind ports : 绑定宿主机端口到容器内部端口。格式为[宿主机端口]:[容器内部端口]

Bind mounts : 将宿主机目录挂到到容器内部目录中。格式为[宿主机目录]:[容器内部目录]

Contaner name:取一个容器名称,不填默认会随机生成一个名称

5.打包并运行

 6.成功,可以看到创建的容器和镜像并且运行成功

 

 

 

 

结束,EDN。

posted on 2020-08-20 14:53  Boris丶et  阅读(860)  评论(0编辑  收藏  举报