zoukankan      html  css  js  c++  java
  • Docker Compose 容器编排

    1. 前言

    Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器。

    使用Compose 基本上分为三步:

    1. Dockerfile 定义应用的运行环境
    2. docker-compose.yml 定义组成应用的各服务
    3. docker-compose up 启动整个应用

    2. 安装Compose

    Compose repository release page on GitHub 最新版的Docker Compose,例如:

    curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose
    

    安装成功后,查看版本

    $ docker-compose --version
    docker-compose version 1.14.0, build 1719ceb
    

    3. 使用Compose

    3.1 创建一个Python应用, 使用Flask,将数值记入Redis

    1. 创建一个项目目录
    # mkdir composetest
    # cd composetest
    
    1. 在项目目录下,创建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.
    '.format(count)
    if __name__ == "__main__":
        app.run(host="0.0.0.0", debug=True)
    
    1. 在项目目录下,创建requirements.txt文件
    flask
    redis
    

    3.2 创建 Dockerfile

    在项目目录下,创建Dockerfile

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

    对上面的Dockerfile做一下简单说明:

    • 容器使用Python 3.4的镜像
    • 将当前目录下文件拷贝到容器内/code
    • 指定工作目录为/code
    • 安装python需要的库:flask, redis
    • 容器执行命令 python app.py

    3.3 创建Compose脚本

    在项目目录下,创建docker-compose.yml文件

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

    3.4 启动应用

    会执行编排脚本,分别制作和抓取web,redis镜像,启动容器

     $ docker-compose up
     Pulling image redis...
     Building web...
     Starting composetest_redis_1...
     Starting composetest_web_1...
     redis_1 | [8] 02 Jan 18:43:35.576 # Server started, Redis version 2.8.3
     web_1   |  * Running on http://0.0.0.0:5000/
     web_1   |  * Restarting with stat
    

    3.5 访问应用

    每刷新一下页面,次数加1

    3.6 更新应用

    1. 修改app.py内容,然后保存,例如:
    return 'Hello from Docker! I have been seen {} times.
    '.format(count)
    
    1. 刷新浏览器页面,发现页面内容改变,并且次数依然在递增

    4. 体验其他命令

    1. 使用daemon模式启动,并且查看容器状态
    $ 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
    
    1. 查看容器环境变量
    $ docker-compose run web env
    PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    HOSTNAME=bdc78b829f9f
    TERM=xterm
    LANG=C.UTF-8
    GPG_KEY=97FC712E4C024BBEA48A61ED3A5CA953F73C700D
    PYTHON_VERSION=3.4.6
    PYTHON_PIP_VERSION=9.0.1
    HOME=/root
    
    1. 停止Compose启动的容器
    $ docker-compose stop
    
    1. 停止和删除所有容器
    $ docker-compose down 
    
  • 相关阅读:
    Python疑难杂症:SyntaxError: NonASCII character Python中文处理问题
    程序员健康大全透视身体24小时工作时间表
    ConnectionTimeout,CommandTimeout和executionTimeout的理解
    google map api 与jquery结合使用(3) 图标样式,使用xml和异步请求【转帖】
    新手8周跑步训练计划
    57商城温州地区最大本土网上超市
    7 款仿照 Sinatra 思路的 .NET 框架
    线程池的原理和连接池的原理
    免费网站模版:一个黑色系的公司网站模版(flash幻灯)
    深入浅出REST
  • 原文地址:https://www.cnblogs.com/jaychang/p/7086146.html
Copyright © 2011-2022 走看看