zoukankan      html  css  js  c++  java
  • Docker Compose

    官方文档:https://docs.docker.com/compose 

    一、介绍

      Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。是用来定义和运行多个Docker容器应用的工具,它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。 

    Compose 中有两个重要的概念:

    • 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。

    • 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

      Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。

    二、Linux 安装

    curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    
    chmod a+x /usr/local/bin/docker-compose  
    docker-compose -version
    docker-compose version 1.19.0, build 9e633ef
    

    三、启动一个项目

    3.1 编写一个yaml文件

    pwd
    /home/bigberg/docker/compose-test
    
    # 编写yaml文件
    vim docker-compose.yml
    
    version: '3'
    services:
      web:
        build: .
        ports:
          - "8888:80"
    
    
    # version :  需要和docker 版本相匹配
    
    # services : 定义组中的容器和服务等
    
    # web : 容器镜像服务的标识,通过这个标识来管理镜像
    
    # build .  :  构建镜像的目录
    
    # ports : 映射的端口
    

    version 对应的docker版本:

      

    3.2 编写一个Dockerfile文件   

    FROM centos
    MAINTAINER bigberg
    RUN yum -y install httpd php php-gd php-mysql
    RUN echo "<?php phpinfo()?>" > /var/www/html/index.php
    CMD ["/usr/sbin/httpd","-D","FOREGROUND"]
    EXPOSE 80
    

     3.3 构建镜像

    docker-compos up
    

      构建完成后查看:

     docker-compose ps
          Name                     Command              State          Ports        
    --------------------------------------------------------------------------------
    composetest_web_1   /usr/sbin/httpd -D FOREGROUND   Up      0.0.0.0:8888->80/tcp
    

      访问地址:(项目确实起来了)

      

    四、python-web事例

      4.1 定义应用的一些依赖

      创建文件夹   

    mkdir -p compose-test/python-test
    cd compose-test/python-test
    

      创建一个app.py文件

    import time
    
    import redis
    from flask import Flask
    
    
    app = Flask(__name__)
    cache = redis.Redis(host='redis', port=6379)
    
    
    def get_hit_count():
        retries = 5
        while True:
            try:
                return cache.incr('hits')
            except redis.exceptions.ConnectionError as exc:
                if retries == 0:
                    raise exc
                retries -= 1
                time.sleep(0.5)
    
    
    @app.route('/')
    def hello():
        count = get_hit_count()
        return 'Hello World! I have been seen {} times.
    '.format(count)
    
    if __name__ == "__main__":
        app.run(host="0.0.0.0", debug=True)
    app.py

      在app.py中,host='redis' 中redis 是 redis 容器的主机名,在这个项目的网络中可以被解析

    Name:      redis
    Address 1: 172.20.0.3 625eb281eafd
    

      创建一个requirements.txt文件

    flask
    redis
    

      4.2 创建一个Dockerfile  

    FROM python:3.4-alpine
    ADD . /code
    WORKDIR /code
    RUN pip install -r requirements.txt
    CMD ["python", "app.py"]
    • 构建使用的python:3.4-alpine镜像
    • 将当前目录添加到镜像中/code目录
    • 设置工作目录为 /code
    • 安装python依赖
    • 设置容器启动运行命令为 python app.py

      4.3 创建docker-compose.yml 文件

    version: '3'
    services:
      web:
        build: .
        ports:
         - "5000:5000"
      redis:
        image: "redis:alpine"
    

      这个ymal文件有两个服务:web 和 redis

      web服务:

    • 构建使用Dockerfile中定义的镜像
    • 映射端口5000到宿主机端口5000,也就是flask web的默认端口

      redis服务:

    • 构建使用的是Docker Hub中公共Redis镜像

      4.4 构建项目

    docker-compose up
    

      4.5 访问项目

      

      每次刷新,访问的次数会增长

      4.6 修改ymal文件,将目录挂在到镜像中

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

      通过volumes 将当前目录挂在到镜像中的 /code目录,这个就可以在宿主机目录中修改文件,容器中也会生效,不必每次修改都要重新构建

      4.7 重新docker-compose up  

    docker-compose up
    

      

      4.8 修改app.py文件  

    Hello world!
    改为
    
    Hello from Docker!
    

      

  • 相关阅读:
    FHDe2Net:Full High Definition Demoireing Network
    Single Image Reflection Removal through Cascaded Refinement
    GFN___Gated Fusion Network for Single Image Dehazing
    127. 单词接龙 哈希表 BFS 优化建图 双向搜索
    面试题 02.08. 环路检测 快慢指针
    503. 下一个更大元素 II (暴力、单调栈)
    GINet:Graph Interaction Network for Scene Parsing
    FFDNet: Toward a Fast and Flexible Solution for CNN-Based Image Denoising
    搬家完成!
    Lucas定理
  • 原文地址:https://www.cnblogs.com/bigberg/p/8487748.html
Copyright © 2011-2022 走看看