使用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:
posted @ 2020-08-11 14:57  名字很长容易被惦记  阅读(7623)  评论(0编辑  收藏  举报