我们将构建一个运行在
Docker
上的简单的Python Web
应用程序。 应用程序使用Flask
框架,并在redis中维护一个计数器。 虽然示例使用python,即使你不熟悉它也没关系。
确保你已经安装了docker engine
和docker compose
。不需要安装python
或redis
,因为两者都是由docker
镜像提供的。
如下:
定义应用程序依赖关系
为该项目创建目录
在项目目录下创建一个名为app.py的文件,并设置内容如下:
在项目目录中创建另一个名为requirements.txt的文件,并设置内容如下:
在这一步中,我们将编写一个构建docker
镜像的dockerfile
文件。该文件包含python
应用程序所需的所有依赖项,也包括python本身。
在我们的项目目录中,创建一个名为dockerfile
的文件并粘贴以下内容:
FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
命令的解释如下:
Python 3.4
镜像基础上创建容器/code
目录中/code
python
所需要的依赖python app.py
在我们的项目目录下创建一个名为docker-compose.yml
的文件并粘贴下面的代码:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
links:
- redis
redis:
image: "redis:alpine"
这个组合文件定义了两个服务,web
和redis
。web
服务:
dockerfile
构建的容器Flask web
服务器的默认端口5000。redis服务使用从docker注册表中心中提取的公共redis映像.
目录结构如下:
docker-compose up
启动您的应用程序.如下:docker-compose.yml
文件拉去Redis
镜像,构建我们的镜像并启动服务。
http://localhost:5000/
,浏览器回输出以下消息Hello World! I have been seen 1 times.
Hello World! I have been seen 2 times.
docker images
列出镜像。docker-compose down
,或者在启动应用程序的原始终端中按ctrl + cdocker-cmopose.yml
添加挂载目录 如下:version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
redis:
image: "redis:alpine"
volumes
关键字挂在当前目录到容器的/code
,允许我们即时修改代码,而无需重新生成镜像。
从项目目录中输入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)
...
再次在Web浏览器中查看hello world消息,然后刷新以查看有没有递增。
由于应用程序代码现在使用数据卷挂载到容器中,因此可以更改本地代码并立即查看更改后效果,而无需重新生成镜像。
app.py
中 Hello World!
为 Hello from Docker!
:return 'Hello from Docker! I have been seen {} times.\n'.format(count)
Hello World
!更新成Hello from Docker
数字依旧递增如果你想在后台运行你的服务,可以使用 -d
参数,并且可以使用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
以查看其他可用的命令。
如果开始使用docker-compose up -d
运行服务,则可以使用 docker-compose stop
命令停止服务运行。
$ docker-compose stop
你可以把所有服务停下,用down
命令完全移除容器。通过--volumes
还删除redis
容器使用的数据卷:
$ docker-compose down --volumes
翻译链接:https://docs.docker.com/compose/gettingstarted/#step-8-experiment-with-some-other-commands