开始 | 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