Dockerfile基本原理
### Dockerfile基本原理
Dockerfile 是一个文本文件,其中包含了所有必要的命令来构建一个有效的 Docker 镜像。这个文件是用来自动化构建过程的脚本,它告诉 Docker 如何从基础镜像开始,安装所需的软件包,设置环境变量,以及配置启动的应用程序等。
### 操作步骤
1. **准备基础镜像**:
- Dockerfile 总是以 `FROM` 命令开始,该命令指定了用于创建新镜像的基础镜像。
2. **设置工作目录**:
- 使用 `WORKDIR` 指令定义了后续命令的工作目录。
3. **复制文件到镜像**:
- 使用 `COPY` 或 `ADD` 命令将本地文件系统中的文件复制到新的镜像中。
4. **执行命令**:
- 使用 `RUN` 命令执行任意的合法 shell 命令来安装依赖项或配置服务。
5. **环境变量设置**:
- 使用 `ENV` 命令设置环境变量。
6. **暴露端口**:
- 使用 `EXPOSE` 指令告诉 Docker 容器将监听哪个端口上的连接。
7. **定义默认命令**:
- 使用 `CMD` 或 `ENTRYPOINT` 指定当容器启动时运行的默认命令。
8. **构建镜像**:
- 在 Dockerfile 所在目录下运行 `docker build -t <image_name> .` 命令来构建镜像。
9. **运行容器**:
- 使用 `docker run -p <host_port>:<container_port> <image_name>` 启动一个容器。
### 示例:创建一个简单的 Web 服务器
假设我们要创建一个基于 Nginx 的简单 Web 服务器,这里是一个可能的 Dockerfile:
```Dockerfile
# 使用官方 Nginx 镜像作为基础镜像
FROM nginx:latest
# 设置工作目录
WORKDIR /usr/share/nginx/html
# 复制本地 HTML 文件到容器内的工作目录
COPY index.html .
# 设置环境变量
ENV MY_VAR="Hello from Docker!"
# 暴露 HTTP 默认端口
EXPOSE 80
# 定义容器启动后执行的默认命令
CMD ["nginx", "-g", "daemon off;"]
```
#### 创建 `index.html`
```html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to Nginx!</title>
</head>
<body>
<h1>Hello, World! ${MY_VAR}</h1>
</body>
</html>