EXPOSE $PORT
**注意点**
#### ADD 和COPY 的区别
COPY 和 ADD 都是用于将文件从主机复制到 Docker 容器内部的命令,但它们之间有一些区别:
1. COPY 命令只能复制本地主机上的文件或目录到容器内部,不能从 URL 或者其他网络资源复制文件。而 ADD 命令可以从本地主机、URL
或者其他网络资源复制文件。
2. ADD 命令支持自动解压缩 tar 类型的文件(如压缩文件
.tar、.tar.gz、.tar.bz2、.tar.xz),并将解压后的内容复制到容器内。而 COPY
命令则只是简单地复制文件,不会自动解压缩。
3. 由于 ADD 命令的功能更多,因此在复制文件时,建议优先使用 COPY 命令,除非需要 ADD 的特殊功能。
#### CMD 和 ENTRYPOINT的区别
**CMD 指令**:
* CMD 用于指定容器启动时要执行的命令。
* 可以有多个 CMD 指令,但只有最后一个生效。
* 如果 Dockerfile 中没有 CMD 指令,则默认会执行容器启动时所用的镜像的 CMD 命令。
* CMD 指令可以被 Docker run 命令中的参数覆盖。
**ENTRYPOINT 指令**:
* ENTRYPOINT 用于指定容器启动时要执行的可执行文件或脚本。
只需要运行该镜像,就会自动执行 ENTRYPOINT 指定的命令
* 如果 Dockerfile 中存在多个 ENTRYPOINT 指令,则只有最后一个生效。
* 在运行容器时,可以通过在 docker run 命令中指定参数来覆盖 ENTRYPOINT 中的内容。
* 如果 Dockerfile 中同时存在 ENTRYPOINT 和 CMD 指令,则 CMD 的内容会被作为参数传递给 ENTRYPOINT
所指定的可执行文件或脚本。
### 3、构建java项目镜像
docker build [OPTIONS] PATH | URL | -
其中,PATH 可以是本地文件系统上 Dockerfile 文件所在的路径,也可以是 URL,或者是 -(表示使用标准输入)。OPTIONS 是一些可选参数,常用的参数包括:
* -t, --tag:为镜像设置一个标签,格式为 :。例如,-t myimage:1.0。
* -f, --file:指定要使用的 Dockerfile 文件的路径。如果不指定,默认为当前目录下的 Dockerfile 文件。
* 其他选项包括 --build-arg、–pull、–no-cache 等,可以根据需要进行设置。
例如,如果 Dockerfile 文件位于当前目录下,可以使用以下命令构建镜像并设置标签:
docker build -t spring-boot:1.0 .
上传dockerfile和spring-boot-admin jar到对应路径/data/java/spring-boot下
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/fcaa6b5a3b234a458ad37fc2c5544569.png)
#### 构建镜像
docker build -t spring-boot:1.0
#### Build的路径问题
经常会遇到如下报错:
COPY failed: stat xxxx: no such file or directory
**1、Dockerfile 文件查找不到**
如果dockerfile不在当前目录,则需要指定dockerfile 目录构建
docker build -f “/data/java/spring-boot/Dockerfile” -t spring-boot:1.0
**2、Copy /spring-boot-admin.jar文件找不到的问题**
**COPY 命令中指定的源路径应该是相对于 Dockerfile 的路径**。
* 如果 spring-boot-admin.jar 文件位于与 Dockerfile 同级的目录下,应该将 COPY 命令修改为:
COPY spring-boot-admin.jar /spring-admin.jar
* 如果 spring-boot-admin.jar 文件位于 Dockerfile 的上级目录中,可以使用 … 来指定父级目录
COPY …/spring-boot-admin.jar /spring-admin.jar
* PS:一开始把COPY 的路径设置成了/data/java/spring-boot/spring-boot-admin.jar一直找不到,报错:
*
failed to walk /var/lib/docker/tmp/buildkit-mount2576932656/data/java/spring-boot: lstat /var/lib/docker/tmp/buildkit-mount2576932656/data/java/spring-boot: no such file or directory
#### 查看已经构建成功的镜像
docker images
### 4、生成容器
* 执行命令
docker run -p 6088:6088 --name springboot --restart always \
-d spring-boot:1.0
查看项目启动日志,启动成功
docker log 容器id
#动态更细查看日志
docker log -f 容器id
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/0722639375a04056a5f27fa3a4182a2b.png)
### 5、docker 应用日志映射到本地
**进入容器里面查看日志**
#查看对应容器id
docker ps
#进入容器
docker exec -it container_id bash
#如果没装对应的bash命令,使用sh进入
docker exec -it container_id sh
#查看目录
ls
#退出容器
exit
#**进入logback配置的输出log地址,查看日志文件**![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/0855f0c665ff48e5bfe37ce192b37e0d.png)
#停止容器
docker stop id
#删除容器
docker rm id
#重新生成挂在日志到本地目录的容器
docker run -p 6088:6088 --name spring-boot --restart always
-v /home/spring-boot/logs:/home/spring-boot/logs \
最后的话
最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
资料预览
给大家整理的视频资料:
给大家整理的电子书资料:
如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
*
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!