Docker Compose

Docker Compose

1. Docker Compose 可以做什么?

主要是解决容器管理的问题。举个例子,一个小型的 LNMP 网站,需要 Linux 容器,Nginx 容器,MySQL容器,PHP容器 相互配合,这时 docker compose 就派上用场了。

2. Docker Compose 常用命令

命令 解释
docker-compose ps 查看当前文件夹下 compose 管理的容器
docker-compose start CONTAINER_NAME 启动容器
docker-compose stop CONTAINER_NAME 停止容器
docker-compose -p PROJECT_NAME up -d 创建并启动当前文件夹下 docker-compose.yml 配置的 所有容器(-d:后台运行,-p:指定项目名称)可以使用 -f 指定 启动时读取的 配置文件
docker-compose down 停止 并 删除所管理的容器
docker-compose logs 容器名称 查看容器的log日志

3. 编写 docker-compose.yml 配置文件

# 代表我们定义的 docker-compose.yml 文件内容所采用的版本
version: "3"

networks:
  frontend:
  backend:
  # 定义了网络驱动的类型,并指定了子网的网段
  spnet:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 10.10.1.0/24

volumes:
  mysql-data:
  external-data:
    # 如果我们想把属于 Docker Compose 项目以外的数据卷引入进来直接使用,我们可以将数据卷定义为外部引入,
    # 在加入 external 定义后,Docker Compose 在创建项目时不会直接创建数据卷,而是优先从 Docker Engine 中已有的数据卷里寻找并直接采用。
    external: true

services:

  redis:
    # 镜像
    image: redis:3.2
    # 网络
    networks:
      backend:
        # 定义网络别名
        aliases:
          - backend.database
    # 数据卷
    volumes:
      - ./redis/redis.conf:/etc/redis.conf:ro
    # 端口映射
    ports:
      - "6379:6379"
    # Redis 启动命令
    command: ["redis-server", "/etc/redis.conf"]

  database:
    image: mysql:5.7
    networks:
      - backend

    # 应用已经定义的数据卷
    volumes:
      - ./mysql/my.cnf:/etc/mysql/my.cnf:ro
      - mysql-data:/var/lib/mysql

    # 环境变量
    environment:
      - MYSQL_ROOT_PASSWORD=my-secret-pw
    ports:
      - "3306:3306"

  webapp:
    build: ./webapp
    networks:
      - frontend
      - backend
    volumes:
      - ./webapp:/webapp

    # 依赖
    depends_on:
      - redis
      - database

  nginx:
    image: nginx:1.12
    networks:
      - frontend
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./nginx/conf.d:/etc/nginx/conf.d:ro
      - ./webapp/html:/webapp/html
    depends_on:
      - webapp
    ports:
      - "80:80"
      - "443:443"
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!