Dockerfile中COPY常见用法
## 简介 本文用于记录Dockerfile中 `COPY` 指令的常见用法。 `COPY`大家可能
渲染中...
## 简介 本文用于记录Dockerfile中 `COPY` 指令的常见用法。 `COPY`大家可能都知道,是用来将文件复制到容器内的,但是针对不同的文件有不同的用法。 本文目前主要记录了: - 单文件复制 - 文件夹复制 - 多文件复制 - 镜像文件复制 <!-- more --> ## 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/ ``` ## COPY单文件并重命名 ```bash # 将 `./springboot-0.0.1.jar` 复制并重命名为 `springboot.jar`: COPY ./springboot-0.0.1.jar /usr/spring/springboot.jar ``` ## COPY文件夹 ### 层级解构 ```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/ ``` 该指令与上面【层级解构】的指令仅有一个符号的区别,那就是将 `*` 改为了 `.`。 这样复制会保留原有的文件夹层级,所以该种用法更为常见。 ## COPY多文件 ### 文件名指定 ```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`。** 希望这篇文章能再日常学习和工作中帮到你! ## 赞助请求V3 **建站因为热爱,生活需要Money,请屏幕前的大佬动动您发财的小手,点击一次以示鼓励,祝您生活愉快!** <!-- 文章内嵌广告位 --> <div class="article-ads"></div> > PS:就目前的访问量,即便每个访客都点一次广告,收入也不足以支付运营成本。`如果看不到广告,可能是网络原因或被拦截了,那就算了吧。再次祝您生活愉快~~`
END
评论
登录后查看和发表评论
前往登录