使用Dockerfile打包java项目生成镜像部署到Linux_java项目打docker镜像的dockerfile

本文详细解释了Docker中的COPY与ADD命令的区别,以及CMD和ENTRYPOINT指令的作用。还介绍了如何构建Java项目镜像、处理COPY命令路径问题和管理容器日志。
摘要由CSDN通过智能技术生成

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行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以为你提供一个示例Dockerfile文件,你可以根据你的项目需求修改它:FROM node:14.4.0-alpineRUN mkdir -p /usr/src/appWORKDIR /usr/src/appCOPY package.json /usr/src/appRUN npm installCOPY . /usr/src/appEXPOSE 8080CMD ["npm", "run", "build"]CMD ["npm", "run", "serve"] ### 回答2: 可以通过下面的方式来创建一个可以将Vue项目打包Docker镜像Dockerfile文件。 首先,你需要在你的项目根目录下创建一个名为"Dockerfile"的文件。然后,在该文件中添加以下代码: ``` # 使用node镜像作为基础镜像 FROM node:14-alpine # 设置工作目录 WORKDIR /app # 将package.json和package-lock.json复制到工作目录 COPY package*.json ./ # 安装项目依赖 RUN npm install # 将项目文件复制到工作目录 COPY . . # 构建生产版本 RUN npm run build # 运行自定义命令 CMD ["npm", "run", "start"] ``` 以上的Dockerfile使用Node.js作为基础镜像,并将工作目录设置为/app。然后,它会将项目的package.json和package-lock.json复制到工作目录,并运行npm install安装依赖。接下来,它会将整个项目复制到工作目录,并使用npm run build构建生产版本。最后,使用CMD命令启动项目。 在完成以上步骤后,你可以使用以下命令来构建你的Docker镜像: ``` docker build -t <镜像名称> . ``` 这将会在当前目录下的Dockerfile文件中创建一个镜像。 当镜像构建完成后,你可以使用以下命令来运行镜像: ``` docker run -p <主机端口>:<容器端口> <镜像名称> ``` 其中,主机端口是你想要将vue项目映射到的端口号,容器端口是你在vue项目使用的端口号。 希望这个回答对你有帮助。如果你有任何其他问题,请随时提问! ### 回答3: 以下是一个简单的Dockerfile文件示例,可以将Vue项目打包Docker镜像: ```Dockerfile # 基于Node.js镜像 FROM node:14-alpine # 指定工作目录 WORKDIR /app # 复制package.json和package-lock.json文件 COPY package*.json ./ # 安装依赖 RUN npm install # 复制项目文件 COPY . . # 构建Vue项目 RUN npm run build # 暴露容器端口 EXPOSE 80 # 启动命令 CMD ["npm", "run", "serve"] ``` 在上面的示例中,Dockerfile首先基于Node.js的14-alpine版本镜像作为基础镜像。然后设置工作目录为`/app`,并将项目中的`package.json`和`package-lock.json`文件复制到容器中。 接下来,运行`npm install`命令安装项目的依赖。然后使用`COPY . .`命令将整个项目复制到容器中。 接着,运行`npm run build`命令构建Vue项目。根据项目的配置,此命令会生成静态文件。 最后,使用`EXPOSE`命令指定容器内部服务的端口号,并通过`CMD`命令运行`npm run serve`命令来启动Vue项目。 你可以将这个Dockerfile文件与你的Vue项目放在同一个目录下,然后使用`docker build`命令根据该Dockerfile构建Docker镜像

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值