mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-08 08:19:35 +00:00
Fix and improve
This commit is contained in:
@@ -40,8 +40,6 @@ ENTRYPOINT nginx -g "daemon off;"
|
||||
|
||||
#### 行为对比
|
||||
|
||||
具体内容如下:
|
||||
|
||||
```docker
|
||||
## 只用 CMD
|
||||
|
||||
@@ -82,14 +80,12 @@ $ docker run myimage -v http://other.com # curl -s -v http://other.com ✓
|
||||
|
||||
### 场景一:让镜像像命令一样使用
|
||||
|
||||
#### 需求
|
||||
#### 需求(启动前准备)
|
||||
|
||||
创建一个查询公网 IP 的"命令"镜像。
|
||||
|
||||
#### 使用 CMD 的问题
|
||||
|
||||
具体内容如下:
|
||||
|
||||
```docker
|
||||
FROM ubuntu:24.04
|
||||
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
|
||||
@@ -104,14 +100,11 @@ $ docker run myip -i # ✗ 错误!
|
||||
exec: "-i": executable file not found
|
||||
## -i 替换了整个 CMD,被当作可执行文件
|
||||
|
||||
具体内容如下:
|
||||
|
||||
...
|
||||
```
|
||||
|
||||
#### 使用 ENTRYPOINT 解决
|
||||
|
||||
具体内容如下:
|
||||
|
||||
```docker
|
||||
FROM ubuntu:24.04
|
||||
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
|
||||
@@ -130,8 +123,6 @@ HTTP/1.1 200 OK
|
||||
|
||||
#### 交互图示
|
||||
|
||||
具体内容如下:
|
||||
|
||||
```
|
||||
ENTRYPOINT ["curl", "-s", "http://myip.ipip.net"]
|
||||
│
|
||||
@@ -153,8 +144,6 @@ curl -s http://myip.ipip.net -i
|
||||
|
||||
#### 实现方式
|
||||
|
||||
具体内容如下:
|
||||
|
||||
```docker
|
||||
FROM redis:7-alpine
|
||||
COPY docker-entrypoint.sh /usr/local/bin/
|
||||
@@ -186,8 +175,6 @@ exec "$@"
|
||||
|
||||
#### 工作流程
|
||||
|
||||
具体内容如下:
|
||||
|
||||
```
|
||||
docker run redis docker run redis bash
|
||||
│ │
|
||||
@@ -210,8 +197,6 @@ docker-entrypoint.sh redis-server docker-entrypoint.sh bash
|
||||
|
||||
### 场景三:带参数的应用
|
||||
|
||||
具体内容如下:
|
||||
|
||||
```docker
|
||||
FROM python:3.12-slim
|
||||
WORKDIR /app
|
||||
@@ -238,8 +223,7 @@ $ docker run myapp --host 0.0.0.0 --port 9000
|
||||
$ docker run myapp --help
|
||||
## 执行: python app.py --help
|
||||
|
||||
具体内容如下:
|
||||
|
||||
...
|
||||
```
|
||||
|
||||
---
|
||||
@@ -282,8 +266,6 @@ $ docker run --entrypoint /bin/cat myimage /etc/os-release
|
||||
|
||||
#### 1. 使用 exec 格式
|
||||
|
||||
具体内容如下:
|
||||
|
||||
```docker
|
||||
## ✅ 推荐
|
||||
|
||||
@@ -296,8 +278,6 @@ ENTRYPOINT python app.py
|
||||
|
||||
#### 2. 提供有意义的默认参数
|
||||
|
||||
具体内容如下:
|
||||
|
||||
```docker
|
||||
ENTRYPOINT ["nginx"]
|
||||
CMD ["-g", "daemon off;"]
|
||||
@@ -346,6 +326,6 @@ wait $PID
|
||||
|
||||
### 延伸阅读
|
||||
|
||||
- [CMD 容器启动命令](cmd.md):默认命令
|
||||
- [最佳实践](../../16_appendix/16.1_best_practices.md):启动命令设计
|
||||
- [后台运行](../../05_container/5.2_daemon.md):前台/后台概念
|
||||
- [CMD 容器启动命令](7.4_cmd.md):默认命令
|
||||
- [最佳实践](../16_appendix/16.1_best_practices.md):启动命令设计
|
||||
- [后台运行](../05_container/5.2_daemon.md):前台/后台概念
|
||||
|
||||
Reference in New Issue
Block a user