Docker Compose

 

docker-compose就是docker容器的编排工具,主要就是解决相互有依赖关系的多个容器的管理。

  • Compose简介

    Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。

    Docker-Compose是一个容器编排工具。通过一个.yml或.yaml文件,将所有的容器的部署方法、文件映射、容器端口映射等情况写在一个配置文件里,执行docker-compose up命令就像执行脚本一样,一个一个的安装并部署容器。

    • Compose 使用的三个步骤
      - 使用Dockerfile定义你的应用依赖的镜像; 
      - 使用docker-compose.yml定义你的应用(APP)具有的服务,并在隔离环境中一起运行; 
      - 最后通过docker-compose up命令创建并运行整个应用程序;

    • 注:docker-compose将所管理的容器分为3层结构:project  service  container

      docker-compose.yml组成一个project,project里包括多个service,每个service定义了容器运行的镜像(或构建镜像),网络端口,文件挂载,参数,依赖等,每个service可包括同一个镜像的多个容器实例。

      即 project 包含 service ,service 包含 container 

  • Compose 安装

    Linux 上我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:Releases · docker/compose · GitHub

    运行第一个命令来下载 Docker Compose 的当前稳定版本或者通过执行第二个命令,高速安装 Docker Compose

    • $ sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    • $ curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

      将可执行权限应用于二进制文件:

    • $ sudo chmod +x /usr/local/bin/docker-compose

      创建软链:

    • $ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

      测试是否安装成功:

    • $ docker-compose --version
      docker-compose version 1.24.1, build 4667896b

      注意: 对于 alpine,需要以下依赖包: py-pip,python-dev,libffi-dev,openssl-dev,gcc,libc-dev,和 make。

  • 编写docker-compose.yml

    docker-compose.yml 的配置案例如下(配置参数参考下文):
    • # yaml 配置实例
      version: '3'
      services:
        web:
          build: .
          ports:
         - "5000:5000"
          volumes:
         - .:/code
          - logvolume01:/var/log
          links:
         - redis
        redis:
          image: redis
      volumes:
        logvolume01: {}

  • Compose使用

    1、创建一个测试目录:

    • $ mkdir composetest
      $ cd composetest

      在测试目录中创建一个名为 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.\n'.format(count)

      在此示例中,redis 是应用程序网络上的 redis 容器的主机名,该主机使用的端口为 6379。

      在 composetest 目录中创建另一个名为 requirements.txt 的文件,内容如下:

    • flask
      redis

      2、创建 Dockerfile 文件

      在 composetest 目录中,创建一个名为 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
      COPY . .
      CMD ["flask", "run"]

      Dockerfile 内容解释:

    • FROM python:3.7-alpine: 从 Python 3.7 映像开始构建镜像
    • WORKDIR /code: 将工作目录设置为 /code
    • ENV:设置 flask 命令使用的环境变量
    • RUN apk add --no-cache gcc musl-dev linux-headers: 安装 gcc,以便诸如 MarkupSafe 和 SQLAlchemy 之类的 Python 包可以编译加速
    • COPY requirements.txt requirements.txt :复制 requirements.txt
      RUN pip install -r requirements.txt : 安装 Python 依赖项
    • COPY . .: 将 . 项目中的当前目录复制到 . 镜像中的工作目录
    • CMD ["flask", "run"]: 容器提供默认的执行命令为:flask run

        3、创建 docker-compose.yml

        在测试目录中创建一个名为 docker-compose.yml 的文件,然后粘贴以下内容:

# yaml 配置
version: '3'
services:
  web:
    build: .
    ports:
     - "5000:5000"
  redis:
    image: "redis:alpine"

该 Compose 文件定义了两个服务:web 和 redis。        

  • web:该 web 服务使用从 Dockerfile 当前目录中构建的镜像。然后,它将容器和主机绑定到暴露的端口 5000。此示例服务使用 Flask Web 服务器的默认端口 5000 
  • redis:该 redis 服务使用 Docker Hub 的公共 Redis 映像

4、使用 Compose 命令构建和运行您的应用

在测试目录中,执行以下命令来启动应用程序:

docker-compose up

如果你想在后台执行该服务可以加上 -d 参数:

docker-compose up -d

注意:以下都需要在docker-compose.yml所在目录下执行,且名字就是默认的docker-compose.yml,否则需要加上 -f yml地址

Eg:  docker-compose -f /usr/docker/docker-compose1.yml ps

* 表示常用

docker-compose pull:拉取服务里定义的镜像

docker-compose ps :列出project所有运行容器(容器名 = 目录名_service_index  index表示容器序数,从1开始) 

docker-compose build:构建/重新构建所有镜像

docker-compose start [服务名称]:启动已存在但未运行的所有或单个service

docker-compose up -d(相当于 build + start  构建(容器)并启动(容器)整个project的所有service  (-d:后台进程)

docker-compose stop [服务名称]:停止运行的service

docker-compose rm -f [服务名称]:删除已停止的所有或单个service(-f :强制删除)

docker-compose down -v(相当于 stop + rm ):停止并移除整个project的所有services

(-v :删除挂载卷和volunme的链接)

docker-compose logs [服务名称]:查看服务内所有或单个容器日志输出

docker-compose run service command:在某个服务上运行命令

docker-compose exec --index=2 [服务名称] sh:进入到某个容器

(--index:2  :当服务内有多个容器时,需要指定第几个,默认是第一个)

docker-compose restart [服务名称]: 重启服务

docker-compose config:验证和查看compose文件

docker-compose images:列出所用的镜像

docker-cpmpose scale:设置服务个数(docker-compose scale web=2 worker=3 )

docker-compose pause [服务名称]:暂停服务

docker-compose unpause [服务名称]:恢复服务

原文链接:docker-compose详解_懒的去其的博客-CSDN博客_docker-compose

常见流程:

启动:创建docker-compose.yml  ->  docker-compose pull  -> docker-compose up -d

更新:docker-compose down -v -> docker-compose pull -> docker-compose up -d 

当某个service的Dockerfile改变时,即镜像发生改变需要重新生成时,如果仅仅是docker-compose.yml改变,只需要up重新启动project即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值