如何将 docker-compose.yml 翻译成 Dockerfile
How to translate docker-compose.yml to Dockerfile
我有一个用 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>
列出的图像都是在 运行ning docker build -t "django:v1" .
命令构建我的图像时创建的,我是否正确...所以这意味着它消耗像 [(691 x 4) + (693 x 1) + (948) + (949)]MB
个磁盘 space ??
- 用gunicorn好还是wsgi[=好75=] 程序到 运行 生产中的 django?
@vmonteco 的回复:
- 我认为是的,但是减小图像占用大小的一种方法是通过对 Dockerfile 中的多个链接命令使用单个 运行 指令来减少它们的数量。 (运行 cmd1 && cmd2 而不是 运行 cmd1 然后 运行 cmd
- 这取决于您发表自己的意见。我个人使用 uWSGI,但除了 gunicorn/uwsgi(不仅仅是 "wsgi",这是接口规范的名称,而不是程序)甚至还有其他选择。找到你喜欢的人玩得开心! :)
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
但是
请记住 Dockerfiles
和 docker-compose
Dockerfile
用于 image building,以定义构建图像的步骤。
docker-compose
是启动和编排 containers 以构建您的应用程序的工具(您可以添加一些信息,例如构建上下文路径或您需要的图像的名称,但不包括 Dockerfile 内容本身)。
所以问 "convert a docker-compose.yml file
into a Dockerfile
" 并不重要。
更多关于将docker-compose.yml
文件转换为一个(或多个)命令行以手动启动容器。
docker-compose
的目的正是为了摆脱这些命令行使事情变得更简单(它使它自动化)。
还有:
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.
manage.py
工具中包含的 Django runserver
不适用于生产。
您可能要考虑在代理后面使用 WSGI 服务器。
我有一个用 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>
列出的图像都是在 运行ningdocker build -t "django:v1" .
命令构建我的图像时创建的,我是否正确...所以这意味着它消耗像[(691 x 4) + (693 x 1) + (948) + (949)]MB
个磁盘 space ?? - 用gunicorn好还是wsgi[=好75=] 程序到 运行 生产中的 django?
@vmonteco 的回复:
- 我认为是的,但是减小图像占用大小的一种方法是通过对 Dockerfile 中的多个链接命令使用单个 运行 指令来减少它们的数量。 (运行 cmd1 && cmd2 而不是 运行 cmd1 然后 运行 cmd
- 这取决于您发表自己的意见。我个人使用 uWSGI,但除了 gunicorn/uwsgi(不仅仅是 "wsgi",这是接口规范的名称,而不是程序)甚至还有其他选择。找到你喜欢的人玩得开心! :)
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
但是
请记住 Dockerfiles
和 docker-compose
Dockerfile
用于 image building,以定义构建图像的步骤。docker-compose
是启动和编排 containers 以构建您的应用程序的工具(您可以添加一些信息,例如构建上下文路径或您需要的图像的名称,但不包括 Dockerfile 内容本身)。
所以问 "convert a docker-compose.yml file
into a Dockerfile
" 并不重要。
更多关于将docker-compose.yml
文件转换为一个(或多个)命令行以手动启动容器。
docker-compose
的目的正是为了摆脱这些命令行使事情变得更简单(它使它自动化)。
还有:
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.
manage.py
工具中包含的 Django runserver
不适用于生产。
您可能要考虑在代理后面使用 WSGI 服务器。