Wad*_*acy 13 docker visual-studio-code vscode-devcontainer
我是个新手,所以请耐心等待。我熟悉编写本地应用程序和脚本来自动执行我需要执行的管理任务,但现在我正在尝试熟悉 Gitlab CI/CD 流程。我一直在使用(并且喜欢)VSCode devcontainers,因为我陷入了学习 Python 虚拟环境并尝试管理不同 python 版本等的困境,而 devcontainers 让我所有的头痛都消失了。现在我试图弄清楚如何编写一个简单的应用程序(如 Flask 端点)并通过 Gitlab CI/CD 进行部署。
我目前陷入了如何将 devcontainer 的 VSCode Dockerfile 转换为生产就绪的 Dockerfile 的困境。例如,VSCode Dockerfile 使用了一个我认为在生产环境中无法接受的 VSCode 基础镜像。是否有为部署创建生产 Docker 配置的最佳实践?如果只是简单地创建一个单独的 Dockerfile,这是否违背了使用 Docker 容器进行开发的目的之一?您仍然会遇到“它在我的容器中工作正常......”的情况
Von*_*onC -1
是否有为部署创建生产 Docker 配置的最佳实践?
这些最佳实践之一可以是多阶段构建:它允许您将构建阶段(您可以在其中编译资产、安装依赖项等)与最终生产阶段分开,最终生产阶段仅包含运行应用程序所需的内容。该方法有助于减小最终图像的大小,并通过最小化攻击面来提高安全性。
在第一阶段,您使用一个基础映像,其中包括编译和构建应用程序所需的所有工具和库。您安装依赖项、编译任何资产并准备您的应用程序。
第二阶段从一个新的、轻量级的基础镜像开始。在这里,您仅复制构建阶段的必要工件。该阶段不包括用于构建的额外工具和库,从而使最终图像更小、更安全。
简单 Flask 应用程序的 Dockerfile 如下:
# Stage 1: Build Stage
FROM python:3.9 as builder
# Set the working directory
WORKDIR /usr/src/app
# Copy the requirements file
COPY requirements.txt .
# Install Python dependencies
RUN pip install --user -r requirements.txt
# Copy the Flask application
COPY . .
# You can perform any build steps here (e.g., compiling assets)
# Stage 2: Production Stage
FROM python:3.9-slim
# Set the working directory
WORKDIR /usr/src/app
# Copy only the dependencies
COPY --from=builder /root/.local /root/.local
# Copy the built application from the builder stage
COPY --from=builder /usr/src/app .
# Expose the port the app runs on
EXPOSE 5000
# Set environment variables
ENV PATH=/root/.local:$PATH
# Command to run the application
CMD ["python", "app.py"]
Run Code Online (Sandbox Code Playgroud)
最终映像仅包含您的应用程序及其运行时依赖项,而不包含整个构建环境。
您可以在 devcontainer 和 Dockerfile 的第一阶段中使用相同的基础映像。这确保了 Python 环境在开发和构建阶段的一致性。
并在两个环境中对依赖项使用相同requirements.txt
或等效的配置。在开发过程中,您可能有其他特定于开发的包。
归档时间: |
|
查看次数: |
813 次 |
最近记录: |