docker-compose使用

  • 下载二进制文件

https://github.com/docker/compose/releases
  • 基本使用创建文件 docker-compose.yml

  • 使用external加入以知网络

version: "3"
services:
  caddy:
    image: "caddy:latest"
    container_name: "caddy_compose"
    volumes:
      - "/home/jcleng/desk/work/www:/home/jcleng/desk/work/www"
      - "/home/jcleng/desk/work/www/docker_data/Caddyfile:/etc/caddy/Caddyfile"
      - "caddy_data:/data"
      - "caddy_config:/config"
    ports:
      - 8080:8080
      - 4443:443
    tty: true
  adminer:
    image: adminer
    container_name: "adminer_compose"
    ports:
      - 8081:8080
    networks:
      - pub
  haishanh_yacd:
    image: haishanh/yacd
    container_name: "yacd_compose"
    ports:
      - 8082:80
# 声明持久化的虚拟卷
volumes:
  caddy_data:
  caddy_config:
# 声明已有网络
networks:
  pub:
    external: true
  • 使用links创建通信网络

version: "3"
services:
  caddy:
    image: "caddy"
    container_name: "caddy_compose"
    volumes:
      - "/vagrant_data:/vagrant_data"
      - "/vagrant_data/caddy/Caddyfile:/etc/caddy/Caddyfile"
      - "caddy_data:/data"
      - "caddy_config:/config"
    ports:
      - 80:80
      - 443:443
    tty: true
    links:
      - redis:redis_client
      - phpfpm:phpfpm_client
  phpfpm:
    image: "php:mysqli"
    container_name: "phpfpm_compose"
    volumes:
      - "/vagrant_data:/vagrant_data"
    # network_mode: host
    links:
      - mysql:mysql_client
    tty: true
  redis:
    image: "library/redis:latest"
    container_name: "redis_compose"
    # network_mode: host
    tty: true
    volumes:
      - "redis_data:/data"
  mysql:
    image: "mysql:5.6"
    container_name: "mysql_compose"
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: "root"
    command: [ "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci" ]
    volumes:
      - "mysql_data:/var/lib/mysql/"
      # - "./initdb:/docker-entrypoint-initdb.d"
      # - "/vagrant_data/caddy/my.cnf:/usr/my.cnf"
      # "--defaults-file=/usr/my.cnf",
    tty: true
  adminer:
    image: adminer
    container_name: "adminer_compose"
    links:
      - mysql:mysql_client
      - pgsql:pgsql_client
    ports:
      - 8080:8080
  pgsql:
    image: postgres:latest
    container_name: "pgsql_compose"
    ports:
      - 5432:5432
    environment:
      POSTGRES_PASSWORD: "pgsql"
    volumes:
      - "pgsql_data:/var/lib/postgresql/data/"
  phpfpm71:
    image: 71edc26b4e67
    container_name: "phpfpm71_compose"
    volumes:
      - "/home/jcleng/desk/work/www:/home/jcleng/desk/work/www"
    tty: true
    networks:
      - pub
    links:
      - rabbit:rabbit_client
    command: "/usr/bin/php-cgi -b 0.0.0.0:9000"
  rabbit:
    image: f1a77cb119f4
    container_name: "rabbit_container"
    ports:
      - 15671:15671
      - 15672:15672
      - 25672:25672
      - 4369:4369
      - 5671:5671
      - 5672:5672
    volumes:
      - "rabbit_data:/var/lib/rabbitmq"
    networks:
      - pub
# 声明持久化的虚拟卷
volumes:
  caddy_data:
  redis_data:
  caddy_config:
  mysql_data:
  pgsql_data:
  rabbit_data:
  • 其他

  dbninjia:
    image: "fblgit/dbninja:latest"
    container_name: "dbninjia_compose"
    links:
      - mysql:mysql_client
    ports:
      - "8081:80"
  • 启动

# -d 后台运行
docker-compose up -d
# 只启动部分服务,如:caddy
docker-compose up -d caddy

# --volumes 关闭同时删除对应的卷
docker-compose down --volumes
  • 使用指定的时区

# /etc/zoneinfo/Asia/Shanghai是一个文件,通过TZ进行使用

    environment:
      - TZ=Asia/Shanghai
    volumes:
      - "/etc/zoneinfo/Asia/Shanghai:/etc/timezone:ro"
      - "/etc/zoneinfo/Asia/Shanghai:/etc/localtime:ro"
  • 使用.env文件

DATABASE_PREFIX = cmf_
version: "3"
services:
  nginx:
    image: nginx:latest
    container_name: "nginx_cmf"
    privileged: true
    ports:
    - 8080:80
    volumes:
    - "./:/srv"
    - "./nginx/conf.d:/etc/nginx/conf.d"
    environment:
      PMA_ARBITRARY: ${DATABASE_PREFIX}
      # 必须设置否则异常
      MUSTDATE: ${MUSTDATE:?MUSTDATE未设置}
# 查看是否生效
docker compose config
# name: cmf
# services:
#   nginx:
#     container_name: nginx_cmf
#     environment:
#       PMA_ARBITRARY: cmf_
#     image: nginx:latest
#     networks:
#       default: null
#     ports:
#       - mode: ingress
#         target: 80
#         published: "8080"
#         protocol: tcp
#     privileged: true
#     volumes:
#       - type: bind
#         source: /home/jcleng/work/cmf
#         target: /srv
#         bind:
#           create_host_path: true
#       - type: bind
#         source: /home/jcleng/work/cmf/nginx/conf.d
#         target: /etc/nginx/conf.d
#         bind:
#           create_host_path: true
# networks:
#   default:
#     name: cmf_default
  • 队列实践

  phpqueue_loop:
    image: docker.2011101.xyz/dockette/php:7.4-fpm
    container_name: "phpqueue_loop_cmf"
    restart: on-failure
    privileged: true
    working_dir: "/srv"
    volumes:
      - "./:/srv"
      - "./php/999-custom.ini:/etc/php/7.4/fpm/conf.d/999-custom.ini"
    command: php think loop -f do
  phpqueue_run:
    image: docker.2011101.xyz/dockette/php:7.4-fpm
    deploy:
      replicas: 10
    restart: on-failure
    privileged: true
    working_dir: "/srv"
    volumes:
      - "./:/srv"
      - "./php/999-custom.ini:/etc/php/7.4/fpm/conf.d/999-custom.ini"
    command: php think queue:listen --queue default --timeout=0 --memory=1024