Docker 学习(五)—— Docker Compose

目录

一、什么是Docker Compose?

二、核心功能

三、docker-compose.yaml文件

四、docker compose 常用命令

五、实战案例——部署discuz论坛和wordpress博客,使用adminer管理数据库

1. 编写 yaml 文件:

2. 通过该命令对配置文件进行自动检查,直到没有报错:

3.  然后创建并启动容器:

​编辑

4.  查看镜像:

5.验证: 浏览器访问8008端口​编辑 

6. 浏览器访问8009端口:


 

一、什么是Docker Compose?

Docker Compose是Docker官方的开源项目,是一个用于定义和运行多容器Docker应用程序的工具。

服务(Service)在Docker Compose中,一个服务实际上可以包括若干运行相同镜像的容器实例,代表一个应用的容器。例如,一个Web应用、数据库等都可以被视为一个服务。

项目(Project)由一组关联的应用容器组成的一个完整业务单元。在docker-compose.yml文件中定义,整个docker-compose.yml文件定义一个项目。Compose的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷的生命周期管理。

二、核心功能

定义和运行多容器应用:通过docker-compose.yml文件,用户可以定义多个容器的配置信息,包括容器之间的依赖关系、网络配置、数据卷管理等。然后,只需一个命令(如docker-compose up),就可以创建并启动所有定义的容器。

容器编排:Docker Compose支持容器的编排,可以根据容器的依赖关系自动启动和停止容器,确保应用在运行时具有正确的环境。

网络配置:Docker Compose支持自定义网络配置,使得容器之间的通信更加灵活和可靠。服务之间可以通过网络通信,Compose会自动创建网络。

数据卷管理:Docker Compose支持数据卷的挂载和管理,可以轻松地共享和持久化容器数据。

三、docker-compose.yaml文件

 docker-compose.yml 文件是 Docker Compose 的核心配置文件,用于定义和运行多容器 Docker 应用程序。

这个文件遵循 YAML格式,包含了一系列关于服务、网络、卷等配置的信息。

以下是一个基本的 docker-compose.yml 文件示例:

version: '3.8'  # 指定 Compose 文件的格式版本
services:  # 定义服务(容器)的列表【web 和 db】
  web:
    image: nginx:latest  # 指定容器使用的镜像
    ports: 
     - "80:80"  # 将主机的80端口映射到容器的80端口
    volumes:
      - ./html:/usr/share/nginx/html  # 将主机的./html目录挂载到容器的/usr/share/nginx/html目录
    networks:
      - mynetwork  # 指定容器使用的网络
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example  # 设置环境变量
    volumes:
      - db_data:/var/lib/mysql  # 使用命名卷存储数据库数据
    networks:
      - mynetwork
networks:  # 定义自定义网络
  mynetwork:
    driver: bridge  # 使用桥接网络模式
volumes:  # 定义命名卷
  db_data:

注意,YAML 文件对缩进非常敏感,因此请确保每个字段都正确缩进。

四、docker compose 常用命令

  •  docker-compose up:创建并启动容器。
  • docker-compose down:停止并删除容器、网络和卷(如果使用–volumes选项)。
  • docker-compose start:启动服务。
  • docker-compose stop:停止服务。
  • docker-compose restart:重启服务。
  • docker-compose logs:查看容器日志。
  • docker-compose ps:列出所有容器。
  • docker-compose config:检查
  • docker-compose.yml文件的配置。

五、实战案例——部署discuz论坛和wordpress博客,使用adminer管理数据库

1. 编写 yaml 文件:

name: bbs
networks:
  mynetwork:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.28.0.0/24
          gateway: 172.28.0.1

services:
  db:
    image: mysql:5.6
    container_name: mysql56
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    command:
      --character-set-server=utf8
      --collation-server=utf8_general_ci
    volumes:
      - db_data:/var/lib/mysql
    networks:
      mynetwork:
        ipv4_address: 172.28.0.10

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    container_name: wordpress
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wp_data:/var/www/html
    networks:
      mynetwork:
        ipv4_address: 172.28.0.11
    ports:
      - 8008:80
  discuz:
    depends_on:
      - db
    image: tencentci/discuz
    container_name: discuz
    restart: always
    environment:
      DISCUZ_DB_HOST: db:3306
    volumes:
      - discuz_data:/var/www/html
    networks:
      mynetwork:
        ipv4_address: 172.28.0.12
    ports:
      - 8009:80

  adminer:
    depends_on:
      - db
    image: adminer
    container_name: adminer
    restart: always
    networks:
      mynetwork:
        ipv4_address: 172.28.0.15
    ports:
      - 8080:8081

volumes:
  db_data:
  wp_data:
  discuz_data:
                                    

2. 通过该命令对配置文件进行自动检查,直到没有报错:

 docker  compose  config

3.  然后创建并启动容器:

docker  compose  up   #加上 -d 表示容器会在后台运行 ,不会占用当前终端

其中adminer 和 tencentci/discuz 可能拉取不下来,我采取的是本地导入的方法:

docker  load  -i  xxx.tar 

4.  查看镜像:

5.验证: 浏览器访问8008端口 

6. 浏览器访问8009端口:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值