mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-11 12:21:17 +00:00
Fix and update
This commit is contained in:
@@ -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 . .
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user