dockerfiles编译 举个例子 包括完整app所有结构及相关代码
时间: 2023-05-29 10:01:32 浏览: 57
假设我们有一个简单的 Flask 应用,该应用允许用户在浏览器上上传图像并将其转换为黑白图像。下面是该应用的目录结构:
```
├── app
│ ├── templates
│ │ └── upload.html
│ ├── Dockerfile
│ ├── main.py
│ ├── requirements.txt
│ └── utils.py
└── images
├── black-and-white.jpg
├── flask-logo.png
└── README.md
```
现在,我们将使用 Dockerfile 来构建该应用的 Docker 镜像。以下是该 Dockerfile 的内容:
```dockerfile
FROM python:3.8-slim-buster
# Set the working directory
WORKDIR /app
# Install system dependencies
RUN apt-get update && apt-get install -y \
gcc \
nginx \
libjpeg-dev \
&& rm -rf /var/lib/apt/lists/*
# Install Python dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copy the application code
COPY app .
# Expose port 80
EXPOSE 80
# Start the application
CMD ["gunicorn", "-b", "0.0.0.0:80", "main:app"]
```
让我们逐行解释一下这个 Dockerfile:
1. 第 1 行指定我们要使用的基础镜像是 Python 3.8(`python:3.8-slim-buster`)。
2. 第 4 行设置工作目录为 `/app`。
3. 第 7-9 行安装系统依赖项,其中包括 gcc、nginx 和 libjpeg-dev。
4. 第 12 行通过 COPY 命令将 `requirements.txt` 文件复制到容器中,并使用 pip 安装其中列出的 Python 依赖项。
5. 第 15 行通过 COPY 命令将我们的整个应用程序代码复制到容器中。
6. 第 18 行将容器的端口 80 暴露给外部网络。
7. 最后一行指定我们要运行的命令是 `gunicorn -b 0.0.0.0:80 main:app`。这会在容器启动时启动 Gunicorn 服务器并运行 `main.py` 文件中的 Flask 应用。
使用以下命令构建镜像:
```bash
docker build -t my-flask-app .
```
这将构建名为 `my-flask-app` 的 Docker 镜像,并将其构建上下文设置为当前目录。可以使用以下命令启动该容器:
```bash
docker run -p 80:80 my-flask-app
```
现在,我们的 Flask 应用程序正在 Docker 容器中运行,并可以通过 `http://localhost` 访问它。