mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-25 19:25:27 +00:00
Remove blank lines after code block markers
This commit is contained in:
@@ -6,7 +6,6 @@
|
||||
COPY [选项] <源路径>... <目标路径>
|
||||
COPY [选项] ["<源路径1>", "<源路径2>", ... "<目标路径>"]
|
||||
```
|
||||
|
||||
`COPY` 指令将构建上下文中的文件或目录复制到镜像内。
|
||||
|
||||
---
|
||||
@@ -16,7 +15,6 @@ COPY [选项] ["<源路径1>", "<源路径2>", ... "<目标路径>"]
|
||||
#### 复制单个文件
|
||||
|
||||
```docker
|
||||
|
||||
## 复制文件到指定目录
|
||||
|
||||
COPY package.json /app/
|
||||
@@ -25,11 +23,9 @@ COPY package.json /app/
|
||||
|
||||
COPY config.json /app/settings.json
|
||||
```
|
||||
|
||||
#### 复制多个文件
|
||||
|
||||
```docker
|
||||
|
||||
## 复制多个指定文件
|
||||
|
||||
COPY package.json package-lock.json /app/
|
||||
@@ -39,16 +35,13 @@ COPY package.json package-lock.json /app/
|
||||
COPY *.json /app/
|
||||
COPY src/*.js /app/src/
|
||||
```
|
||||
|
||||
#### 复制目录
|
||||
|
||||
```docker
|
||||
|
||||
## 复制整个目录的内容(不是目录本身)
|
||||
|
||||
COPY src/ /app/src/
|
||||
```
|
||||
|
||||
> ⚠️ **注意**:复制目录时,复制的是目录的 **内容**,不包含目录本身。
|
||||
|
||||
```bash
|
||||
@@ -57,7 +50,6 @@ src/ /app/src/
|
||||
├── index.js → ├── index.js
|
||||
└── utils.js └── utils.js
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7.2.3 通配符规则
|
||||
@@ -76,7 +68,6 @@ COPY hom* /mydir/ # home.txt, homework.md 等
|
||||
COPY hom?.txt /mydir/ # home.txt, homy.txt 等
|
||||
COPY app[0-9].js /app/ # app0.js ~ app9.js
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7.2.4 目标路径
|
||||
@@ -86,7 +77,6 @@ COPY app[0-9].js /app/ # app0.js ~ app9.js
|
||||
```docker
|
||||
COPY app.js /usr/src/app/
|
||||
```
|
||||
|
||||
#### 相对路径:基于 WORKDIR
|
||||
|
||||
```docker
|
||||
@@ -94,18 +84,15 @@ WORKDIR /app
|
||||
COPY package.json ./ # 复制到 /app/package.json
|
||||
COPY src/ ./src/ # 复制到 /app/src/
|
||||
```
|
||||
|
||||
#### 自动创建目录
|
||||
|
||||
如果目标目录不存在,Docker 会自动创建:
|
||||
|
||||
```docker
|
||||
|
||||
## /app/config/ 不存在也会自动创建
|
||||
|
||||
COPY settings.json /app/config/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7.2.5 修改文件所有者
|
||||
@@ -113,7 +100,6 @@ COPY settings.json /app/config/
|
||||
使用 `--chown` 选项设置文件的用户和组:
|
||||
|
||||
```docker
|
||||
|
||||
## 使用用户名和组名
|
||||
|
||||
COPY --chown=node:node package.json /app/
|
||||
@@ -126,7 +112,6 @@ COPY --chown=1000:1000 . /app/
|
||||
|
||||
COPY --chown=node . /app/
|
||||
```
|
||||
|
||||
> 💡 结合 `USER` 指令使用,确保应用以非 root 用户运行。
|
||||
|
||||
---
|
||||
@@ -141,12 +126,10 @@ COPY 会保留源文件的元数据:
|
||||
这对于脚本文件特别重要:
|
||||
|
||||
```docker
|
||||
|
||||
## start.sh 的可执行权限会被保留
|
||||
|
||||
COPY start.sh /app/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7.2.7 COPY vs ADD
|
||||
@@ -159,7 +142,6 @@ COPY start.sh /app/
|
||||
| 推荐程度 | ✅ **推荐** | ⚠️ 特殊场景使用 |
|
||||
|
||||
```docker
|
||||
|
||||
## 推荐:使用 COPY
|
||||
|
||||
COPY app.tar.gz /app/
|
||||
@@ -169,7 +151,6 @@ RUN tar -xzf /app/app.tar.gz
|
||||
|
||||
ADD app.tar.gz /app/
|
||||
```
|
||||
|
||||
> 笔者建议:除非需要自动解压 tar 文件,否则始终使用 COPY。明确的行为比隐式的魔法更好。
|
||||
|
||||
---
|
||||
@@ -179,7 +160,6 @@ ADD app.tar.gz /app/
|
||||
#### 从其他构建阶段复制
|
||||
|
||||
```docker
|
||||
|
||||
## 构建阶段
|
||||
|
||||
FROM node:20 AS builder
|
||||
@@ -194,16 +174,13 @@ RUN npm run build
|
||||
FROM nginx:alpine
|
||||
COPY --from=builder /app/dist /usr/share/nginx/html
|
||||
```
|
||||
|
||||
#### 使用 --link 优化缓存
|
||||
|
||||
```docker
|
||||
|
||||
## 使用 --link 后,文件以独立层添加,不依赖前序指令
|
||||
|
||||
COPY --link --from=builder /app/dist /usr/share/nginx/html
|
||||
```
|
||||
|
||||
`--link` 的优势:
|
||||
|
||||
- 更高效利用构建缓存
|
||||
@@ -217,7 +194,6 @@ COPY --link --from=builder /app/dist /usr/share/nginx/html
|
||||
使用 `.dockerignore` 排除不需要复制的文件:
|
||||
|
||||
```text
|
||||
|
||||
## .dockerignore
|
||||
|
||||
node_modules
|
||||
@@ -227,7 +203,6 @@ node_modules
|
||||
Dockerfile
|
||||
.dockerignore
|
||||
```
|
||||
|
||||
这可以:
|
||||
|
||||
- 减小构建上下文大小
|
||||
@@ -241,7 +216,6 @@ Dockerfile
|
||||
#### 1. 利用缓存,先复制依赖文件
|
||||
|
||||
```docker
|
||||
|
||||
## ✅ 好:先复制依赖定义,再安装,最后复制代码
|
||||
|
||||
COPY package.json package-lock.json ./
|
||||
@@ -253,11 +227,9 @@ COPY . .
|
||||
COPY . .
|
||||
RUN npm install
|
||||
```
|
||||
|
||||
#### 2. 使用 .dockerignore
|
||||
|
||||
```docker
|
||||
|
||||
## 确保 node_modules 不被复制
|
||||
|
||||
COPY . .
|
||||
@@ -266,11 +238,9 @@ COPY . .
|
||||
|
||||
...
|
||||
```
|
||||
|
||||
#### 3. 明确复制路径
|
||||
|
||||
```docker
|
||||
|
||||
## ✅ 好:明确的路径
|
||||
|
||||
COPY src/ /app/src/
|
||||
@@ -280,7 +250,6 @@ COPY package.json /app/
|
||||
|
||||
COPY . .
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
> **🔥 踩坑实录**
|
||||
|
||||
Reference in New Issue
Block a user