compose支持在执行docker-compose命令的所在目录的.env文件中声明默认的环境变量。
env文件每行声明一个变量,格式为VAR=VAL。以#开头的行会忽略,也包括空行。
注意:那些在存在于运行时的环境变量始终会覆盖定义在.env文件的变量。类似地,通过命令行参数传递的值也优先。
可以在compose文件引用环境变量,也可以定义下面的CLI变量:
compose支持在执行docker-compose命令的所在目录的.env文件中声明默认的环境变量。
env文件每行声明一个变量,格式为VAR=VAL。以#开头的行会忽略,也包括空行。
注意:那些在存在于运行时的环境变量始终会覆盖定义在.env文件的变量。类似地,通过命令行参数传递的值也优先。
可以在compose文件引用环境变量,也可以定义下面的CLI变量:
我们可以使用docker compose很容易地在使用docker容器的隔离环境运行wordpress。本快速指南演示如何使用compose配置和运行wordpress。
1.创建一个空的项目目录。
可以用容易记住和理解的名称命名此项目。这个目录是应用程序镜像的上下文。此目录应该只包含用于构建那个镜像的资源。
2.切换目录到项目目录。
例如,如果命名项目目录为my_wordpress:
3.创建启动wordpress博客的docker-compose.yml文件,以及为了数据持久性挂载一个数据卷的独立的mysql实例:
注意:docker数据卷db_data将保持由wordpress对mysql的更新的数据。
现在从项目目录执行docker-compose -up命令。
这个命令将拉取所需的镜像和启动wordpress和数据库容器。
在浏览器中打开ip:8000,开始配置wordpress。
本快速入门指南介绍如何使用docker compose配置和运行一个Rails/PostgreSQL app。
定义用来构建app的三个文件。首先由于app是运行在包含它的所有依赖的容器内,你需要定义哪些文件需要包括在容器内。这个可以使用Dockerfile来完成。这个Dockerfile包括:
上面把应用程序代码放到了镜像内,这个镜像将用来运行一个包含Ruby,Bundler和其所有的依赖的容器。
下一步,创建一个只加载Rails的bootstrap Gemfile文件。在后面将由rails new覆盖它。
需要一个空的Gemfile.lock文件,构建Dockerfile用到。
最后,开始创建docker-compose.yml文件。这个文件描述了你的app由什么服务构建(数据库和web app),如何获取每一个的镜像以及需要链接它们到一起和暴露web app的端口的配置。
准备好那三个文件后,就可以使用docker-compose run来生成Rails skeleton app了:
首先,compose使用Dockerfile构建web服务的镜像。然后使用那个镜像生成容器,在容器内运行rails new命令。一旦完成,将生成一个全新的app:
如果这个时候或之后编辑了Gemfile,需要重新构建镜像。
使用如何内容替换config/database.yml文件:
开始启动app:
如果一切正常,将会看到PostgrepSQL的输出,然后再过几秒钟,将看到
最后,在另一个终端创建一个数据库:
这个快速入门指南将演示如何使用docker compose来配置和运行一个简单的Django/PostgrepSQL app。
需要为这个项目创建一个Dockerfile,一个Python依赖文件和一个docker-compose.yml文件。
1.创建一个空的项目目录。
可以以容易记忆的名称命名项目。这个目录是你的应用程序镜像的上下文。此目录应该只包含用来构建镜像的资源。
2.在项目目录中创建一个新的Dockerfile文件。
Dockerfile通过一个或多个构建命令来定义应用程序镜像内容。一旦构建完成,可以在容器运行这个镜像。
3.添加如下内容到Dockerfile文件。
这个Dockerfile从一个Python 2.7 base镜像开始构建新镜像。然后添加了一个新的code目录到此镜像。最后安装定义在requirements.txt文件的python依赖。
4.保存并关闭Dockerfile。
5.在项目目录创建requirements.txt文件。
在Dockerfile中的RUN pip install -r requirements.txt命令需要用到这个文件。
6.添加如下内容到requirements.txt.
7.保存并关闭requirements.txt文件。
8.在项目目录中创建一个docker-compose.yml文件。
这个docker-compose.yml文件描述组成你的app的服务。在这个示例中那么服务是web server和database。这个compose文件也描述了这些服务使用哪个docker镜像,它们如何链接到一起以及它们可能需要挂载到容器内的数据卷。最后这个docker-compose.yml文件描述这些服务暴露了哪个端口。
9.添加如何内容到docker-compose.yml文件。
这个文件定义了两个服务:db服务和web服务。
10.保存并关闭docker-compose.yml文件。
在本步骤中,我们通过构建在上一步骤中定义的镜像来创建一个Django项目。
1.切换到项目目录的根目录。
2.使用docker-compose命令创建一个Django项目。
指示compose使用了web服务的镜像和配置文件在容器中运行django-admin.py start project composeexample命令。由于web镜像还不存在,compose就按照在docker-compose.yml中的build: .行定义的在当前目录构建镜像。
一旦web服务镜像构建完成,compose就运行它并在容器内执行django-admin.py startproject命令。这个命令创建了Django项目使用到的一系列文件和目录。
3.当docker-compose命令完成后,列出项目的内容。
如果是在Linux运行的docker,django-admin文件所有者应该是root。这是因为容器以root用户运行。更改这个新文件的所有者。
如果在Mac或Windows运行的Docker,你应该已经是这些文件的所有者了,包括那些由django-admin生成的文件。
在本步骤,我们来设置Django数据库的连接。
1.在项目目录中,编辑composeexample/settings.py文件。
2.使用如下行替换DATABASES = …
这些设置取决于在docker-compose.yml指定的postgres docker镜像。
3.保存并关闭文件。
4.执行docker-compose up命令。
在本文我们来学习使用docker compose来构建一个简单的Python web应用程序。这个应用程序使用的是Flask框架并在Redis维护一个点击计数器。虽然这个示例使用到了Python,不过即使你不熟悉Python也可以很容易理解这些操作。
1.创建一个项目目录:
2.在项目目录中创建一个app.py文件并复制下面的内容到这个文件:
3.在项目目录创建另一个文件requirements.txt并复制下面这些内容:
这个文件定义了应用程序的依赖。
在这个步骤中,我们创建一个Dockerfile用来构建docker镜像。这个镜像包含了Python应用程序所需的所有依赖,包含Python。
在项目目录中,创建一个Dockerfile文件并复制如下内容:
这个文件解释如下:
在项目目录中创建docker-compose.yml文件并复制如下内容:
compose文件定义了两个服务,web和redis。web服务部分介绍如下:
redis服务使用了从docker hub registry拉取的公共Redis镜像。
1.从项目目录,启动你的应用程序。
compose拉取一个redis镜像,为你的代码构建了一个镜像并启动你所定义的服务。
2.在浏览器键入http://0.0.0.0:5000/来查看你的应用程序运行情况。
3.刷新页面。数字应该会递增了。
因为使用了数据卷把应用程序代码挂载到了容器里,可以对代码进行更新,然后就会马上看到更新了,而不需要重建镜像。
1.更新app.py并保存。例如:
2.在浏览器中刷新app。应该能看到更新了。
如果想让你的服务在后台运行,传递-d参数到docker-compose up并使用docker-compose ps查看现在运行的是什么。
docker-compose run命令允许你对你的服务运行一次性的命令。例如,查看web服务有哪些可用的环境变量:
通过docker-compose –help可以查看其它可用的命令。
如果使用了docker-compose up -d启动应用,当不需要时可能要停止服务:
使用down命令可以关掉所有,删除整个容器。传递–volume也会删除由redis容器使用的数据卷:
可以在macOS,Windows和64-bit Linux运行compose。下面介绍如何安装它。
1.安装Docker Engine:
这里不再介绍,参考官方文档
2.如果安装的是Docker Toolbox,它包括了Engine和Compose,所以Mac和Windows用户在这里就安装完成了。其它用户继续。
3.到https://github.com/docker/compose/releases
4.按照上面页面的介绍,执行curl命令。
如下命令下载compose:
5.增加执行权限
6.可选地,为bash和zsh shell安装command completion
7.测试安装
可以使用pip从pypi安装compose。如果使用pip安装,推荐使用virtualenv,因此许多系统的python系统包与docker-compose的依赖冲突。
注意:需要pip version 6.0或以上版本。
compose也可以运行在容器内,使用一个小的bash脚本。
Compose是用来定义和运行多个容器docker应用程序的工具。可以使用一个compose文件来配置你的应用程序服务。然后使用一个命令根据配置文件来创建和启动所有的服务。
Compose非常适合用于开发,测试和临时环境,也包括CI工作流。
使用compose就三步。
1.使用Dockerfile定义应用程序的环境,以便可以在任何地方重建环境。
2.在docker-compose.yml定义服务构建你的应用程序,以便它们能在一个隔离的环境一起运行。
3.最后,执行docker-compose up然后compose会启动和运行整个app。
一个docker-compose.yml类似如下:
compose提供了管理应用程序整个生命周期的命令:
compose使用一个项目名称相互隔离环境。可以在几个不同的上下文使用这个项目名称:
默认项目名称是项目目录的basename。可以通过使用-p命令行选项或COMPOSE_PROJECT_NAME环境变量设置一个自定义项目名称。
compose保留用于服务的所有数据卷。当执行docker-compose up时,如果找到先前用到数据卷的容器,就把数据卷从旧的容器复制到新的容器。这样确保了你保存到数据卷的数据不会丢失。
compose缓存用于创建容器的配置。当重启一个没有更新的服务时,compose重用现有的容器。重用容器意味着你可以快速改变你的环境。
compose支持在compose文件中使用变量。可以使用这些变量为不同的环境或不同的用户自定义组件。
可以使用extends字段或通过创建多个compose文件扩展你的compose文件。
compose可以以许多不同的方式使用。一些常见的用例如下:
当正在开发一个软件时,能够在一个隔离的环境运行应用程序并与之交互很重要。compose命令行工具可以用来创建这样的环境并与之交互。
compose文件提供了一个方法来记录和配置所有的应用程序的服务依赖(数据库,队列,缓存,web服务API等)。使用这个compose命令行工具可以为每个依赖创建和启动一个或多个容器。
总之,这些功能为开发人员提供了一个方便的方法来开始项目。compose把很多页的开发人员入门指南减小到单个机器可读的compose文件和一些命令。
持续部署或持续集成的一个重要部分是自动测试套件。自动端到端测试依赖运行测试的环境。compose为你的测试套件提供了一个方便的方法来创建和销毁隔离的测试环境。通过在一个compose文件中定义完整的环境,只需要几个命令就可以创建和销毁这些环境。
compose传统上专注在开发和测试工作流上,不过目前每次发布compose都在使它能够在生产环境在使用有所进展。可以使用compose来部署到一个远程的docker engine。
通过指定的参数描述更新服务。这个命令必须在manager节点执行。这些参数与docker service create命令的参数一样。
使用–mount-add 或 –mount-rm选项添加或删除一个服务的bind-mounts或volumes。
下面的示例创建一个服务并挂载test-data数据卷到/somewhere。下一步是更新服务添加挂载一个other-volume数据卷到/shomewhere-else,最后一步是取消/somewhere挂载点,将会删除test-data数据卷。每个命令返回服务名称。
docker service scale命令可以按照期望的副本数量放大或缩小服务。命令是立即返回的,不过实际上缩放服务需要一定的时间。要停止服务的所有副本但要保持服务活跃可以设置scale为0。
例如,下面的命令缩放frontend服务为50个任务。
紧接着运行docker service ls,会看到目前的副本数量。
也可以使用docker service update命令缩放服务。因此下面的命令是等同的:
docker service scale命令可以一次性缩放多个服务。例如的示例同时缩放backend和frontend服务:
查看指定服务的信息。这个命令必须在manager节点上执行。
默认情下,以JSON数组输出结果。如果指定了格式,就按给定的格式模板格式化每个结果。
例如,有如下服务:
docker service inspect redis和docker service inspect dmu1ept4cxcf都是输出同样的结果:
可以使用–pretty选项以人类可读的格式打印输出,而不是默认的JSON格式输出。
–format选项可以用来获取关于服务的指定信息。例如,下面的命令输出redis服务的副本数。