文件复制和目录操作
原创大约 2 分钟
COPY和ADD
往镜像里复制文件有两种方式:COPY
和ADD
。
COPY
和ADD
都可以把local
的一个文件复制到镜像里,且如果目标目录不存在的话,它会自动创建。
以COPY
命令为例。
FROM python:3.9.5-alpine3.13
COPY hello.py /app/hello.py
执行命令。
> docker build -f Dockerfile-copy -t hello-copy .
执行后进入容器。
> docker run -it --rm hello-copy sh
在容器中执行。
/> cd app
/> ls
hello.py
它会把hello.py
文件复制到Docker的/app
目录下,如果/app
这个文件夹不存在,则会自动创建。
而且hello.py
文件的相关权限也会被保留到容器中。
再来看ADD
命令。
FROM python:3.9.5-alpine3.13
ADD hello.tar.gz /app/
执行命令。
> docker build -f Dockerfile-add -t hello-add .
执行后进入容器:
docker run -it --rm hello-add sh
在容器中执行。
/> cd app
/> ls
hello.py
它会把hello.tar.gz
文件复制到Docker的/app
目录下,如果/app
这个文件夹不存在,则会自动创建,而且它会把hello.tar.gz
文件在/app
目录中自动解压缩。
hello.py
文件的相关权限同样也会被保留到容器中。
所以COPY
和ADD
之间的区别如下。
COPY
用于复制普通文件。ADD
用于复制压缩文件,且会自动解压缩。
可以遵循这样的原则。
所有的文件复制均使用
COPY
指令。仅在需要自动解压缩的场合使用
ADD
。
WORKDIR
目录变更命令为WORKDIR
。
它会在进入容器时自动进入WORKDIR
指定的目录,类似于执行了一次cd
命令。
FROM python:3.9.5-alpine3.13
WORKDIR /app
COPY hello.py hello.py
执行命令。
> docker build -f Dockerfile-work -t hello-work .
执行后进入容器。
> docker run -it --rm hello-work sh
在容器中执行。
/app> ls
hello.py
这时候就不需要在COPY
指令中指明/app
目录了。
感谢支持
更多内容,请移步《超级个体》。