本文用于记录Dockerfile中 COPY
指令的常见用法。
COPY
大家可能都知道,是用来将文件复制到容器内的,但是针对不同的文件有不同的用法。
本文目前主要记录了:
bash# 将本地 `./docker/nginx/nginx.conf` 复制到镜像 `/var/lib/nginx` 文件夹内,并命名为 `nginx.conf`
COPY ./docker/nginx/nginx.conf /var/lib/nginx/nginx.conf
# 以下指令有相同效果,指定目标路径并保持文件名不变:
COPY ./docker/nginx/nginx.conf /var/lib/nginx/
bash# 将 `./springboot-0.0.1.jar` 复制并重命名为 `springboot.jar`:
COPY ./springboot-0.0.1.jar /usr/spring/springboot.jar
bash# 将 `./website/dist/` 文件夹内所有文件复制到镜像内的 `/var/lib/nginx/html/website/` 文件夹
COPY ./website/dist/* /var/lib/nginx/html/website/
该指令只会复制所有文件到 /var/lib/nginx/html/website/
文件夹中,包括 ./website/dist/
的子文件夹中的文件,但不会包括子文件夹。
即 ./website/dist/
的子/孙所有文件,都会被复制为 /var/lib/nginx/html/website/
的子文件。
bash# 将 `./website/dist/` 文件夹内所有文件及文件夹复制到镜像内的 `/var/lib/nginx/html/website/` 文件夹
COPY ./website/dist/. /var/lib/nginx/html/website/
该指令与上面【层级解构】的指令仅有一个符号的区别,那就是将 *
改为了 .
。
这样复制会保留原有的文件夹层级,所以该种用法更为常见。
bash# 将 `nginx.conf` 和 `mime.types` 两个文件复制到镜像内 `/var/lib/nginx/` 文件夹中
COPY ./nginx/nginx.conf ./nginx/mime.types /var/lib/nginx/
多个文件用空格隔开。
bash# 将以 `.html` 结尾的文件复制到镜像内 `/var/lib/nginx/html/website/` 文件夹中
COPY *.html /var/lib/nginx/html/website/
以上用法介绍的都是将本地文件复制到Docker镜像内,有些复杂的构建过程,可能会使用过程镜像来规范管理构建流程和文件,这时候通常需要用到从过程镜像中复制文件的操作。
下面是一个简单的示例:
bash# 将一个镜像自定义命名为 `process`,这一般是一个过程镜像
FROM alpine as process
# 从本地复制文件
COPY ./docker/nginx/nginx.conf /var/lib/nginx/
# *** 省略操作 ***
# 这是一个新的镜像
FROM alpine
# 从名为 `process` 的镜像中复制文件 `/var/lib/nginx/nginx.conf` 到当前镜像的 `/app/nginx/` 文件夹中
COPY --from=process /var/lib/nginx/nginx.conf /app/nginx/
以上就是一个简单的、从其他镜像内部复制文件的示例,使用该方式时,一般会用到过程镜像这一技巧,而用到这一技巧时,往往时因为目标镜像的构建过程相对复杂。
简单来讲,该功能与复制本地文件的区别就是多了个参数 --from
。
希望这篇文章能再日常学习和工作中帮到你!
建站因为热爱,生活需要Money,请屏幕前的大佬动动您发财的小手,点击一次以示鼓励,祝您生活愉快!
PS:就目前的访问量,即便每个访客都点一次广告,收入也不足以支付运营成本。
如果看不到广告,可能是网络原因或被拦截了,那就算了吧。再次祝您生活愉快~~
本文作者:DingDangDog
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!