一:基础准备
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。
