版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_39198406/article/details/85010622
本文使用flask基于redis构建一个web接口,教你使用Dockerfile来构建镜像和使用docker-compose来启动这一系列服务。
1. Flask服务
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! {}\n'.format(count)
if __name__ == "__main__":
app.run(host="0.0.0.0",debug=True,port=9999)
上面的代码的意思是启动一个端口号为9999
的服务,对外开放。
访问0.0.0.0:9999
可以看到redis
数据库中hits
的值,每访问一次hits
的值就增加1
.
2. Dockerfile构建镜像
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
例如我们接下来要写的一个Dockerfile,这里逐行解释一下:
# FROM代表此次构建的镜像以哪个镜像为基础
FROM python:3.6-alpine
# COPY是拷贝宿主机文件到镜像中的命令,这里需要注意,COPY的两个参数需要同时是文件夹或者文件
COPY ./fapp /code
# RUN则是在镜像中执行命令
RUN ls /code
# 切换工作目录,便于执行其他命令
WORKDIR /code
# 安装启动web服务需要的依赖
RUN pip install redis flask
# CMD代表镜像启动后默认执行的命令,这里要注意CMD打上中括号等同于exec执行命令
# 不打中括号等同于 sh -c 执行命令
CMD ["python","app.py"]
上面代码的做的事情就是把flask web项目的代码拷贝到镜像中,并且安装了相关依赖。
Dockerfile 写好后,可以执行以下命令进行配置文件的检查:
docker build ocnfig
如果配置文件有错误,程序会马上提示你
然后构建镜像:
docker build . -t flask_web_1:v1.0
这里的-t代表指定镜像的name:tag
会打印出如下日志:
Sending build context to Docker daemon 4.608kB
Step 1/6 : FROM python:3.6-alpine
---> 1d981af1e3b4
Step 2/6 : COPY ./fapp /code
---> 5d8d96e4d362
Step 3/6 : RUN ls /code
---> Running in a5e6a7d07a3a
app.py
Removing intermediate container a5e6a7d07a3a
---> 24382c5ece54
Step 4/6 : WORKDIR /code
---> Running in 14c889f263a7
Removing intermediate container 14c889f263a7
---> 709023e4287e
Step 5/6 : RUN pip install redis flask
---> Running in 6ee546163adc
Collecting redis
Downloading https://files.pythonhosted.org/packages/f5/00/5253aff5e747faf10d8ceb35fb5569b848cde2fdc13685d42fcf63118bbc/redis-3.0.1-py2.py3-none-any.whl (61kB)
...
Removing intermediate container 6ee546163adc
---> a5dec86e4d5c
Step 6/6 : CMD ["python","app.py"]
---> Running in 4a2f28da4c96
Removing intermediate container 4a2f28da4c96
---> ceb14bbf724d
Successfully built ceb14bbf724d
Successfully tagged flask_web_1:v1.0
说明构建成功了,使用docker images
也可以看到:
3. docker-compose启动服务
同样贴上文件内容:
version: '3' # compose-file的语法版本
services: # 定义服务
web: # 指定服务1 web
build: . # 使用当前目录下的Dockerfile构建镜像
ports: # 指定端口映射
- "9999:9999"
container_name: flask_web # 容器名称 container_name+services_name 会作为镜像名称
redis:
image: "redis:alpine"
volumes: # 指定数据卷
- redis-data:/data
container_name: redis
volumes:
redis-data:
driver: local
这里注意,compose操作会帮我们构建镜像,也就说执行compose操作后images镜像库中会新生成你指定的镜像。
在compose文件的目录下可以执行如下命令:
docker-compose up 启动服务
docker-compose up -d 后台启动服务
docker-compose down 卸载服务(容器也会被删除)
docker-compose logs 当后台启动服务的时候,可以使用这种方式查看日志
这里使用docker-compose up -d
启动服务即可:
Creating redis ... done
Creating flask_web ... done
然后可以使用docker-compose logs
查看是否执行成功。
如果执行成功,可以执行curl 127.0.0.1:5000
进行测试:
hello world! 1
hello world! 2
hello world! 3
能够正常输出以上内容的话,说明使用docker-compose构建服务成功。
附上Ubuntu 14/16快捷安装docker的脚本
Ubuntu 14.04/16.04 (使用apt-get进行安装)
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
sudo chmod 777 start.sh
./start.sh