zoukankan      html  css  js  c++  java
  • docker-compose简单使用

    ##1,下载安装docker-compose

    # http://get.daocloud.io/
    curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose
    
    

    ##2,官网案例

    #1
    $ mkdir composetest
    $ cd composetest
    
    #2 Create a file called app.py in your project directory and paste this in
    
    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)
    
    
    
    #3Create another file called requirements.txt in your project directory and paste this in:
    flask
    redis
    
    
    
    #4create a file named Dockerfile and paste the following
    FROM python:3.7-alpine
    WORKDIR /code
    ENV FLASK_APP app.py
    ENV FLASK_RUN_HOST 0.0.0.0
    RUN apk add --no-cache gcc musl-dev linux-headers
    COPY requirements.txt requirements.txt
    RUN pip install -r requirements.txt
    COPY . .
    CMD ["flask", "run"]
    
    
    #5Create a file called docker-compose.yml
    
    version: '3'
    services:
      web:
        build: .
        ports:
          - "5000:5000"
      redis:
        image: "redis:alpine"
    
    #6启动
    $ docker-compose up
    
    #7修改docker-compose.yml
    version: '3'
    services:
      web:
        build: .
        ports:
          - "5000:5000"
        volumes:
          - .:/code
        environment:
          FLASK_ENV: development
      redis:
        image: "redis:alpine"
    
    
    #7 查看变量
    $ docker-compose run web env
    
    
    ## 
    停止服务
    $ docker-compose stop
    
    删除所有数据
    $ docker-compose down --volumes
    
    
    
    

    docker-compose 配置文件 v3

    1,构建方式

    1) 指定构建dockerfile在当前目录下

    version: '3'
    services:
      web:
        build: .
        ports:
          - "5000:5000"
      redis:
        image: "redis:alpine"
    
    
    1. 指定构建上下文 ,构建镜像时的必须文件都要在该目录下 ./dir
    version: "3.7"
    services:
      webapp:
        build: ./dir
        image: webapp:tag1  
    #指定镜像名称
    
    

    3)指定dockerfile名称及变量

    version: "3.7"
    services:
      webapp:
        build:
          context: ./dir
          dockerfile: Dockerfile-alternate
          args:
            buildno: 1
    
    

    注意:不指定 dockerfile: 时默认的dockerfile为 Dockerfile

    ###参数格式

    #1
    build:
      context: .
      args:
        buildno: 1
        gitcommithash: cdc3b19
    
    #2
    
    build:
      context: .
      args:
        - buildno=1
        - gitcommithash=cdc3b19
    
    
    
    

    为镜像添加标签 docker-compose 版本为3.3

    version: '3.3'
    services:
      web:
        build: 
          context: ./dir
          labels:
             - "com.example.description=Accounting webapp"
        ports:
          - "5000:5000"
        volumes:
          - .:/code
        environment:
          FLASK_ENV: development
      redis:
        image: "redis:alpine"
    
    
    查看标签:
    docker  inspect composetest_web | grep  -i  -A  3  labels 
    
    

    命令

    Override the default command.   重写dockerfile 内的命令
    
    command: bundle exec thin -p 3000
    或
    command: ["bundle", "exec", "thin", "-p", "3000"]
    
    

    配置configs

    depends_on

    官网介绍 Express dependency between services, Service dependencies cause the following behaviors:

        docker-compose up starts services in dependency order. In the following example, db and redis are started before web.
    
        docker-compose up SERVICE automatically includes SERVICE’s dependencies. In the following example, docker-compose up web also creates and starts db and redis.
    
        docker-compose stop stops services in dependency order. In the following example, web is stopped before db and redis.
    
    version: "3.7"
    services:
      web:
        build: .
        depends_on:
          - db
          - redis
      redis:
        image: redis
      db:
        image: postgres
    
    

    deploy

    Specify configuration related to the deployment and running of services. This only takes effect when deploying to a swarm with docker stack deploy, and is ignored by docker-compose up and docker-compose run.

    version: "3.7"
    services:
      redis:
        image: redis:alpine
        deploy:
          replicas: 6
          update_config:
            parallelism: 2
            delay: 10s
          restart_policy:
            condition: on-failure
    

    ##ENDPOINT_MODE
    为连接到群集的外部客户端指定服务发现方法

    endpoint_mode: vip - Docker assigns the service a virtual IP (VIP) that acts as the front end for clients to reach the service on a network. Docker routes requests between the client and available worker nodes for the service, without client knowledge of how many nodes are participating in the service or their IP addresses or ports. (This is the default.)

    endpoint_mode: dnsrr - DNS round-robin (DNSRR) service discovery does not use a single virtual IP. Docker sets up DNS entries for the service such that a DNS query for the service name returns a list of IP addresses, and the client connects directly to one of these. DNS round-robin is useful in cases where you want to use your own load balancer, or for Hybrid Windows and Linux applications.

    endpoint_mode:vip-Docker为服务分配虚拟IP(VIP),该IP作为客户端访问网络上服务的前端。 Docker在客户端和服务的可用工作节点之间路由请求,而无需客户端知道有多少节点正在参与服务或其IP地址或端口。 (这是默认设置。) endpoint_mode:dnsrr-DNS轮询(DNSRR)服务发现不使用单个虚拟IP。 Docker设置服务的DNS条目,以便对服务名称的DNS查询返回IP地址列表,并且客户端直接连接到其中之一。在想要使用自己的负载平衡器或混合Windows和Linux应用程序的情况下,DNS轮询很有用。

    version: "3.7"
    
    services:
      wordpress:
        image: wordpress
        ports:
          - "8080:80"
        networks:
          - overlay
        deploy:
          mode: replicated
          replicas: 2
          endpoint_mode: vip
    
      mysql:
        image: mysql
        volumes:
           - db-data:/var/lib/mysql/data
        networks:
           - overlay
        deploy:
          mode: replicated
          replicas: 2
          endpoint_mode: dnsrr
    
    volumes:
      db-data:
    
    networks:
      overlay:
    
    
  • 相关阅读:
    windows配置solr5.5.2(不通过tomcat,使用内置jetty)
    6月8日云栖精选夜读:mac下eclipse配置tomcat无法启动问题
    零配置部署 React
    万亿级数据洪峰下的分布式消息引擎
    ENode 2.0
    WannaCry感染文件恢复方法_企业再也不用愁了!
    中国最强的人工智能学术会议来了
    1篇文章看懂峰值带宽、流量、转码、连麦、截图五大直播计费方式
    CSS基础(三)
    CSS基础(三)
  • 原文地址:https://www.cnblogs.com/g2thend/p/11704276.html
Copyright © 2011-2022 走看看