zoukankan      html  css  js  c++  java
  • 使用docker-compose管理docker容器

    一、作用

    个人理解:使用容器编排工具可以批量的管理容器、或容器组。比如有依赖关系的几个容器共通组成的服务,典型的有dockerhub。比如在单个服务启动后需要留启动脚本记录容器启动命令的情况。
    官方文档

    二、安装

    yum -y install epel-release
    yum -y install python-pip
    pip install docker-compose
    docker-compose version
    

    三、使用

    注意:使用docker-compose需要编写docker-compose.yml文件,并在文件的同级目录下执行。

    1.docker-compose.yaml

    version: '3'
    services:
      socket5:
        image: hub.ict.ac.cn/local_proxy/local_proxy:v3
        container_name: socket5
        restart: always
        ports:
          - '7012:7012'
        stdin_open: true
        tty: true
    
      busybox:
        image: docker.io/busybox
        container_name: busybox
        stdin_open: true
        tty: true
    

    2.指令

    • version 指定了 compose file 的版本,最新的版本为 3.4
    • services 下定义服务,这里定义了一个爬虫服务 spider
    • build 指定构建镜像上下文、Dockerfile 文件和 ARGS 等
    • volumes 用于创建卷并挂载,这里挂载了源码目录和数据存储目录
    • command 指定服务启动时执行的命令,参考 Dockerfile COMMAND
    image: 指定容器启动的镜像
    build: 服务除了可以基于指定的镜像
    command: 使用 command 可以覆盖容器启动后默认执行的命令
    **container_name**: 指定运行时容器名称,而不使用默认格式(<项目名称><服务名称><序号>)
    **restart**:重启策略
    **depends_on**: 指明服务之间依赖,解决了容器的依赖、启动先后的问题
    dns: 指定 DNS 服务器。
    tmpfs: 挂载临时目录到容器内部,与 run 的参数一样
    entrypoint: 在 Dockerfile 中有一个指令叫做 ENTRYPOINT 指令
    env_file: 专门存放变量的文件。如果通过 docker-compose -f FILE 指定了配置文件,则 env_file 中路径会使用配置文件路径。如果有变量名称与 environment 指令冲突,则以后者为准
    environment: 与上面的 env_file 设置镜像变量,它可以保存变量到镜像里面,也就是说启动的容器也会包含这些变量设置
    expose: 这个标签与 Dockerfile 中的 EXPOSE 指令一样,用于指定暴露的端口
    external_links:让 Compose 项目里面的容器连接到那些项目配置外部的容器
    extra_hosts: 添加主机名的标签,就是往 /etc/hosts 文件中添加一些记录
    labels: 向容器添加元数据,和 Dockerfile 的 LABEL 指令一个意思
    **links**: 上面的 depends_on 标签解决的是启动顺序问题,这个标签解决的是容器连接问题,与 Docker client 的 –link 一样效果,会连接到其它服务中的容器。
    logging: 用于配置日志服务。默认的 driver 是 json-file
    pid: 将 PID 模式设置为主机 PID 模式,跟主机系统共享进程命名空间。容器使用这个标签将能够访问和操纵其他容器和宿主机的名称空间。
    ports: 映射端口的标签。使用 HOST:CONTAINER 格式或者只是指定容器的端口,宿主机会随机映射端口。
    security_opt: 为每个容器覆盖默认的标签。简单说来就是管理全部服务的标签。
    stop_signal: 设置另一个信号来停止容器。在默认情况下使用的是 SIGTERM 停止容器。设置另一个信号可以使用 stop_signal 标签。
    volumes: 挂载一个目录或者一个已存在的数据卷容器
    cap_add, cap_drop: 添加或删除容器的内核功能
    devices: 设备映射列表
    extends: 这个标签可以扩展另一个服务,扩展内容可以是来自在当前文件,也可以是来自其他文件,相同服务的情况下,后来者会有选择地覆盖原有配置。
    

    3.启动、关闭

    启动
    docker-compose up 
    
    如果启动时指定-d标志,则以守护进程模式运行服务
    docker-compose up -d
    
    如果要批量启动服务(如启动 8 个 Scrapy),则在--scale选项指定服务的个数:
    docker-compose up -d --scale spider=8
    
    列出本地 docker-compose.yml 文件里定义的正在运行的所有服务
    docker-compose ps
    
    logs: 查看服务的日志,这个命令会追踪服务的日志文件,类似tail -f命令,使用Ctrl+C退出
    docker-compose logs
    
    stop: 停止所有服务,如果服务没有停止,可以使用docker-compose kill强制杀死服务
    docker-compose stop
    
    rm: 删除所有服务
    docker-compose rm
    

    4、官方示例

    version: "3"
    services:
    
      redis:
        image: redis:alpine
        ports:
          - "6379"
        networks:
          - frontend
        deploy:
          replicas: 2
          update_config:
            parallelism: 2
            delay: 10s
          restart_policy:
            condition: on-failure
      db:
        image: postgres:9.4
        volumes:
          - db-data:/var/lib/postgresql/data
        networks:
          - backend
        deploy:
          placement:
            constraints: [node.role == manager]
      vote:
        image: dockersamples/examplevotingapp_vote:before
        ports:
          - 5000:80
        networks:
          - frontend
        depends_on:
          - redis
        deploy:
          replicas: 2
          update_config:
            parallelism: 2
          restart_policy:
            condition: on-failure
      result:
        image: dockersamples/examplevotingapp_result:before
        ports:
          - 5001:80
        networks:
          - backend
        depends_on:
          - db
        deploy:
          replicas: 1
          update_config:
            parallelism: 2
            delay: 10s
          restart_policy:
            condition: on-failure
    
      worker:
        image: dockersamples/examplevotingapp_worker
        networks:
          - frontend
          - backend
        deploy:
          mode: replicated
          replicas: 1
          labels: [APP=VOTING]
          restart_policy:
            condition: on-failure
            delay: 10s
            max_attempts: 3
            window: 120s
          placement:
            constraints: [node.role == manager]
    
      visualizer:
        image: dockersamples/visualizer:stable
        ports:
          - "8080:8080"
        stop_grace_period: 1m30s
        volumes:
          - "/var/run/docker.sock:/var/run/docker.sock"
        deploy:
          placement:
            constraints: [node.role == manager]
    
    networks:
      frontend:
      backend:
    
    volumes:
      db-data:
    
  • 相关阅读:
    Python字符串转码问题
    tcpip详解笔记(21) TCP的路径MTU探测与长肥管道
    sync,fsync,fdatasync,fflush
    tcpip详解笔记(22) telnet协议
    tcpip详解笔记(18)TCP的超时与重传
    tcpip详解笔记(16) TCP的交互数据流
    Get exception description and stack trace which caused an exception
    tcpip详解笔记(20) TCP的Keepalive定时器
    [转]应该知道的Linux技巧
    How to prettyprint JSON script?
  • 原文地址:https://www.cnblogs.com/zhaobowen/p/13474667.html
Copyright © 2011-2022 走看看