zoukankan      html  css  js  c++  java
  • Docker compose

    什么是docker compose?

    Compos 出现的背景:

    通过前面的学习我们能通过 DockerFile 创建 和运行单个容器 ,假如我们现在 运行100个服务(也许有压力 但还能就收)如果运行1000个呢?

    Docker Compose 概述

    1. Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。
    2. 使用的环境:Compose可在所有环境中工作:生产,登台,开发,测试以及CI工作流
    3. 使用Compose基本上是一个三步过程:
      1. 使用定义您的应用环境,Dockerfile以便可以在任何地方复制。
      2. 定义组成应用程序的服务,docker-compose.yml 以便它们可以在隔离的环境中一起运行。
      3. Run docker-compose upand Compose启动并运行您的整个应用程序。

    Compose 理解

    • compose是docker官方的开源项目

    • Dockerfile 让程序在任何地方运行,web,redis

    • docker-compose.yml

      version: '2.0'
      services:
        web:
          build: .
          ports:
          - "5000:5000"
          volumes:
          - .:/code
          - logvolume01:/var/log
          links:
          - redis
        redis:
          image: redis
      volumes:
        logvolume01: {}
      
    • 服务Service: 就是每个容器单独提供的

    • 项目project: 就是一组关联的容器

    Compose 安装

    # 1.安装compose
    [root@localhost ~]# curl -L "https://get.daocloud.io/docker/compose/releases/download/1.27.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose  #这个是国内源 下载速度会快点
    
    
    [root@localhost ~]# curl -L "https://github.com/docker/compose/releases/download/1.27.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100   651  100   651    0     0    162      0  0:00:04  0:00:04 --:--:--   162
    100 11.6M  100 11.6M    0     0   689k      0  0:00:17  0:00:17 --:--:-- 1848k
    
    #给compose 加上执行权限
    [root@localhost ~]# ls /usr/local/bin/
    docker-compose
    [root@localhost ~]# chmod +x /usr/local/bin/docker-compose 
    [root@localhost ~]# docker-compose version
    docker-compose version 1.27.1, build 509cfb99
    docker-py version: 4.3.1
    CPython version: 3.7.7
    OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019
    
    • 假如不能再全局使用docker-compose
    ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose  #
    

    安装预发行版本

    如果您想试用预发布版本,可以从GitHub上Compose存储库发布页面下载候选发布。按照链接中的说明进行操作,该链接涉及curl在终端中运行命令以下载二进制文件。

    也可以从https://dl.bintray.com/docker-compose/master/下载从“ master”分支构建的预发行版本 。

    发行前的版本使您可以在发行新功能之前对其进行试用,但可能会使其不稳定。

    升级

    如果要从Compose 1.2或更早版本进行升级,请在升级Compose之后删除或迁移现有容器。这是因为从1.3版开始,Compose使用Docker标签来跟踪容器,并且需要重新创建容器以添加标签。

    如果Compose检测到创建的没有标签的容器,则它将拒绝运行,这样您就不会最终获得两组标签。如果要继续使用现有容器(例如,因为它们具有要保留的数据量),则可以使用Compose 1.5.x通过以下命令迁移它们:

    docker-compose migrate-to-labels
    

    另外,如果您不担心保留它们,可以将其删除。撰写只是创建新的。

    docker container rm -f -v myapp_web_1 myapp_db_1 ...
    

    卸载

    如果使用curl以下命令卸载Docker Compose :

    sudo rm /usr/local/bin/docker-compose
    

    如果使用pip以下命令卸载Docker Compose :

    pip uninstall docker-compose
    

    实战练习

    实战:在此页面上,您将构建一个运行在Docker Compose上的简单Python Web应用程序。该应用程序使用Flask框架,并在Redis中维护一个计数器。尽管该示例使用Python,但是即使您不熟悉此处演示的概念,也应可以理解。(官方实例)

    https://docs.docker.com/compose/gettingstarted/

    #前提条件
    确保已经安装了Docker Engine 和Docker Compose。您无需安装Python或Redis,因为两者均由Docker映像提供。
    
    
    #1.为项目创建目录:
    $ mkdir composetest
    $ cd composetest
    #2.新建文件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)
    #3.requirements.txt在项目目录中创建另一个名为的文件,并将其粘贴到:
    flask
    redis
    
    #4.创建一个DockerFile
    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
    EXPOSE 5000
    COPY . .
    CMD ["flask", "run"]
    
    #5.创建docker-compose.yml文件
    version: '3'
    services:
      web:
        build: .
        ports:
          - "5000:5000"
      redis:
        image: "redis:alpine"
          
          
    #启动工程
    docker-compose up
    

    image-20200915152601446

    这里docker的源问题导致的(可以将自己的docker源换成国内的)

    image-20200915153418148

    image-20200915153538375

    接下来我们测试一下

    image-20200915153749174

    #停止docker-compose
    1.CTRL + C
    2.进入项目目录 执行docker-compose down
    

    使用docker-compose搭建自己的博客

    [root@localhost ~]# mkdir  my_wordpress
    [root@localhost ~]# cd my_wordpress
    [root@localhost my_wordpress]# vim docker-compose.yml
    version: '3.3'
    
    services:
       db:
         image: mysql:5.7
         volumes:
           - db_data:/var/lib/mysql
         restart: always
         environment:
           MYSQL_ROOT_PASSWORD: somewordpress
           MYSQL_DATABASE: wordpress
           MYSQL_USER: wordpress
           MYSQL_PASSWORD: wordpress
    
       wordpress:
         depends_on:
           - db
         image: wordpress:latest
         ports:
           - "8000:80"
         restart: always
         environment:
           WORDPRESS_DB_HOST: db:3306
           WORDPRESS_DB_USER: wordpress
           WORDPRESS_DB_PASSWORD: wordpress
           WORDPRESS_DB_NAME: wordpress
    volumes:
        db_data: {}
    
    [root@localhost my_wordpress]# docker-compose up -d  
    

    image-20200915160746600

    搞定!

    docker-compose 的常用命令

    如果要在后台运行服务,则可以将-d标志(用于“分离”模式)传递给docker-compose up并用于docker-compose ps查看当前正在运行的内容:

    $ 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
    

    docker-compose run命令允许您为服务运行一次性命令。例如,查看哪些环境变量可用于 web服务:

    $ docker-compose run web env
    

    请参阅docker-compose --help以查看其他可用命令。您还可以为bash和zsh shell 安装命令完成功能,这还将显示可用命令。

    如果您开始使用Compose with docker-compose up -d,请在完成服务后停止它们:

    $ docker-compose stop
    

    您可以使用down 命令降低所有内容,完全删除容器。通过--volumes还删除Redis容器使用的数据量:

    $ docker-compose down --volumes
    
    *************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************
  • 相关阅读:
    Codeforces 177G2 Fibonacci Strings KMP 矩阵
    Codeforces Gym100187C Very Spacious Office 贪心 堆
    Codeforces 980F Cactus to Tree 仙人掌 Tarjan 树形dp 单调队列
    AtCoder SoundHound Inc. Programming Contest 2018 E + Graph (soundhound2018_summer_qual_e)
    BZOJ3622 已经没有什么好害怕的了 动态规划 容斥原理 组合数学
    NOIP2016提高组Day1T2 天天爱跑步 树链剖分 LCA 倍增 差分
    Codeforces 555C Case of Chocolate 其他
    NOIP2017提高组Day2T3 列队 洛谷P3960 线段树
    NOIP2017提高组Day2T2 宝藏 洛谷P3959 状压dp
    NOIP2017提高组Day1T3 逛公园 洛谷P3953 Tarjan 强连通缩点 SPFA 动态规划 最短路 拓扑序
  • 原文地址:https://www.cnblogs.com/martin-huang/p/13683634.html
Copyright © 2011-2022 走看看