构建高可用自修复架构:Docker与Kubernetes实战
立即解锁
发布时间: 2025-08-25 00:40:36 阅读量: 1 订阅数: 3 

# 构建高可用自修复架构:Docker与Kubernetes实战
## 1. Dockerfile指令详解
### 1.1 ENV指令
ENV指令用于设置环境变量,这些变量会在构建时使用,并在容器运行时可用。它不会为容器生成额外的层,而是将环境变量作为元数据存储在镜像清单中。语法如下:
```plaintext
ENV <key>=<value>
```
参数以键值对形式处理,键为变量名,值为变量内容。以下几种声明方式均有效:
```plaintext
ENV USER="Jane Doe"
ENV USER=Jane\ Doe
ENV USER Jane Doe
```
### 1.2 COPY指令
COPY指令可将本地主机(执行Docker构建的地方)的文件或目录复制到镜像中。添加实际数据的指令会创建新层,从而增加最终镜像的存储占用。COPY有两种形式:
```plaintext
COPY <src> <dst>
COPY ["<src1>","<src2>","<dst>"]
```
使用时需注意:
- 文件名或目录名有空格时,必须使用JSON数组格式。
- 默认情况下,所有文件和目录将以用户标识符(UID)和组标识符(GID)0(root)复制,可使用`--chown=<UID>:<GID>`标志覆盖。
- 复制类似命名的文件时可使用通配符,遵循Go的`filepath.Match`规则。
- `<src>`路径必须在构建上下文中,复制目录时以`/`结尾,`<dst>`路径通常为绝对路径,除非使用`WORKDIR`指定相对工作目录。
COPY仅支持复制本地文件,若要从远程服务器使用URL复制文件,需使用ADD指令。
### 1.3 EXPOSE指令
EXPOSE关键字并非实际发布指定的容器端口,而是为容器用户提供启动容器时应发布哪些端口的指南。它只是在镜像清单中创建元数据,可通过`docker inspect`检索,不会创建额外层。端口可以是UDP或TCP,默认未指定协议时为TCP。示例如下:
```plaintext
EXPOSE 80
EXPOSE 53/udp
EXPOSE 80/tcp
```
### 1.4 CMD和ENTRYPOINT指令
CMD和ENTRYPOINT是Dockerfile中最重要的指令,用于指定容器启动时要运行的内容。
#### 1.4.1 ENTRYPOINT
ENTRYPOINT允许定义容器启动时要运行的可执行文件。一个Dockerfile中可添加多个ENTRYPOINT定义,但只有最后一个会在`docker container run`时执行。运行容器时添加的命令行参数会追加到ENTRYPOINT参数后,除非使用`--entrypoint`标志覆盖。
ENTRYPOINT有shell和exec两种形式:
```plaintext
ENTRYPOINT command argument1 argument2
ENTRYPOINT ["executable", "param1", "param2"]
```
exec形式不调用shell,`$PATH`变量不可用,需提供可执行文件的完整路径;shell形式会加载`/bin/sh`,使环境变量可用。
#### 1.4.2 CMD
CMD用于为可执行文件指定默认参数,若用户在`docker container run`时提供命令参数,这些默认参数将被覆盖。若ENTRYPOINT以shell形式声明,所有CMD定义将被忽略。
示例:
```plaintext
FROM alpine
ENTRYPOINT ["echo", "hello from ENTRY"]
CMD ["hello", "from CMD"]
```
运行容器时,CMD参数会追加到ENTRYPOINT后,但用户指定参数时会覆盖CMD内容。
## 2. 构建容器镜像的最佳实践
### 2.1 选择合适的基础镜像
构建镜像时,优先选择小的基础镜像,避免使用包含大量不必要工具和可执行文件的大镜像。例如,Alpine镜像比Ubuntu、Debian和CentOS等镜像小很多:
| REPOSITORY | SIZE |
| --- | --- |
| centos | 200 MB |
| ubuntu | 83.5 MB |
| debian | 101 MB |
| alpine | 4.41 MB |
许多镜像都有更精简的版本,如`httpd:alpine`和`nginx:alpine`:
| REPOSITORY | TAG | SIZE |
| --- | --- | --- |
| httpd | alpine | 91.4 MB |
| httpd
0
0
复制全文
相关推荐










