1.修改docker配置文件,开启远程连接
vim  /usr/lib/systemd/system/docker.service
在ExecStart参数后追加 -H tcp://0.0.0.0:2375
即:ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
然后在防火墙中打开2375端口
2.重启docker服务
systemctl daemon-reload
systemctl restart docker.service
systemctl start docker
3.测试是否开启远程连接

​ 在浏览器输入docker宿主机的ip地址加2375端口测试是否返回json数据,若返回则连接成功

例如:
	url: http://172.31.144.211:2375/
	结果: 
	{
    	"message": "page not found"
	}
3.idea中配置docker连接

在 '设置' -> '构建、执行、部署' -> 'docker'中 勾选 'tcp嵌套字' 在url中输入 'tcp://172.31.144.211:2375',下边显示连接成功即可

4.通过maven打包插件来部署
	 <!--springboot打包配置-->

	<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!--制作docker镜像的maven插件-->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.2.2</version>
                <executions>
                    <execution>
                        <id>build-image</id>
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <imageName>${project.artifactId}</imageName><!--镜像名,注意:这里的镜像名一定要小写,如果你的应用名字是大写会报错的-->
                    <imageTags>
                        <imageTag>latest</imageTag>
                    </imageTags>
                    <dockerDirectory>${project.basedir}</dockerDirectory><!--Dockerfile所在的目录-->
                    <dockerHost>http://172.31.144.211:2375/</dockerHost><!--docker所在的宿主机地址,或者填写http://yourip:2375-->
                    <resources>
                        <resource><!--这里配置的就是打包后jar所在的位置-->
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory><!--构建的class文件路径 一般是target-->
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
    </build>
   

然后执行 'mvn package'命令即可在远程docker中生成镜像

5.通过编写Dockerfile文件来部署

编写Dockerfile文件来生成docker镜像

FROM:指定基础镜像
MAINTAINER:镜像维护者姓名及邮箱地址
RUN:容器构建时需要运行的命令
EXPOSE:当前容器对外暴露的端口号
WORKDIR:指定在创建容器后,终端默认登录进来的工作目录
ENV:用来在构建镜像过程中设置环境变量
ADD:将宿主机目录下的文件拷贝进镜像,ADD命令会自动处理URL和解压tar压缩包
COPY:拷贝文件、目录到镜像中。具体是将从构建上下文目录中<src原路径>的文件或目录复制到新一层镜像的<目标路径>位置 ,有两种写法:COPY src dest 或者 COPY ["src", "dest"]
VOLUME:容器数据卷,用于数据保存和持久化工作
CMD:指定一个容器启动时要运行的命令
注意DockerFile中可以有多个CMD指令,但只有最后一个在启动时生效,CMD会被 docker run 之后的命令或参数覆盖
CMD指令的格式和RUN相似,也是两种格式:
shell格式:CMD <命令>
exec格式:CMD ["可执行文件", "参数1", "参数2" ...]
参数列表格式:CMD ["参数1", "参数2", ...],在指定了ENTRYPOINT 指令后,用CMD指定具体的参数。
ENTRYPOINT:指定一个容器启动时要运行的命令,与CMD一样都是在指定容器启动程序及参数(下面通过实例2将他们的区别)。
ONBUILD:当构建一个被继承的DockerFile时运行命令, 父镜像在被子镜像继承后,父镜像的ONBUILD被触发。

[实例]

# 该镜像需要依赖的基础镜像
FROM openjdk:17
# 将当前目录下的jar包复制到docker容器的/目录下,并且将名字改成bingbaihanjifistspringbootapplication.jar
ADD springbootproject-0.0.1-SNAPSHOT.jar /bingbaihanjifistspringbootapplication.jar
# 运行过程中创建一个mall-tiny-docker-file.jar文件
RUN bash -c 'touch /bingbaihanjifistspringbootapplication.jar'
# 声明服务运行在8080端口
EXPOSE 8080
# 指定docker容器启动时运行jar包
ENTRYPOINT ["sh", "-c", "java -jar bingbaihanjifistspringbootapplication.jar"]
# 指定维护者的名字
MAINTAINER bingbaihanij

编写完Dockerfile后通过docker build 命令生成docker镜像

docker build [OPTIONS] PATH | URL | -

OPTIONS说明:
--build-arg=[] :设置镜像创建时的变量;
--cpu-shares :设置 cpu 使用权重;
--cpu-period :限制 CPU CFS周期;
--cpu-quota :限制 CPU CFS配额;
--cpuset-cpus :指定使用的CPU id;
--cpuset-mems :指定使用的内存 id;
--disable-content-trust :忽略校验,默认开启;
-f :指定要使用的Dockerfile路径;
--force-rm :设置镜像过程中删除中间容器;
--isolation :使用容器隔离技术;
--label=[] :设置镜像使用的元数据;
-m :设置内存最大值;
--memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;
--no-cache :创建镜像的过程不使用缓存;
--pull :尝试去更新镜像的新版本;
--quiet, -q :安静模式,成功后只输出镜像 ID;
--rm :设置镜像成功后删除中间容器;
--shm-size :设置/dev/shm的大小,默认值是64M;
--ulimit :Ulimit配置。
--squash :将 Dockerfile 中所有的操作压缩为一层。
--tag, -t: 镜像的名字及标签(要小写),通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
--network: 默认 default。在构建期间设置RUN指令的网络模式

[实例]
在Dockerfile目录下执行
docker build -t springbootproject:0.1 .
其中.代表当前目录

人生不作安期生,醉入东海骑长鲸