gpt4 book ai didi

django - 如何将 docker-compose.yml 翻译成 Dockerfile

转载 作者:行者123 更新时间:2023-12-05 00:49:31 28 4
gpt4 key购买 nike

我有一个用 Django 编写的应用程序,我正在尝试在 Digital Ocean droplet 上的 docker 中运行它。目前我有两个文件。

任何人都可以建议如何摆脱docker-compose.yml文件并将所有命令集成到 Dockerfile 中???

Dockerfile

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY . /code/
RUN pip install -r reqirements.txt
RUN python /code/jk/manage.py collectstatic --noinput

docker-compose.yml
version: '3'
services:
web:
build: .
command: python jk/manage.py runserver 0.0.0.0:8081
volumes:
- .:/code
ports:
- "8081:8081"

我运行我的应用程序和 docker 镜像,如下所示:
  • docker-compose run web python jk/manage.py migrate
  • docker-compose up

  • 输出:
    Starting workspace_web_1 ...
    Starting workspace_web_1 ... done
    Attaching to workspace_web_1
    web_1 | Performing system checks...
    web_1 |
    web_1 | System check identified no issues (0 silenced).
    web_1 | December 02, 2017 - 09:20:51
    web_1 | Django version 1.11.3, using settings 'jk.settings'
    web_1 | Starting development server at http://0.0.0.0:8081/
    web_1 | Quit the server with CONTROL-C.
    ...

    好的,所以我采取了以下方法:
    Dockerfile
    FROM python:3
    ENV PYTHONUNBUFFERED 1
    RUN mkdir /code
    WORKDIR /code
    COPY . /code/
    RUN pip install -r reqirements.txt
    RUN python /code/jk/manage.py collectstatic --noinput

    然后我跑了:
     docker build -t "django:v1" .

    所以 docker images -a抛出:
    docker images -a
    REPOSITORY TAG IMAGE ID CREATED SIZE
    django v1 b3dec6aaf9b9 5 minutes ago 949MB
    <none> <none> 55370397f7f2 5 minutes ago 948MB
    <none> <none> e7eba7113203 7 minutes ago 693MB
    <none> <none> dc3d7705c45a 7 minutes ago 691MB
    <none> <none> 12825382746d 7 minutes ago 691MB
    <none> <none> 2304087e8b82 7 minutes ago 691MB
    python 3 79e1dc9af1c1 3 weeks ago 691MB

    最后我跑了:
    cd /opt/workspace
    docker run -d -v /opt/workspace:/code -p 8081:8081 django:v1 python jk/manage.py runserver 0.0.0.0:8081

    两个简单的问题:
  • 我说得对吗,每个 <none>列出的图像是在运行 docker build -t "django:v1" . 时创建的命令来建立我的形象......所以这意味着它消耗像 [(691 x 4) + (693 x 1) + (948) + (949)]MB磁盘空间??
  • 使用更好吗? unicorn wsgi 在生产中运行 django 的程序?

  • 来自@vmonteco 的回复:
  • 我认为是这样,但是减少图像占用的大小的一种方法是通过对 Dockerfile 中的多个链接命令使用单个 RUN 指令来减少它们的数量。 (运行 cmd1 && cmd2 而不是 RUN cmd1 然后 RUN cmd
  • 由你来发表你自己的意见。我个人使用 uWSGI,但除了 gunicorn/uwsgi 之外,还有其他选择(不仅仅是“wsgi”,这是接口(interface)规范的名称,而不是程序的名称)。找到你喜欢的那个,玩得开心! :)
  • 最佳答案

    TL;DR

    您可以将一些信息传递给您的Dockefile (要运行的命令),但这不是等效的,您不能对所有 docker-compose.yml 执行此操作文件内容。

    您可以更换您的 docker-compose.yml带有命令行的文件(因为 docker-compose 正是要替换它)。

    在您的情况下,您可以将要运行的命令添加到您的 Dockerfile作为默认命令(这与将其传递给您在运行时启动的容器大致相同):

    CMD ["python", "jk/manage.py", "runserver", "0.0.0.0:8081"]

    或者直接在命令行中传递这个命令,比如卷和端口,它应该给出如下内容:
    docker run -d -v .:/code -p 8081:8080 yourimage python jk/manage.py runserver 0.0.0.0:8081

    但是

    请记住 Dockerfilesdocker-compose serve two whole different purposes.
  • Dockerfile用于图像构建 ,以定义构建图像的步骤。
  • docker-compose是一个启动和编排容器的工具构建您的应用程序(您可以添加一些信息,例如构建上下文路径或所需图像的名称,但不能添加 Dockerfile 内容本身)。

  • 因此,要求“将 docker-compose.yml file 转换为 Dockerfile”并不真正相关。

    这更多是关于转换 docker-compose.yml将文件放入一个(或多个)命令行以手动启动容器。
    docker-compose的目的|正是为了摆脱这些命令行以使事情变得更简单(它自动化它)。

    还有:

    来自 manage.py documentation :

    DO NOT USE THIS SERVER IN A PRODUCTION SETTING. It has not gone through security audits or performance tests. (And that’s how it’s gonna stay.



    Django 的 runserver包含在 manage.py 中工具不适用于生产。

    您可能要考虑使用 WSGI代理后面的服务器。

    关于django - 如何将 docker-compose.yml 翻译成 Dockerfile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47606371/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com