编写Dockerfile和docker-compose.yaml文件案例

版权声明:本文为博主原创文章,未经博主允许不得转载。 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的脚本

start.sh

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

猜你喜欢

转载自blog.csdn.net/weixin_39198406/article/details/85010622