Fix and update

This commit is contained in:
baohua
2026-02-09 11:34:35 -08:00
parent e669ee0fe8
commit 63377d0431
136 changed files with 2146 additions and 262 deletions

View File

@@ -2,6 +2,8 @@
### 基本语法
具体内容如下
```docker
COPY [选项] <源路径>... <目标路径>
COPY [选项] ["<源路径1>", "<源路径2>", ... "<目标路径>"]
@@ -15,29 +17,40 @@ COPY [选项] ["<源路径1>", "<源路径2>", ... "<目标路径>"]
#### 复制单个文件
具体内容如下
```docker
## 复制文件到指定目录
COPY package.json /app/
## 复制文件并重命名
COPY config.json /app/settings.json
```
#### 复制多个文件
具体内容如下
```docker
## 复制多个指定文件
COPY package.json package-lock.json /app/
## 使用通配符
COPY *.json /app/
COPY src/*.js /app/src/
```
#### 复制目录
具体内容如下
```docker
## 复制整个目录的内容(不是目录本身)
COPY src/ /app/src/
```
@@ -75,12 +88,16 @@ COPY app[0-9].js /app/ # app0.js ~ app9.js
#### 绝对路径
具体内容如下
```docker
COPY app.js /usr/src/app/
```
#### 相对路径基于 WORKDIR
具体内容如下
```docker
WORKDIR /app
COPY package.json ./ # 复制到 /app/package.json
@@ -93,6 +110,7 @@ COPY src/ ./src/ # 复制到 /app/src/
```docker
## /app/config/ 不存在也会自动创建
COPY settings.json /app/config/
```
@@ -104,12 +122,15 @@ COPY settings.json /app/config/
```docker
## 使用用户名和组名
COPY --chown=node:node package.json /app/
## 使用 UID 和 GID
COPY --chown=1000:1000 . /app/
## 只指定用户
COPY --chown=node . /app/
```
@@ -127,6 +148,7 @@ COPY 会保留源文件的元数据:
```docker
## start.sh 的可执行权限会被保留
COPY start.sh /app/
```
@@ -143,10 +165,12 @@ COPY start.sh /app/
```docker
## 推荐:使用 COPY
COPY app.tar.gz /app/
RUN tar -xzf /app/app.tar.gz
## ADD 会自动解压(行为不明显,不推荐)
ADD app.tar.gz /app/
```
@@ -158,8 +182,11 @@ ADD app.tar.gz /app/
#### 从其他构建阶段复制
具体内容如下
```docker
## 构建阶段
FROM node:20 AS builder
WORKDIR /app
COPY package*.json ./
@@ -168,14 +195,18 @@ COPY . .
RUN npm run build
## 生产阶段
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
```
#### 使用 --link 优化缓存BuildKit
具体内容如下
```docker
## 使用 --link 后,文件以独立层添加,不依赖前序指令
COPY --link --from=builder /app/dist /usr/share/nginx/html
```
@@ -192,6 +223,7 @@ COPY --link --from=builder /app/dist /usr/share/nginx/html
```gitignore
## .dockerignore
node_modules
.git
.env
@@ -211,33 +243,47 @@ Dockerfile
#### 1. 利用缓存先复制依赖文件
具体内容如下
```docker
## ✅ 好:先复制依赖定义,再安装,最后复制代码
COPY package.json package-lock.json ./
RUN npm install
COPY . .
## ❌ 差:一次性复制所有文件,代码变更会导致重新 npm install
COPY . .
RUN npm install
```
#### 2. 使用 .dockerignore
具体内容如下
```docker
## 确保 node_modules 不被复制
COPY . .
## .dockerignore 中应包含 node_modules
具体内容如下:
```
#### 3. 明确复制路径
具体内容如下
```docker
## ✅ 好:明确的路径
COPY src/ /app/src/
COPY package.json /app/
## ❌ 差:过于宽泛
COPY . .
```