zoukankan      html  css  js  c++  java
  • Docker-Compose 入门到精通 (图解+秒懂+史上最全)

    文章很长,建议收藏起来慢慢读!疯狂创客圈总目录 语雀版 | 总目录 码云版| 总目录 博客园版 为您奉上珍贵的学习资源 :


    推荐:入大厂 、做架构、大力提升Java 内功 的 精彩博文

    入大厂 、做架构、大力提升Java 内功 必备的精彩博文 2021 秋招涨薪1W + 必备的精彩博文
    1:Redis 分布式锁 (图解-秒懂-史上最全) 2:Zookeeper 分布式锁 (图解-秒懂-史上最全)
    3: Redis与MySQL双写一致性如何保证? (面试必备) 4: 面试必备:秒杀超卖 解决方案 (史上最全)
    5:面试必备之:Reactor模式 6: 10分钟看懂, Java NIO 底层原理
    7:TCP/IP(图解+秒懂+史上最全) 8:Feign原理 (图解)
    9:DNS图解(秒懂 + 史上最全 + 高薪必备) 10:CDN图解(秒懂 + 史上最全 + 高薪必备)
    11: 分布式事务( 图解 + 史上最全 + 吐血推荐 ) 12:seata AT模式实战(图解+秒懂+史上最全)
    13:seata 源码解读(图解+秒懂+史上最全) 14:seata TCC模式实战(图解+秒懂+史上最全)

    Java 面试题 30个专题 , 史上最全 , 面试必刷 阿里、京东、美团... 随意挑、横着走!!!
    1: JVM面试题(史上最强、持续更新、吐血推荐) 2:Java基础面试题(史上最全、持续更新、吐血推荐
    3:架构设计面试题 (史上最全、持续更新、吐血推荐) 4:设计模式面试题 (史上最全、持续更新、吐血推荐)
    17、分布式事务面试题 (史上最全、持续更新、吐血推荐) 一致性协议 (史上最全)
    29、多线程面试题(史上最全) 30、HR面经,过五关斩六将后,小心阴沟翻船!
    9.网络协议面试题(史上最全、持续更新、吐血推荐) 更多专题, 请参见【 疯狂创客圈 高并发 总目录

    SpringCloud 精彩博文
    nacos 实战(史上最全) sentinel (史上最全+入门教程)
    SpringCloud gateway (史上最全) 更多专题, 请参见【 疯狂创客圈 高并发 总目录

    背景:

    下一个视频版本,从架构师视角,尼恩为大家打造高可用、高并发中间件的原理与实操。

    目标:通过视频和博客的方式,为各位潜力架构师,彻底介绍清楚架构师必须掌握的高可用、高并发环境,包括但不限于:

    • 高可用、高并发nginx架构的原理与实操

    • 高可用、高并发mysql架构的原理与实操

    • 高可用、高并发nacos架构的原理与实操

    • 高可用、高并发rocketmq架构的原理与实操

    • 高可用、高并发es架构的原理与实操

    • 高可用、高并发minio架构的原理与实操

    在这里插入图片描述

    why 高可用、高并发中间件的原理与实操:

    • 实际的开发过程中,很多小伙伴,常常是埋头苦干,聚焦crud开发,复杂一点的环境出了问题,都不能自己去启动,出了问题,就想热锅上的蚂蚁,无从下手
    • 常常的现象是: 大家 低头看路的时间多,抬头看天的时间少,技术视野比较狭窄。常常是埋头苦干业务开发,很少投入精力进行技术提升。
    • 作为架构师,或者未来想走向高端开发,或者做架构,必须掌握高可用、高并发中间件的原理,掌握其实操。

    本系列博客的具体内容,请参见 疯狂创客圈总目录 语雀版 | 总目录 码云版| 总目录 博客园版

    Docker-Compose 简介

    Docker-Compose 项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。

    Docker-Compose 项目由 Python 编写,调用 Docker 服务提供的API来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用Compose 来进行编排管理。

    Docker-Compose 用来实现Docker容器快速编排

    通过 Docker-Compose ,不需要使用shell脚本来启动容器,而使用 YAML 文件来配置应用程序需要的所有服务,然后使用一个命令,根据 YAML 的文件配置创建并启动所有服务。

    Docker-compose模板文件简介

    Compose允许用户通过一个docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
    Compose模板文件是一个定义服务、网络和卷的YAML文件。

    Compose模板文件默认路径是当前目录下的docker-compose.yml,可以使用.yml或.yaml作为文件扩展名。
    Docker-Compose标准模板文件应该包含version、services、networks 三大部分,最关键的是services和networks两个部分。

    eg:

    version: '3.5'
    services:
      nacos1:
        restart: always
        image: nacos/nacos-server:${NACOS_VERSION}
        container_name: nacos1
        privileged: true
        ports:
         - "8001:8001"
         - "8011:9555"
        deploy:
          resources:
            limits:
              cpus: '0.50'
              memory: 1024M 
        env_file: 
         - ./nacos.env 
        environment:
            NACOS_SERVER_IP: ${NACOS_SERVER_IP_1}
            NACOS_APPLICATION_PORT: 8001
            NACOS_SERVERS: ${NACOS_SERVERS}     
        volumes:
         - ./logs_01/:/home/nacos/logs/
         - ./data_01/:/home/nacos/data/
         - ./config/:/home/nacos/config/
        networks:
          - ha-network-overlay
      nacos2:
        restart: always
        image: nacos/nacos-server:${NACOS_VERSION}
        container_name: nacos2
        privileged: true
        ports:
         - "8002:8002"
         - "8012:9555"
        deploy:
          resources:
            limits:
              cpus: '0.50'
              memory: 1024M    
        env_file: 
         - ./nacos.env     
        environment:
            NACOS_SERVER_IP: ${NACOS_SERVER_IP_2}
            NACOS_APPLICATION_PORT: 8002
            NACOS_SERVERS: ${NACOS_SERVERS}
        volumes:
         - ./logs_02/:/home/nacos/logs/
         - ./data_02/:/home/nacos/data/
         - ./config/:/home/nacos/config/
        networks:
          - ha-network-overlay
      nacos3:
        restart: always
        image: nacos/nacos-server:${NACOS_VERSION}
        container_name: nacos3
        privileged: true
        ports:
         - "8003:8003"
         - "8013:9555"
        deploy:
          resources:
            limits:
              cpus: '0.50'
              memory: 1024M    
        env_file: 
         - ./nacos.env 
        environment:
            NACOS_SERVER_IP: ${NACOS_SERVER_IP_3}
            NACOS_APPLICATION_PORT: 8003
            NACOS_SERVERS: ${NACOS_SERVERS}         
        volumes:
         - ./logs_03/:/home/nacos/logs/
         - ./data_03/:/home/nacos/data/
         - ./config/:/home/nacos/config/
        networks:
          - ha-network-overlay
    networks:
       ha-network-overlay:
         external: true
    
    

    Docker-Compose 的编排处出来的部署架构

    在这里插入图片描述

    Docker-Compose 的编排结构

    Docker-Compose 将所管理的容器分为三层

    • 工程(project):一个工程包含多个服务
    • 服务(service):一个服务当中可包括多个容器实例
    • 容器(container)

    Docker-Compose 运行目录下的所有文件(docker-compose.ymlextends文件环境变量文件等)组成一个工程,若无特殊指定 工程名即为当前目录名

    Docker Compose 的核心就是其配置文件,采用 YAML 格式,默认为 docker-compose.yml

    在这里插入图片描述

    一个工程当中可包含多个服务每个服务中定义了容器运行的镜像、参数、依赖

    一个服务当中可包括多个容器实例但是:Docker-Compose 并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡,比如 Consul 技术。

    Docker-Compose 的工程配置文件默认为 docker-compose.yml,可通过环境变量 COMPOSB_FILE-f 参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。

    Compose 允许用户通过一个单独的 docker-compose.yml 模板文件(YAML格式)来定义一组相关联的应用容器为一个项目 (project)。

    YAML模板文件语法

    默认的模板文件是docker-compose.yml,其中定义的每个服务都必须通过image指令指定镜像,也可以通过build指令(需要Dockerfile)来自动构建。

    其他大部分都跟docker run 中类似。 如果使用build指令,在Dockerfile中设置的选项(例如:CMD,EXPOSE,VOLUME,ENV等)将自动被获取,无需在docker-compose.yml中再次被设置。

    docker-compose.yml 语法说明

    1、image

    指定为镜像名称或镜像ID。

    如果镜像不存在,Compose将尝试从互联网拉取这个镜像,例如: image: ubuntu image: orchardup/postgresql image: a4bc65fd

    指定服务的镜像名,若本地不存在,则 Compose 会去仓库拉取这个镜像:

    services:
      web:
        image: nginx
    

    2、build

    指定Dockerfile所在文件夹的路径。Compose将会利用他自动构建这个镜像,然后使用这个镜像。 build: ./dir

    3、command

    覆盖容器启动后默认执行的命令。 command: bundle exec thin -p 3000

    链接到其他服务容器,使用服务名称(同时作为别名)或服务别名(SERVICE:ALIAS)都可以

    links:
     - db
     - db:database
     - redis
    

    注意:使用别名会自动在服务器中的/etc/hosts 里创建,如:172.17.2.186 db,相应的环境变量也会被创建。

    链接到docker-compose.yml外部的容器,甚至并非是Compose管理的容器。参数格式和links类似。 external_links:

    - redis_1
     - project_db_1:mysql
     - project_db_2:sqlserver
    

    6、ports

    暴露端口信息。格式

    宿主机器端口:容器端口(HOST:CONTAINER)

    或者仅仅指定容器的端口(宿主机器将会随机分配端口)都可以。

    ports:
     - "3306"
     - "8080:80"
     - "127.0.0.1:8090:8001"
    

    注意:当使用 HOST:CONTAINER 格式来映射端口时,如果你使用的容器端口小于 60 你可能会得到错误得结果,因为 YAML 将会解析 xx:yy 这种数字格式为 60 进制。所以建议采用字符串格式。

    7、expose

    暴露端口,与posts不同的是expose只可以暴露端口而不能映射到主机,只供外部服务连接使用;仅可以指定内部端口为参数。

    expose:
     - "3000"
     - "8000"
    

    8、volumes

    设置卷挂载的路径。

    可以设置宿主机路径:容器路径(host:container)或加上访问模式(host:container:ro)ro就是readonly的意思,只读模式。

    volumes:
     - /var/lib/mysql:/var/lib/mysql
     - /configs/mysql:/etc/configs/:ro
    

    9、volunes_from

    挂载另一个服务或容器的所有数据卷。

    volumes_from:
     - service_name
     - container_name
    

    10、environment

    设置环境变量。可以属于数组或字典两种格式。

    如果只给定变量的名称则会自动加载它在Compose主机上的值,可以用来防止泄露不必要的数据

    environment:
     - RACK_ENV=development
     - SESSION_SECRET
    

    11、env_file

    从文件中获取环境变量,可以为单独的文件路径或列表。 如果通过docker-compose -f FILE指定了模板文件,则env_file中路径会基于模板文件路径。 如果有变量名称与environment指令冲突,则以后者为准。

    env_file: .env
    env_file:
     - ./common.env
     - ./apps/web.env
     - /opt/secrets.env
    

    环境变量文件中每一行都必须有注释,支持#开头的注释行。

    # common.env: Set Rails/Rack environment
    RACK_ENV=development
    

    12、extends

    基于已有的服务进行服务扩展。例如我们已经有了一个webapp服务,模板文件为common.yml.

    # common.yml
    webapp:
    build: ./webapp
    environment:
     - DEBUG=false
     - SEND_EMAILS=false
    

    编写一个新的 development.yml 文件,使用 common.yml 中的 webapp 服务进行扩展。 development.yml

    web:
    extends:
    file: common.yml
    service: 
      webapp:
        ports:
          - "8080:80"
        links:
          - db
        envelopment:
          - DEBUG=true
       db:
        image: mysql:5.7
    

    后者会自动继承common.yml中的webapp服务及相关的环境变量。

    13、net

    设置网络模式。使用和docker client 的 --net 参数一样的值。

    # 容器默认连接的网络,是所有Docker安装时都默认安装的docker0网络.
    net: "bridge"
    # 容器定制的网络栈.
    net: "none"
    # 使用另一个容器的网络配置
    net: "container:[name or id]"
    # 在宿主网络栈上添加一个容器,容器中的网络配置会与宿主的一样
    net: "host"
    

    Docker会为每个节点自动创建三个网络: 网络名称 作用 bridge 容器默认连接的网络,是所有Docker安装时都默认安装的docker0网络 none 容器定制的网络栈 host 在宿主网络栈上添加一个容器,容器中的网络配置会与宿主的一样 附录: 操作名称 命令 创建网络 docker network create -d bridge mynet 查看网络列表 docker network ls

    14、pid

    和宿主机系统共享进程命名空间,打开该选项的容器可以相互通过进程id来访问和操作。

    pid: "host"
    

    15、dns

    配置DNS服务器。可以是一个值,也可以是一个列表。
    dns: 8.8.8.8
    dns:
     - 8.8.8.8
     - 9.9.9.9
    

    16、cap_add,cap_drop

    添加或放弃容器的Linux能力(Capability)。

    cap_add:
     - ALL
    cap_drop:
     - NET_ADMIN
     - SYS_ADMIN
    

    配置DNS搜索域。可以是一个值也可以是一个列表。

    dns_search: example.com
    dns_search:
     - domain1.example.com
      - domain2.example.com
    working_dir, entrypoint, user, hostname, domainname, mem_limit, privileged, restart, stdin_open, tty, cpu_shares
    

    这些都是和 docker run 支持的选项类似。

    cpu_shares: 73
    working_dir: /code
    entrypoint: /code/entrypoint.sh
    user: postgresql
    hostname: foo
    domainname: foo.com
    mem_limit: 1000000000
    privileged: true
    restart: always
    stdin_open: true
    tty: true
    

    18、healthcheck

    健康检查,这个非常有必要,等服务准备好以后再上线,避免更新过程中出现短暂的无法访问。

    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost/alive"]
      interval: 5s
      timeout: 3s
    

    其实大多数情况下健康检查的规则都会写在 Dockerfile 中:

    FROM nginx
    RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
    HEALTHCHECK --interval=5s --timeout=3s CMD curl -f http://localhost/alive || exit 1
    

    19、depends_on

    依赖的服务,优先启动,例:

    depends_on:
      - redis
    

    20、deploy

    部署相关的配置都在这个节点下,例:

    deploy:
      mode: replicated
      replicas: 2
      restart_policy:
        condition: on-failure
        max_attempts: 3
      update_config:
        delay: 5s
        order: start-first # 默认为 stop-first,推荐设置先启动新服务再终止旧的
      resources:
        limits:
          cpus: "0.50"
          memory: 1g
    deploy:
      mode: global # 不推荐全局模式(仅个人意见)。
      placement:
        constraints: [node.role == manager]
    

    若非特殊服务,以上各节点的配置能够满足大部分部署场景了。

    docker-compose.yml实例

    version: '3.5'
    services:
      nacos1:
        restart: always
        image: nacos/nacos-server:${NACOS_VERSION}
        container_name: nacos1
        privileged: true
        ports:
         - "8001:8001"
         - "8011:9555"
        deploy:
          resources:
            limits:
              cpus: '0.50'
              memory: 1024M 
        env_file: 
         - ./nacos.env 
        environment:
            NACOS_SERVER_IP: ${NACOS_SERVER_IP_1}
            NACOS_APPLICATION_PORT: 8001
            NACOS_SERVERS: ${NACOS_SERVERS}     
        volumes:
         - ./logs_01/:/home/nacos/logs/
         - ./data_01/:/home/nacos/data/
         - ./config/:/home/nacos/config/
        networks:
          - ha-network-overlay
      nacos2:
        restart: always
        image: nacos/nacos-server:${NACOS_VERSION}
        container_name: nacos2
        privileged: true
        ports:
         - "8002:8002"
         - "8012:9555"
        deploy:
          resources:
            limits:
              cpus: '0.50'
              memory: 1024M    
        env_file: 
         - ./nacos.env     
        environment:
            NACOS_SERVER_IP: ${NACOS_SERVER_IP_2}
            NACOS_APPLICATION_PORT: 8002
            NACOS_SERVERS: ${NACOS_SERVERS}
        volumes:
         - ./logs_02/:/home/nacos/logs/
         - ./data_02/:/home/nacos/data/
         - ./config/:/home/nacos/config/
        networks:
          - ha-network-overlay
      nacos3:
        restart: always
        image: nacos/nacos-server:${NACOS_VERSION}
        container_name: nacos3
        privileged: true
        ports:
         - "8003:8003"
         - "8013:9555"
        deploy:
          resources:
            limits:
              cpus: '0.50'
              memory: 1024M    
        env_file: 
         - ./nacos.env 
        environment:
            NACOS_SERVER_IP: ${NACOS_SERVER_IP_3}
            NACOS_APPLICATION_PORT: 8003
            NACOS_SERVERS: ${NACOS_SERVERS}         
        volumes:
         - ./logs_03/:/home/nacos/logs/
         - ./data_03/:/home/nacos/data/
         - ./config/:/home/nacos/config/
        networks:
          - ha-network-overlay
    networks:
       ha-network-overlay:
         external: true
    

    YAML 文件格式 及 编写注意事项

    使用compose对Docker容器进行编排管理时,需要编写docker-compose.yml文件,初次编写时,容易遇到一些比较低级的问题,导致执行docker-compose up时先解析yml文件的错误。

    比较常见的是yml对缩进的严格要求。

    yml文件还行后的缩进,不允许使用tab键字符,只能使用空格,而空格的数量也有要求,经过实际测试,发现每一行增加一个空格用于缩进是正常的。

    aml 是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。类似于XML数据描述语言,语法比 XMAL简单的很多。

    YAML数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号[]括起来, hash用花括号{}括起来。

    使用 YAML时需要注意下面事项:
    使用缩进表示层级关系,不支持制表符tab键缩进,只能使用空格键缩进
    ● 缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级
    通常开头缩进2个空格
    字符后缩进1个空格,如冒号:空格 逗号,空格 横杠-空格文本之间的空格>
    用#号注释
    如果包含特殊字符用单引号' '引起来
    布尔值必须用引号" "括起来
    区分大小写
    字符串可以不用引号标注

    Docker-compose常用命令

    常用命令清单

    docker-compose 命令 --help                     获得一个命令的帮助
    docker-compose up -d nginx                     构建启动nignx容器
    docker-compose exec nginx bash                 登录到nginx容器中
    docker-compose down                            此命令将会停止 up 命令所启动的容器,并移除网络
    docker-compose ps                              列出项目中目前的所有容器
    docker-compose restart nginx                   重新启动nginx容器
    docker-compose build nginx                     构建镜像 
    docker-compose build --no-cache nginx          不带缓存的构建
    docker-compose top                             查看各个服务容器内运行的进程 
    docker-compose logs -f nginx                   查看nginx的实时日志
    docker-compose images                          列出 Compose 文件包含的镜像
    docker-compose config                          验证文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。 
    docker-compose events --json nginx             以json的形式输出nginx的docker日志
    docker-compose pause nginx                     暂停nignx容器
    docker-compose unpause nginx                   恢复ningx容器
    docker-compose rm nginx                        删除容器(删除前必须关闭容器,执行stop)
    docker-compose stop nginx                      停止nignx容器
    docker-compose start nginx                     启动nignx容器
    docker-compose restart nginx                   重启项目中的nignx容器
    docker-compose run --no-deps --rm php-fpm php -v   在php-fpm中不启动关联容器,并容器执行php -v 执行完成后删除容器
    

    1、Docker-Compose

    docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
    

    命令选项如下:

    • -f,–file FILE指定Compose模板文件,默认为docker-compose.yml,可以多次指定。
    • -p,–project-name NAME指定项目名称,默认将使用所在目录名称作为项目名。
    • -x-network-driver 使用Docker的可拔插网络后端特性(需要Docker 1.9+版本) -x-network-driver DRIVER指定网络后端的驱动,默认为bridge(需要Docker 1.9+版本)
    • -verbose输出更多调试信息
    • -v,–version打印版本并退出

    2、docker-compose up

    这个命令一定要记住,每次启动都要用到,只要学会使用的人记住这个就好了

    docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]
    

    选项包括:

    • -d 在后台运行服务容器
    • –no-color 不使用颜色来区分不同的服务的控制输出
    • –no-deps 不启动服务所链接的容器
    • –force-recreate 强制重新创建容器,不能与–no-recreate同时使用 –no-recreate 如果容器已经存在,则不重新创建,不能与–force-recreate同时使用
    • –no-build 不自动构建缺失的服务镜像
    • –build 在启动容器前构建服务镜像
    • –abort-on-container-exit 停止所有容器,如果任何一个容器被停止,不能与-d同时使用
    • -t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒)
    • –remove-orphans 删除服务中没有在compose文件中定义的容器
    • –scale SERVICE=NUM 设置服务运行容器的个数,将覆盖在compose中通过scale指定的参数
      docker-compose up 启动所有服务
      docker-compose up -d 在后台所有启动服务
    • -f 指定使用的Compose模板文件,默认为docker-compose.yml,可以多次指定。
      docker-compose -f docker-compose.yml up -d

    3、docker-compose ps

    docker-compose ps [options] [SERVICE...]
    

    docker-compose ps 列出项目中目前的所有容器

    4、docker-compose stop

    docker-compose stop [options] [SERVICE...]
    

    选项包括:

    • -t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒)
      docker-compose stop 停止正在运行的容器,可以通过docker-compose start 再次启动

    5、docker-compose -h

    docker-compose -h 查看帮助

    6、docker-compose down

    docker-compose down [options]
    

    停止和删除容器、网络、卷、镜像。
    选项包括:

    • –rmi type,删除镜像,类型必须是:all,删除compose文件中定义的所有镜像;local,删除镜像名为空的镜像
    • -v, –volumes,删除已经在compose文件中定义的和匿名的附在容器上的数据卷
    • –remove-orphans,删除服务中没有在compose中定义的容器
      docker-compose down 停用移除所有容器以及网络相关

    7、docker-compose logs

    docker-compose logs [options] [SERVICE...]
    

    查看服务容器的输出。
    默认情况下,docker-compose将对不同的服务输出使用不同的颜色来区分。可以通过–no-color来关闭颜色。

    8、docker-compose build

    docker-compose build [options] [--build-arg key=val...] [SERVICE...]
    

    构建(重新构建)项目中的服务容器。
    选项包括:

    • –compress 通过gzip压缩构建上下环境
    • –force-rm 删除构建过程中的临时容器
    • –no-cache 构建镜像过程中不使用缓存
    • –pull 始终尝试通过拉取操作来获取更新版本的镜像
    • -m, –memory MEM为构建的容器设置内存大小
    • –build-arg key=val为服务设置build-time变量
      服务容器一旦构建后,将会带上一个标记名。可以随时在项目目录下运行docker-compose build来重新构建服务

    9、docker-compose pull

    docker-compose pull [options] [SERVICE...]
    

    拉取服务依赖的镜像。
    选项包括:

    • –ignore-pull-failures,忽略拉取镜像过程中的错误
    • –parallel,多个镜像同时拉取
    • –quiet,拉取镜像过程中不打印进度信息

    10、docker-compose restart

    docker-compose restart [options] [SERVICE...]
    

    重启项目中的服务。
    选项包括:

    • -t, –timeout TIMEOUT,指定重启前停止容器的超时(默认为10秒)

    11、docker-compose rm

    docker-compose rm [options] [SERVICE...]
    

    删除所有(停止状态的)服务容器。
    选项包括:

    • –f, –force,强制直接删除,包括非停止状态的容器
    • -v,删除容器所挂载的数据卷
      docker-compose rm 删除所有(停止状态的)服务容器。推荐先执行docker-compose stop命令来停止容器。

    12、docker-compose start

    docker-compose start [SERVICE...]
    

    启动已经存在的服务容器。

    13、docker-compose run

    docker-compose run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]
    

    在指定服务上执行一个命令。
    docker-compose run ubuntu ping www.baidu.com 在指定容器上执行一个ping命令。

    14、docker-compose scale

    docker-compose scale web=3 db=2 设置指定服务运行的容器个数。通过service=num的参数来设置数量

    15、docker-compose pause

    docker-compose pause [SERVICE...]
    

    暂停一个服务容器

    16、docker-compose kill

    docker-compose kill [options] [SERVICE...]
    

    通过发送SIGKILL信号来强制停止服务容器。 支持通过-s参数来指定发送的信号,例如通过如下指令发送SIGINT信号: docker-compose kill -s SIGINT

    17、dokcer-compose config

    docker-compose config [options]
    

    验证并查看compose文件配置。
    选项包括:

    • –resolve-image-digests 将镜像标签标记为摘要
    • -q, –quiet 只验证配置,不输出。 当配置正确时,不输出任何内容,当文件配置错误,输出错误信息
    • –services 打印服务名,一行一个
    • –volumes 打印数据卷名,一行一个

    18、docker-compose create

    docker-compose create [options] [SERVICE...]
    

    为服务创建容器。
    选项包括:

    • –force-recreate:重新创建容器,即使配置和镜像没有改变,不兼容–no-recreate参数
    • –no-recreate:如果容器已经存在,不需要重新创建,不兼容–force-recreate参数
    • –no-build:不创建镜像,即使缺失
    • –build:创建容器前,生成镜像

    19、docker-compose exec

    docker-compose exec [options] SERVICE COMMAND [ARGS...]
    

    选项包括:

    • -d 分离模式,后台运行命令。
    • –privileged 获取特权。
    • –user USER 指定运行的用户。
    • -T 禁用分配TTY,默认docker-compose exec分配TTY。
    • –index=index,当一个服务拥有多个容器时,可通过该参数登陆到该服务下的任何服务,例如:docker-compose exec –index=1 web /bin/bash ,web服务中包含多个容器

    20、docker-compose port

    docker-compose port [options] SERVICE PRIVATE_PORT
    

    显示某个容器端口所映射的公共端口。
    选项包括:

    • –protocol=proto,指定端口协议,TCP(默认值)或者UDP
    • –index=index,如果同意服务存在多个容器,指定命令对象容器的序号(默认为1)

    21、docker-compose push

    docker-compose push [options] [SERVICE...]
    

    推送服务依的镜像。
    选项包括:

    • –ignore-push-failures 忽略推送镜像过程中的错误

    22、docker-compose unpause

    docker-compose unpause [SERVICE...]
    

    恢复处于暂停状态中的服务。

    23、docker-compose version

    docker-compose version
    

    打印版本信息。

    查看日志

    docker-compose logs 查看实时日志(日志最后的N行、某刻后日志) 实践笔记

    参数说明

    View output from containers.
    
    Usage: logs [options] [SERVICE...]
    
    Options:
        --no-color          Produce monochrome output.
        -f, --follow        Follow log output.  实时输出日志,最后一行为当前时间戳的日志
        -t, --timestamps    Show timestamps. 显示时间戳
        --tail="all"        Number of lines to show from the end of the logs for each container.    
        						显示最后多少行日志, 默认是all (如: -tail=10 : 查看最后的 10 行日志。)
                            
    
    

    全屏滚到底部结束

    docker-compose logs

    rabbitmq | 2021-01-08 06:33:09.091 [error] <0.1007.2> Channel error on connection <0.25180.0>
    rabbitmq | operation basic.ack caused a channel exception precondition_failed: unknown delivery tag
    
    
    

    全屏滚到底部并继续持续输出日志

    docker-compose logs -f

    rabbitmq | 2021-01-08 06:33:09.091 [error] <0.1007.2> Channel error on connection <0.25180.0>
    rabbitmq | operation basic.ack caused a channel exception precondition_failed: unknown delivery tag
    
    
    

    相当于

    tail -f

    全屏滚到底部并继续持续输出日志并显示时间戳

    docker-compose logs -f -t

    rabbitmq | 2021-01-08T06:33:09.092091217Z 2021-01-08 06:33:09.091 [error] <0.1007.2> Channel
    rabbitmq | 2021-01-08T06:33:09.092109187Z operation basic.ack caused a channel exception
    
    
    

    全屏滚到底部显示最后N行并继续持续输出日志并显示时间戳

    docker-compose logs -f -t --tail=10

    rabbitmq | 2021-01-08T06:33:09.092091217Z 2021-01-08 06:33:09.091 [error] <0.1007.2> Channel
    rabbitmq | 2021-01-08T06:33:09.092109187Z operation basic.ack caused a channel exception
    
    
    
  • 相关阅读:
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之用户管理(1)
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之创建Viewport(2)
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之用户管理(2)
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之完成登录功能
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口调试
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之创建Viewport(1)
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之创建输出验证码图片的控制器
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之调整首页显示
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之用户管理(3)
  • 原文地址:https://www.cnblogs.com/crazymakercircle/p/15505199.html
Copyright © 2011-2022 走看看