目录

docker-compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

基本步骤

Compose 使用的三个步骤:

  • 使用 Dockerfile 定义应用程序的环境。
  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

docker-compose.yml配置范例

version: "3.1"
services:

    webserver:
      image: nginx:alpine
      container_name: jm-php7-2-webserver
      working_dir: /application
      volumes:
          - /var/www/html:/application
          - /var/log/nginx:/var/log/nginx
          - /var/www/docker/nginx+php/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      ports:
       - "8081:80"

    php-fpm:
      build: /var/www/docker/nginx+php/php7.2
      container_name: jm-php7-2-php-fpm
      working_dir: /application
      volumes:
        - /var/www/html:/application
        - /var/www/docker/nginx+php/php7.2/php-ini-overrides.ini:/etc/php/7.2/fpm/conf.d/99-overrides.ini

php-fpm服务build采用的Dockerfile:

FROM phpdockerio/php72-fpm:latest
WORKDIR "/application"

# Fix debconf warnings upon build
ARG DEBIAN_FRONTEND=noninteractive

# Install selected extensions and other stuff
RUN apt-get update \
    && apt-get -y --no-install-recommends install  php7.2-mysql php-redis php7.2-gd php-yaml \
    && apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*

docker-compose安装

Docker-compose安装

常用yml配置指令

  • build

    指定为构建镜像上下文路径:

    例如php-fpm 服务,指定为从上下文路径 /var/www/docker/nginx+php/php7.2/Dockerfile 所构建的镜像。

  • container_name

    指定自定义容器名称,而不是生成的默认名称。

  • depends_on

    设置依赖关系。

    docker-compose up :以依赖性顺序启动服务。在以下示例中,先启动 db 和 redis ,才会启动 web。 docker-compose up SERVICE :自动包含 SERVICE 的依赖项。在以下示例中,docker-compose up web 还将创建并启动 db 和 redis。 docker-compose stop :按依赖关系顺序停止服务。在以下示例中,web 在 db 和 redis 之前停止。

    version: "3.7"
    services:
    web:
        build: .
        depends_on:
        - db
        - redis
    redis:
        image: redis
    db:
        image: postgres
    

    注意:web 服务不会等待 redis db 完全启动 之后才启动。

  • dns

    自定义 DNS 服务器,可以是单个值或列表的多个值。

  • healthcheck

    用于检测 docker 服务是否健康运行。

    healthcheck:
    test: ["CMD", "curl", "-f", "http://localhost"] # 设置检测程序
    interval: 1m30s # 设置检测间隔
    timeout: 10s # 设置检测超时时间
    retries: 3 # 设置重试次数
    start_period: 40s # 启动后,多少秒开始启动检测程序
    
  • image

    指定容器运行的镜像。以下格式都可以:

    image: redis
    image: ubuntu:14.04
    image: tutum/influxdb
    image: example-registry.com:4000/postgresql
    image: a4bc65fd # 镜像id
    
  • restart

    • no:是默认的重启策略,在任何情况下都不会重启容器。
    • always:容器总是重新启动。
    • on-failure:在容器非正常退出时(退出状态非0),才会重启容器。
    • unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
    restart: "no"
    restart: always
    restart: on-failure
    restart: unless-stopped
    

    注:swarm 集群模式,请改用 restart_policy。

  • ulimits

    覆盖容器默认的 ulimit。

    ulimits:
    nproc: 65535
    nofile:
        soft: 20000
        hard: 40000
    
  • volumes

    将主机的数据卷或着文件挂载到容器里。

    webserver:
      image: nginx:alpine
      container_name: jm-php7-2-webserver
      working_dir: /application
      volumes:
          - /var/www/html:/application
          - /var/log/nginx:/var/log/nginx
          - /var/www/docker/nginx+php/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
    
  • logging

    服务的日志记录配置。

    driver:指定服务容器的日志记录驱动程序,默认值为json-file。有以下三个选项

    driver: "json-file"
    driver: "syslog"
    driver: "none"
    

    仅在 json-file 驱动程序下,可以使用以下参数,限制日志得数量和大小。

    logging:
    driver: json-file
    options:
        max-size: "200k" # 单个文件大小为200k
        max-file: "10" # 最多10个文件
    

    当达到文件限制上限,会自动删除旧得文件。

    syslog 驱动程序下,可以使用 syslog-address 指定日志接收地址。

    logging:
    driver: syslog
    options:
        syslog-address: "tcp://192.168.0.42:123"
    

docker-compose操作指令

docker-compose操作命令需要在配置文件docker-compose.yml所在目录或子目录操作才会生效。

如果需要sudo时,要注意使用sudo执行。

docker-compose –help你会看到如下这么多命令

  • build

    Build or rebuild services

  • bundle

    Generate a Docker bundle from the Compose file

  • config

    Validate and view the Compose file

  • create

    Create services

  • down

    Stop and remove containers, networks, images, and volumes

  • events

    Receive real time events from containers

  • exec

    Execute a command in a running container

  • help

    Get help on a command

  • images

    List images

  • kill

    Kill containers

  • logs

    View output from containers

  • pause

    Pause services

  • port

    Print the public port for a port binding

  • ps

    List containers

  • pull

    Pull service images

  • push

    Push service images

  • restart

    Restart services

  • rm

    Remove stopped containers

  • run

    Run a one-off command

  • scale

    Set number of containers for a service

  • start

    Start services

  • stop

    Stop services

  • top

    Display the running processes

  • unpause

    Unpause services

  • up

    Create and start containers

  • version

    Show the Docker-Compose version information   

docker-compose常用命令

docker-compose up -d nginx                     构建建启动nignx容器

docker-compose exec nginx bash            登录到nginx容器中

docker-compose down                              删除所有nginx容器,镜像

docker-compose ps                                   显示所有容器

docker-compose restart nginx                   重新启动nginx容器

docker-compose run --no-deps --rm php-fpm php -v  在php-fpm中不启动关联容器,并容器执行php -v 执行完成后删除容器

docker-compose build nginx                     构建镜像 。        

docker-compose build --no-cache nginx   不带缓存的构建。

docker-compose logs  nginx                     查看nginx的日志 

docker-compose logs -f nginx                   查看nginx的实时日志


docker-compose config  -q                        验证(docker-compose.yml)文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。 

docker-compose events --json nginx       以json的形式输出nginx的docker日志

docker-compose pause nginx                 暂停nignx容器

docker-compose unpause nginx             恢复ningx容器

docker-compose rm nginx                       删除容器(删除前必须关闭容器)

docker-compose stop nginx                    停止nignx容器

docker-compose start nginx                    启动nignx容器