【发布时间】:2018-05-16 07:48:20
【问题描述】:
我有一个用 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 migratedocker-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
两个简单的问题:
- 在运行
docker build -t "django:v1" .命令构建我的图像时创建每个<none>列出的图像是否正确...所以这意味着它消耗像[(691 x 4) + (693 x 1) + (948) + (949)]MB的磁盘空间 ?? - 在生产环境中使用 gunicorn 或 wsgi 程序来运行 django 更好吗?
以及来自@vmonteco 的回复:
- 我认为是这样,但是减少映像占用的大小的一种方法是通过对 Dockerfile 中的多个链接命令使用单个 RUN 指令来减少它们的数量。 (RUN cmd1 && cmd2 而不是 RUN cmd1 然后 RUN cmd
- 您可以发表自己的意见。我个人使用 uWSGI,但除了 gunicorn/uwsgi 之外,还有其他选择(不仅仅是“wsgi”,这是接口规范的名称,而不是程序的名称)。找到你喜欢的那个,玩得开心! :)
【问题讨论】:
标签: django docker-compose dockerfile digital-ocean