zoukankan      html  css  js  c++  java
  • 走进docker-compose

    什么是Docker-Compose?

    Docker-Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。比如我们发布一个系统可能包含多个服务,服务与服务之间网络需要互通,那此时我们需要一个容器一个容器去启动,如果使用Docker-Compose即可定义一个描述文件docker-compose.yaml完成所有服务的发布, 并且实现容器间互通(单台物理机)。

    Docker-Compose安装

    1. Docker Compose依靠Docker Engine进行任何有意义的工作,因此请确保根据您的设置在本地或远程安装Docker Engine。参考上篇文章安装Docker环境
    2. 升级 如果要从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 ...
    1. 卸载 如果使用curl以下命令进行安装,则要卸载Docker Compose
    #如果使用curl以下命令进行安装,则要卸载Docker Compose 
    sudo rm /usr/local/bin/docker-compose
    #如果使用pip以下命令进行安装,则要卸载Docker Compose:
    pip uninstall docker-compose
    1. 开始安装Docker-Compose
      • 命令安装
      #下载二进制
      sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
      #修改执行权限
      sudo chmod +x /usr/local/bin/docker-compose
    • 下载可执行文件安装

      新建目录Compose可执行二进制文件下载

      #下载二进制
      mv docker-compose /usr/local/bin/docker-compose
      #修改执行权限
      sudo chmod +x /usr/local/bin/docker-compose

    docker-compose.yaml 构建文件

    官网demo:


    version: '3'
    services:
      back:
        image: backService:1.0
        container_name: back
        environment:
          - name=tom
          - DB_PATH=jdbc:sqlite:/data/ns.db
        restart: always
        privileged: true
        ports:
          - "9000:9000"
        networks:
          - "net"
        volumes:
          - "/root/k3s.kube.config:/k3s.kube.config"
          - "/root/data:/data"
          - "/etc/network/interfaces:/etc/network/interfaces"
      front:
        image: front:1.0
        container_name: front
        restart: always
        ports:
          - "10087:80"
        networks:
          - "net"
        volumes:
          - "/root/nginx.conf:/etc/nginx/nginx.conf"
    networks:
      net:
        
    • version
      1. v3 版本不支持 volume_from 和 extends 属性
      2. cpu 和 内存属性的设置移到了 deploy 中
      3. v3 版本直接支持 docker swarm,而 v2 版本不支持,这也是最主要的区别 如果是初学者,建议直接使用 v3。
    • services 多个服务
      • image 镜像名称
      • build 不使用镜像时候采用主动build镜像
      • environment 环境变量
      • expose 标示端口号
      • ports 映射端口号到宿主机
      • volumes 挂在目录到宿主机
      • depend_on 规定service加载顺序,例如数据库服务需要在后台服务前运行
      • container_name 容器名称
      • networks 网络(自定义网络名称)
      • restart always每次docker启动时候重启
      • links 连接目标容器(services下配置的名称)
      • privileged: true:容器可获得root权限
      • logging 日志选项
        • driver 配置驱动
        • options 可选配置
    • networks 配置自定义网络

    Docker-Compose命令详解

    1. docker-compose version :用于查看当前的版本

    2. docker-compose ps -a :查看当前启动服务 -a 查看所有包含已经停止的服务,不加则只展示运行中的服务

    3. docker-compose build:用于docker-compose文件中描述的build构建镜像

    4. docker-compose up 启动服务

    5. docekr-compose stop停止服务

    6. docker-compose start 启动停止的服务

    7. docker-compose run 启动docker-compose.yml描述的一个service

    8. docker-compose restart 重启服务

    9. docker-compose logs 查看日志

    10. docker-compose down 下线服务

    11. docker-compose pull 拉取镜像

    12. docker-compose push 推送镜像到仓库

    13. 更多命令参考 docker-compose help

    Docker-Compose实战

    1. 为项目创建目录:
    mkdir composetest
    cd composetest
    1. 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)

    在此示例中,redis是应用程序网络上的redis容器的主机名。我们为Redis使用默认端口6379。 3. requirements.txt在项目目录中创建另一个名为的文件,并将其粘贴到:

    flask
    redis
    1. 编写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"]

    有关如何编写Dockerfile的更多信息,请查看上篇文章

    1. 编写docker-compose.yml文件
    version: "3.9"
    services:
      web:
        build: .
        ports:
          - "5000:5000"
      redis:
        image: "redis:alpine"

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

    1. 运行服务
     docker-compose up

    在浏览器中输入http://localhost:5000/以查看该应用程序正在运行。

    下篇带大家详细介绍Docker-Machine,敬请期待!

    欢迎关注公众号!

    公众号回复:入群,扫码加入我们交流群!

    读一本好书,就是在和高尚的人谈话。

    欢迎关注我的公众号!里面可以加入微信技术交流群!
  • 相关阅读:
    常量与变量
    BandicamPortable破解软件的按照和设置
    普罗米修斯监控马哥亲自讲解
    为什么需要监控,在哪些层次上监控,监控什么
    prometheus比zabbix好在哪点?
    聊一聊几款流行监控系统,你知道几个?
    监控系统选型看这一篇够了!选择 Prometheus 还是 Zabbix ?
    DNS详细解析问题
    洛谷 P4025 [PA2014]Bohater(贪心)
    洛谷 P1842 [USACO05NOV]奶牛玩杂技(贪心)
  • 原文地址:https://www.cnblogs.com/1ssqq1lxr/p/14557380.html
Copyright © 2011-2022 走看看