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 .
其中.代表当前目录