1

使用docker-compose构建一个python-web app

  1. 创建一个文件夹 python-web-app

$mkdir python-web-app
$cd python-web-app

2.创建python脚本 app.py

from flask import Flask
from redis import Redis

app = Flask(__name__)
redis = Redis(host='redis', port=6379)

@app.route('/')
def hello():
    count = redis.incr('hits')
    return 'Hello World! I have been seen {} times.\n'.format(count)

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)

这个脚本使用了flask和redis的包,并且启动了一个web服务端口5000

3.创建构建python的Dockerfile

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

由于在pip install 的时候,pip默认会去官方去获取,国内是无法访问的,所以这里使用了douban的镜像去下载包。
ADD . /code 是把当前目录下的文件添加到容器内部的/code 目录下

4.创建docker-compse.yml 文件

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

该文件提供了2个服务,第一个是web服务,通过build当前目录的Dockerfile文件生成,Expose了5000端口。
第二个服务是来自于redis的服务,version表示当前使用的compose文件版本.

5.查看验证,在准备好文件后,大概是这样得

clipboard.png

6.最后我们通过使用docker-compose构建这yml文件

$docker-compose up

clipboard.png

访问服务5000端口

clipboard.png

这个时候,我们可以多刷新几次,可以发先times会增加,我们的服务运行成功。

我们使用docker ps 可以发现docker-compose帮我们启动好了2个容器
clipboard.png

7.我们通过vim修改宿主机下的app.py文件,由于容器的数据卷是来源,如下效果

clipboard.png

clipboard.png

8.此时,docker-compose up以后,他未后台执行,如果我们需要让他后台运行,我们需要如下操作

clipboard.png

CTRL+C终止进程,

重新以分离的方式启动服务

$docker-compose up -d 

clipboard.png

docker ps 和docker-compose ps 查看正在运行服务

clipboard.png

9.查看
docker-compose运行命令允许您为您的服务运行一次性命令,比如查看web服务的环境

$docker-compose run web env

clipboard.png

但是如果使用docker ps -a就会发现

clipboard.png

10.使用docker-compose stop 终止服务
如果你是使用docker-compose up -d 进行的服务启动,那么你需要通过stop来终止关闭服务

clipboard.png

11.最后使用docker-compose down 回收资源

clipboard.png

同样,down指令运行单独的进行一些资源的回收,

$docker-compose down --volumes

Godtoy
2.4k 声望114 粉丝

Technology change the 'hello world'