mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-26 03:35:31 +00:00
Remove blank lines after code block markers
This commit is contained in:
@@ -3,7 +3,6 @@
|
||||
### 7.6.1 基本语法
|
||||
|
||||
```docker
|
||||
|
||||
## 格式一:单个变量
|
||||
|
||||
ENV <key> <value>
|
||||
@@ -12,7 +11,6 @@ ENV <key> <value>
|
||||
|
||||
ENV <key1>=<value1> <key2>=<value2> ...
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7.6.2 基本用法
|
||||
@@ -23,7 +21,6 @@ ENV <key1>=<value1> <key2>=<value2> ...
|
||||
ENV NODE_VERSION 20.10.0
|
||||
ENV APP_ENV production
|
||||
```
|
||||
|
||||
#### 设置多个变量
|
||||
|
||||
```docker
|
||||
@@ -31,7 +28,6 @@ ENV NODE_VERSION=20.10.0 \
|
||||
APP_ENV=production \
|
||||
APP_NAME="My Application"
|
||||
```
|
||||
|
||||
> 💡 包含空格的值用双引号括起来。
|
||||
|
||||
---
|
||||
@@ -57,24 +53,20 @@ WORKDIR $APP_HOME
|
||||
|
||||
COPY . $APP_HOME
|
||||
```
|
||||
|
||||
#### 2. 容器运行时使用
|
||||
|
||||
```docker
|
||||
ENV DATABASE_URL=postgres://localhost/mydb
|
||||
```
|
||||
|
||||
应用代码中可以读取:
|
||||
|
||||
```python
|
||||
import os
|
||||
db_url = os.environ.get('DATABASE_URL')
|
||||
```
|
||||
|
||||
```javascript
|
||||
const dbUrl = process.env.DATABASE_URL;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7.6.4 支持环境变量的指令
|
||||
@@ -102,7 +94,6 @@ const dbUrl = process.env.DATABASE_URL;
|
||||
使用 `-e` 或 `--env` 覆盖 Dockerfile 中定义的环境变量:
|
||||
|
||||
```bash
|
||||
|
||||
## 覆盖单个变量
|
||||
|
||||
$ docker run -e APP_ENV=development myimage
|
||||
@@ -115,18 +106,15 @@ $ docker run -e APP_ENV=development -e DEBUG=true myimage
|
||||
|
||||
$ docker run --env-file .env myimage
|
||||
```
|
||||
|
||||
#### .env 文件格式
|
||||
|
||||
```bash
|
||||
|
||||
## .env
|
||||
|
||||
APP_ENV=development
|
||||
DEBUG=true
|
||||
DATABASE_URL=postgres://localhost/mydb
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7.6.6 ENV vs ARG
|
||||
@@ -141,7 +129,6 @@ DATABASE_URL=postgres://localhost/mydb
|
||||
#### 组合使用
|
||||
|
||||
```docker
|
||||
|
||||
## ARG 接收构建时参数
|
||||
|
||||
ARG NODE_VERSION=20
|
||||
@@ -154,14 +141,11 @@ ENV NODE_VERSION=$NODE_VERSION
|
||||
|
||||
RUN curl -fsSL https://nodejs.org/dist/v${NODE_VERSION}/...
|
||||
```
|
||||
|
||||
```bash
|
||||
|
||||
## 构建时指定版本
|
||||
|
||||
$ docker build --build-arg NODE_VERSION=18 -t myapp .
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7.6.7 最佳实践
|
||||
@@ -169,7 +153,6 @@ $ docker build --build-arg NODE_VERSION=18 -t myapp .
|
||||
#### 1. 统一管理版本号
|
||||
|
||||
```docker
|
||||
|
||||
## ✅ 好:版本集中管理
|
||||
|
||||
ENV NGINX_VERSION=1.25.0 \
|
||||
@@ -182,11 +165,9 @@ RUN apt-get install nginx=${NGINX_VERSION}
|
||||
|
||||
RUN apt-get install nginx=1.25.0
|
||||
```
|
||||
|
||||
#### 2. 不要存储敏感信息
|
||||
|
||||
```docker
|
||||
|
||||
## ❌ 错误:密码写入镜像
|
||||
|
||||
ENV DB_PASSWORD=secret123
|
||||
@@ -197,7 +178,6 @@ ENV DB_PASSWORD=secret123
|
||||
|
||||
...
|
||||
```
|
||||
|
||||
#### 3. 为应用提供合理默认值
|
||||
|
||||
```docker
|
||||
@@ -205,11 +185,9 @@ ENV APP_ENV=production \
|
||||
APP_PORT=8080 \
|
||||
LOG_LEVEL=info
|
||||
```
|
||||
|
||||
#### 4. 使用有意义的变量名
|
||||
|
||||
```docker
|
||||
|
||||
## ✅ 好:清晰的命名
|
||||
|
||||
ENV REDIS_HOST=localhost \
|
||||
@@ -220,7 +198,6 @@ ENV REDIS_HOST=localhost \
|
||||
ENV HOST=localhost \
|
||||
PORT=6379
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7.6.8 常见问题
|
||||
@@ -230,7 +207,6 @@ ENV HOST=localhost \
|
||||
exec 格式不会自动展开环境变量:
|
||||
|
||||
```docker
|
||||
|
||||
## ❌ 不会展开 $PORT
|
||||
|
||||
CMD ["python", "app.py", "--port", "$PORT"]
|
||||
@@ -239,18 +215,15 @@ CMD ["python", "app.py", "--port", "$PORT"]
|
||||
|
||||
CMD ["sh", "-c", "python app.py --port $PORT"]
|
||||
```
|
||||
|
||||
#### Q:如何查看容器的环境变量
|
||||
|
||||
```bash
|
||||
$ docker inspect mycontainer --format '{{json .Config.Env}}'
|
||||
$ docker exec mycontainer env
|
||||
```
|
||||
|
||||
#### Q:多行 ENV 还是多个 ENV
|
||||
|
||||
```docker
|
||||
|
||||
## ✅ 推荐:减少层数
|
||||
|
||||
ENV VAR1=value1 \
|
||||
@@ -263,5 +236,4 @@ ENV VAR1=value1
|
||||
ENV VAR2=value2
|
||||
ENV VAR3=value3
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user