我有一个用Django编写的应用程序,我试图在数字海洋液滴的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
搬运工-compose.yml
version: '3'
services:
web:
build: .
command: python jk/manage.py runserver 0.0.0.0:8081
volumes:
- .:/code
ports:
- "8081:8081"
我运行我的应用程序和泊坞窗图像,如下所示:
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
的磁盘空间 ?? 来自@vmonteco的回复:
答案 0 :(得分:3)
<强> 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
<强> BUT 强>
请注意 Dockerfiles
和docker-compose
serve two whole different purposes.
Dockerfile
适用于图像构建,用于定义构建图像的步骤。
docker-compose
是一个启动和编排容器 来构建应用程序的工具(您可以添加一些信息,如构建上下文路径或您需要的图像的名称,但不是Dockerfile内容本身的名称。
所以要求“将docker-compose.yml file
转换为Dockerfile
”并不是真正相关。
这更多的是将docker-compose.yml
文件转换为一个(或几个)命令行以手动启动容器。
docker-compose
的目的正是为了摆脱这些命令行以使事情更简单(它使其自动化)。
还:
请勿在生产设置中使用此服务器。它还没有消失 通过安全审核或性能测试。 (这就是它的方式 要留下来。
runserver
工具中包含的Django manage.py
不适用于制作。
您可能需要考虑在代理服务器后面使用WSGI服务器。