我一直在阅读和学习Docker,并试图正确选择要使用的Django设置。到目前为止,有两种:
Docker撰写或Dockerfile
我知道Dockerfile在Docker Compose中使用,但我不确定将所有内容放在一个大Dockerfile中,对不同的图像使用多个FROM命令是否是个好做法?
我想使用几个不同的图像,包括:
uwsgi
nginx
postgres
redis
rabbitmq
celery with cron
请建议使用Docker建立这种类型环境的最佳实践是什么。
如果有帮助,我在Mac上,所以使用boot2docker。
我遇到的一些问题:
Docker Compose与Python3不兼容
我想容器化我的项目,所以如果一个大Dockerfile
是不理想的,那么我觉得我需要打破它使用Docker撰写
我可以让项目Py2和Py3兼容,所以我倾向于django-compose
Dockerfiles是用来构建一个映像的,例如,从Ubuntu的骨架上,你可以在一个映像上添加mysql,在另一个映像上添加mywordpress。
撰写YAML文件是取这些图像并内聚地运行它们。
例如,如果你在docker-compose中。Yml文件一个名为db的服务:
services:
db:
image: mySQL --- image that you built.
还有一个叫wordpress的服务,比如:
wordpress:
image: mywordpress
然后在mywordpress容器内,你可以使用db连接到你的mySQL容器。这种魔力是可能的,因为你的docker主机创建了一个网桥(网络覆盖)。
假设你是一家软件公司的经理,刚刚买了一台全新的服务器。只有硬件。
把Dockerfile看作是一组指示,您可以告诉系统管理员在这个全新的服务器上安装什么。例如:
我们需要一个Debian linux
添加一个apache web服务器
我们也需要postgresql
安装午夜指挥官
当所有的完成,复制所有的*.php, *.jpg等文件,我们的项目到web服务器的webroot (/var/www)
相比之下,想想docker-compose。Yml作为一组指令,您将告诉系统管理员服务器如何与其他系统进行交互。例如,
它可以从另一台计算机访问共享文件夹,
它的80端口与主机的8000端口相同,
等等。
(这不是一个精确的解释,但足以作为一个开始。)
“更好”是相对的。这完全取决于你的需求。Docker的组合是为了编排多个容器。如果这些映像已经存在于docker注册表中,那么最好将它们列在compose文件中。如果这些图像或其他一些图像必须从计算机上的文件构建,那么您可以在Dockerfile中描述构建这些图像的过程。
我知道Dockerfile在Docker Compose中使用,但我不确定将所有内容放在一个大Dockerfile中,对不同的图像使用多个FROM命令是否是个好做法?
在一个dockerfile中使用多个FROM并不是一个很好的主意,因为有人建议删除该功能。13026
例如,如果你想dockerize一个使用数据库的应用程序,并在你的计算机上有应用程序文件,你可以使用一个合成文件和dockerfile,如下所示
docker-compose.yml
mysql:
image: mysql:5.7
volumes:
- ./db-data:/var/lib/mysql
environment:
- "MYSQL_ROOT_PASSWORD=secret"
- "MYSQL_DATABASE=homestead"
- "MYSQL_USER=homestead"
ports:
- "3307:3306"
app:
build:
context: ./path/to/Dockerfile
dockerfile: Dockerfile
volumes:
- ./:/app
working_dir: /app
Dockerfile
FROM php:7.1-fpm
RUN apt-get update && apt-get install -y libmcrypt-dev \
mysql-client libmagickwand-dev --no-install-recommends \
&& pecl install imagick \
&& docker-php-ext-enable imagick \
&& docker-php-ext-install pdo_mysql \
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer