关于Dockerfile的ADD命令

本文详细解析了Dockerfile中的ADD指令用法,包括如何使用ADD指令来添加文件及文件夹到镜像中,并强调了镜像中需存在同名文件夹才能成功添加。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

添加文件

例如:

ADD my.cnf /etc/mysql
ADD my.cnf /etc/mysql/

以上两条命令均可以将my.cnf文件添加到/etc/mysql文件夹下面。

添加文件夹

Dockerfile添加文件夹,则必须镜像中存在和当前文件夹同名的文件夹才行。例如,我希望将当前目录下的views文件夹添加到docker镜像中的app文件夹下。也许你会采用这样的方式:

ADD views /app

这样其实并不能实现,应该通过下面的方式:

ADD views /app/views

也就是说:镜像中存在和当前需要拷贝或添加的文件夹同名的文件夹时,才能够拷贝或添加成功。

### Dockerfile 构建命令教程及常用指令详解 #### 一、Dockerfile 基本概念 Dockerfile 是一个文本文件,包含了构建 Docker 镜像所需的一系列指令。它从基础镜像开始,通过添加文件、运行命令、设置环境变量等步骤,最终构建出一个完整的镜像[^4]。 #### 二、常见指令解析 ##### 1. `FROM` 指令 `FROM` 指令用于指定基础镜像。这是任何 Dockerfile 中的第一条指令,因为所有的操作都基于这个基础镜像之上。 ```dockerfile FROM ubuntu:latest ``` ##### 2. `RUN` 指令 `RUN` 指令用于执行命令。这些命令会在当前层的基础上创建新的层,并记录下所作的操作。 ```dockerfile RUN apt-get update && apt-get install -y curl ``` ##### 3. `COPY` 和 `ADD` 指令 这两个指令都可以用来向镜像中复制文件或目录。区别在于 `ADD` 还支持自动解压 tar 文件并可以从 URL 下载资源。 ```dockerfile COPY . /app/ # 或者 ADD file.tar.gz / ``` ##### 4. `CMD` 和 `ENTRYPOINT` 指令 两者均定义了容器启动时要执行的命令,但行为有所不同。`CMD` 提供默认参数;如果提供了其他参数,则会覆盖它们。而 `ENTRYPOINT` 则更固定一些,默认不会被替换掉。 ```dockerfile CMD ["echo", "Hello world"] ENTRYPOINT ["java", "-jar", "/app/myapp.jar"] ``` ##### 5. `EXPOSE` 指令 告知外界此服务将会监听哪个端口,但这并不意味着防火墙会被打开或者实际暴露给外部网络。 ```dockerfile EXPOSE 8080 ``` ##### 6. `ENV` 指令 设定环境变量,在后续阶段可以引用这些变量来简化配置过程。 ```dockerfile ENV APP_HOME=/usr/src/app \ PORT=3000 WORKDIR $APP_HOME ``` #### 三、构建镜像流程 完成上述指令编写之后,可以通过如下方式构建镜像: ```bash $ docker build -t my-image-name . ``` 这行命令告诉 Docker 使用当前目录下的 Dockerfile 来构建名为 `my-image-name` 的新镜像。 #### 四、最佳实践建议 为了提高效率和安全性,应该遵循某些原则,比如尽量减少层数(即减少不必要的 RUN)、利用缓存加速下载依赖项等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kiloveyousmile

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值