zoukankan      html  css  js  c++  java
  • docker compose

    简介

    定义和运行多个 Docker 容器的应用,一个项目往往包含多个容器,每次重启都需要手动重启多个容器,显得太不简洁,而docker-compose就是一个完美的解决方案。

    两个重要的概念

    1. 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例
    2. 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

    安装

    # yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
    # yum install python-pip
    # yum install gcc gcc-c++
    
    $ pip install -i https://pypi.tuna.tsinghua.edu.cn/simple docker-compose
    
    $ docker-compose --version
    

    命令

    因为docker-compose 是根据docker提供的api进行的一层封装,因此,只需要我们熟练掌握docker的命令,docker-compose的命令我想只需要记住如下两个即可。

    $docker-compose up
    

    该命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。
    链接的服务都将会被自动启动,除非已经处于运行状态。
    可以说,大部分时候都可以直接通过该命令来启动一个项目。
    默认情况,docker-compose up 启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很方便进行调试。
    当通过 Ctrl-C 停止命令时,所有容器将会停止。
    如果使用 docker-compose up -d,将会在后台启动并运行所有的容器。一般推荐生产环境下使用该选项。

    $docker-compose down
    

    此命令将会停止 up 命令所启动的容器,并移除网络.


    Compose模板文件

    模板文件是使用 Compose 的核心,涉及到的指令关键字也比较多。但大家不用担心,这里面大部分指令跟 docker run 相关参数的含义都是类似的。

    默认的模板文件名称为 docker-compose.yml,格式为 YAML 格式。

    先举一个mysql的小栗子

    version: '3'
    services:
      db:
        image: mysql:5.7
        environment:
          - MYSQL_ROOT_PASSWORD=root
        volumes:
          - /data/mysql:/var/lib/mysql
        ports:
          - 3306:3306
        restart: always
    

    下面介绍几个关键的指令,指令太多,生产环境下也不是都用得上,遵循二八原则嘛。

    build

    指定 Dockerfile 所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径)。 Compose 将会利用它自动构建这个镜像,然后使用这个镜像。

    version: '3'
    services:
    
      webapp:
        build: ./dir
    

    command

    覆盖容器启动后默认执行的命令。

    command: echo "hello world"
    

    depends_on

    解决容器的依赖、启动先后的问题。以下栗子会先启动db,redis,再启动web

    version: '3'
    
    services:
      web:
        build: .
        depends_on:
          - db
          - redis
    
      redis:
        image: redis
    
      db:
        image: postgres
    

    image

    指定为镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像

    ports

    暴露端口信息。

    使用宿主端口:容器端口

    volumes

    数据卷所挂载路径设置,但这里可以有两个选择:

    1. 绝对路径(见上述小栗子)
    2. 卷标
    version: '3'
    services:
      db:
        image: mysql:5.7
        environment:
          - MYSQL_ROOT_PASSWORD=root
        volumes:
          - mysql:/var/lib/mysql
        ports:
          - 3306:3306
    ...
    volumes:
      mysql:
    

    container_name

    指定容器名称

    networks

    $docker network create myNet # 新建网络
    
    version: "3"
    services:
    
      some-service:
        networks:
         - some-network
         - other-network
    
    networks:
      some-network:
      other-network:
    

    随着 Docker 网络的完善,强烈建议大家将容器加入自定义的 Docker 网络来连接多个容器,多容器间通过容器名-DNS解析进行互联。

    restart

    重启机制

    • no,默认策略,在容器退出时不重启容器
    • on-failure,在容器非正常退出时(退出状态非0),才会重启容器
    • on-failure:3,在容器非正常退出时重启容器,最多重启3次
    • always,在容器退出时总是重启容器
    • unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
    version: '2'
    services:
      web:
        image: apache
        restart: always
    

    environment

    设置环境变量,语法有如下两种

    environment:
      RACK_ENV: development
      SESSION_SECRET:
    
    environment:
      - RACK_ENV=development
      - SESSION_SECRET
    
  • 相关阅读:
    2017干货分享丨全球100款大数据工具汇总(附图)
    Hbase与Oracle比较(列式数据库与行式数据库)
    HBase底层存储原理
    关系数据库_关系代数的并行计算_数据库分类
    HBase与列存储
    ZooKeeper分布式过程协同技术详解2——了解ZooKeeper
    ZooKeeper分布式过程协同技术详解1——ZooKeeper的概念和基础
    facebook api之基本概念(中文)
    facebook api之Access Tokens之Business Manager System User
    facebook api之Access Tokens
  • 原文地址:https://www.cnblogs.com/zenan/p/10884058.html
Copyright © 2011-2022 走看看