我有一个用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"
Great! How can I assist you?
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
的 磁盘空间? - 在生产环境中运行 Django 最好使用gunicorn 还是 uWSGI 程序?
@vmonteco 的回答:
- 我认为是这样,但减少映像所占用的空间的一种方法是在 Dockerfile 中使用单个 RUN 指令为多个链接的命令进行设置(使用 RUN cmd1 && cmd2 而不是 RUN cmd1 然后 RUN cmd2)。
- 选择哪个程序由您自己决定。我个人使用 uWSGI,但除了 gunicorn/uwsgi 之外,还有其他选择(不只是“wsgi”,那是接口规范的名称,而不是一个程序)。祝你找到你最喜欢的!:)