• 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
    
    *************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************
  • 相关阅读:
    Windbg 基本调试常识(转)
    善用VS中的Code Snippet来提高开发效率
    如何跟踪调试Software product?
    Visual Studio 2008 每日提示(二十七)
    6步确保 windbg 成功调试 .net(转)
    Visual Studio 2005 重置设置
    Print to Output /To trace runtime
    Windbg安装和配置(转)
    C++与C#交互
    All hands on deck
  • 原文地址:https://www.cnblogs.com/martin-huang/p/13683634.html
Copyright © 2020-2023  润新知