在线文档教程
Docker 17
撰写 | Compose

开始 | Getting started (Compose)

开始使用Docker Compose

在此页面上,您将构建一个在Docker Compose上运行的简单Python Web应用程序。该应用程序使用Flask框架并在Redis中维护一个计数器。虽然示例使用Python,但即使您不熟悉这些概念,此处演示的概念也应该可以理解。

先决条件

确保你已经安装了Docker Engine和Docker Compose。您不需要安装Python或Redis,因为两者都由Docker镜像提供。

第1步:安装

  • 为项目创建一个目录:$ mkdir composetest $ cd composetest

这些定义了应用程序的依赖关系。

第2步:创建一个Dockerfile

在这一步中,您编写一个Dockerfile来构建一个Docker镜像。该图像包含Python应用程序需要的所有依赖项,包括Python本身。

在您的项目目录中,创建一个名为Dockerfile并粘贴以下内容的文件:

FROM python:3.4-alpine ADD . /code WORKDIR /code RUN pip install -r requirements.txt CMD ["python", "app.py"]

这告诉Docker:

  • 从Python 3.4图像开始构建一个图像。

有关如何编写Dockerfiles的更多信息,请参阅Docker用户指南和Dockerfile参考。

第3步:在撰写文件中定义服务

创建一个docker-compose.yml在您的项目目录中调用的文件并粘贴以下内容:

version: '3' services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine"

这个撰写文件定义了两个服务,web并且redis。网络服务:

  • 使用Dockerfile当前目录中构建的图像。

redis服务使用从Docker Hub注册表中提取的公共Redis映像。

第4步:使用Compose构建和运行您的应用程序

  • 从您的项目目录中,运行启动您的应用程序 docker-compose up。$ docker-compose up使用默认驱动程序创建网络“composetest_default”创建composetest_web_1 ...创建composetest_redis_1 ...创建composetest_web_1创建composetest_redis_1 ... done添加到composetest_web_1,composetest_redis_1 web_1 | *在http://0.0.0.0:5000/上运行(按CTRL + C退出)redis_1 | 1:C 17 Aug 22:11:10.480#oO0OoO0OoO0Oo Redis正在启动oO0OoO0OoO0Oo redis_1 | 1:C 17 Aug 22:11:10.480#Redis version = 4.0.1,bits = 64,commit = 00000000,modified = 0,pid = 1,刚刚开始redis_1 | 1:C 17 Aug 22:11:10.480#警告:没有指定配置文件,使用默认配置。为了指定配置文件,请使用redis-server /path/to/redis.conf web_1 | *使用stat redis_1 |重新启动 1:M 17 Aug 22:11:10.483 * Running mode = standalone,port = 6379。redis_1 | 1:M 8月17日22:11:10。483#警告:由于/ proc / sys / net / core / somaxconn设置为128的较低值,因此无法强制执行TCP backlog设置511。*调试器处于活动状态!redis_1 | 1:M 17 8月22日11:10.483#服务器初始化redis_1 | 1:M 17 Aug 22:11:10.483#警告您在内核中启用了透明巨大页面(THP)支持。这将导致Redis的延迟和内存使用问题。要解决此问题,请以root身份运行命令'echo never> / sys / kernel / mm / transparent_hugepage / enabled',并将其添加到您的/etc/rc.local中,以便在重新启动后保留设置。必须在禁用THP后重新启动Redis。web_1 | *调试器PIN:330-787-903 redis_1 | 1:M 8月22日:11:10.483 *准备接受连接撰写拉一个Redis图像,为您的代码建立一个图像,并启动您定义的服务。在这种情况下,

  • 刷新页面。数字应该增加。你好,世界!我已经看过2次了。

  • 切换到另一个终端窗口,然后键入docker image ls以列出本地图像。此时列出图片应返回redis并web。$ docker image ls REPOSITORY TAG IMAGE ID创建大小composetest_web最新e2c21aa48cc1 4分钟前93.8MB python 3.4-alpine 84e6077c7ab6 7天前82.5MB redis alpine 9d8fa9aa0e5b 3周前27.5MB您可以使用图像检查图像docker inspect <tag or id>。

第5步:编辑Compose文件以添加绑定安装

docker-compose.yml在您的项目目录中编辑以添加服务的绑定挂载web

version: '3' services: web: build: . ports: - "5000:5000" volumes: - .:/code redis: image: "redis:alpine"

volumes键将主机上的项目目录(当前目录)装载到/code容器中,允许您即时修改代码,而无需重新生成映像。

第6步:使用Compose重新构建并运行应用程序

从您的项目目录中键入docker-compose up以使用更新的撰写文件构建应用程序,然后运行它。

$ docker-compose up Creating network "composetest_default" with the default driver Creating composetest_web_1 ... Creating composetest_redis_1 ... Creating composetest_web_1 Creating composetest_redis_1 ... done Attaching to composetest_web_1, composetest_redis_1 web_1 | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) ...

Hello World再次查看Web浏览器中的消息,然后刷新以查看计数增量。

Shared folders, volumes, and bind mounts

  • 如果您的项目位于Users目录(cd ~)外部,那么您需要共享您正在使用的Dockerfile和卷的驱动器或位置。如果您收到运行时错误,指示找不到应用程序文件,卷挂载被拒绝或服务无法启动,请尝试启用文件或驱动器共享。批量安装需要共享驱动器用于C:\Users(Windows)或/Users(Mac)以外的项目,并且对于使用Linux容器的 Docker for Windows上的任何项目都需要共享驱动器。有关更多信息,请参阅Docker for Windows上的共享驱动器,Docker for Mac上的文件共享以及有关如何管理容器中的数据的一般示例。

第7步:更新应用程序

由于应用程序代码现在使用卷装载到容器中,因此您可以更改代码并立即查看更改,而无需重新构建映像。

  • 更改问候语app.py并保存。例如,将Hello World!消息更改为Hello from Docker!:return'来自Docker的Hello!我已看过{}次。\ n'.format(count)

第8步:尝试其他一些命令

如果你想在后台运行你的服务,你可以将-d标志(用于“分离”模式)传递给docker-compose up并用于docker-compose ps查看当前正在运行的内容:

$ docker-compose up -d Starting composetest_redis_1... Starting composetest_web_1... $ docker-compose ps Name Command State Ports ------------------------------------------------------------------- composetest_redis_1 /usr/local/bin/run Up composetest_web_1 /bin/sh -c python app.py Up 5000->5000/tcp

docker-compose run命令允许您为您的服务运行一次性命令。例如,要查看哪些环境变量可用于该web服务:

$ docker-compose run web env

请参阅docker-compose --help查看其他可用的命令。您还可以安装bash和zsh shell的命令补全,它还会显示可用的命令。

如果您开始使用撰写作品docker-compose up -d,则可能需要在完成后与其停用服务:

$ docker-compose stop

你可以把所有东西都拿下来,用down命令彻底清除容器。通过--volumes也可以删除Redis容器使用的数据量:

$ docker-compose down --volumes

在这一点上,你已经看到了Compose如何工作的基础知识。

下一步去哪里

  • 接下来,请尝试Django,Rails或WordPress的快速入门指南

documentation, docs, docker, compose, orchestration, containers