docker-compose容器编排的使用

1. 介绍

docker-compose主要负责对单服务器上的多个Docker容器进行编排

一般一个容器中只运行一个服务。Compose允许用户通过一个单独的docker-compose.yml模板文件,来定义一组相关联的容器为一个项目(project)。可以同时启动、停止多个容器,还能解决容器启动的先后顺序

2. docker-compose的下载和卸载

[root@docker ~]# 
[root@docker ~]# wget https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64
[root@docker ~]# 
[root@docker ~]# mv docker-compose-linux-x86_64 docker-compose
[root@docker ~]# 
[root@docker ~]# chmod +x docker-compose
[root@docker ~]# 
[root@docker ~]# mv docker-compose /usr/libexec/docker/cli-plugins
[root@docker ~]# 
[root@docker ~]# docker compose version
Docker Compose version v2.5.0
[root@docker ~]# 

3. compose使用的步骤

  1. 从仓库拉取镜像或编写Dockerfile构建镜像
  2. 编写docker-compose.yml定义一个完整的业务
  3. 执行docker-compose up命令启动一个项目的多个服务

4. docker-compose常用命令

  • docker-compose -h:查看帮助
  • docker-compose up:启动当前docker-compose的所有服务
  • docker-compose up -d:以后台方式启动当前docker-compose的所有服务
  • docker-compose down:停止并删除当前docker-compose的容器、网络、卷、镜像
  • docker-compose exec docker-compose.yml里面的service id /bin/bash:进入容器实例内部
  • docker-compose ps:展示当前docker-compose编排的运行的所有容器
  • docker-compose top:展示当前docker-compose编排的容器进程
  • docker-compose logs docker-compose.yml里面的service id:查看容器输出日志
  • docker-compose config:检查docker-compose.yml的配置是否正确
  • docker-compose config -q:检查docker-compose.yml的配置是否正确,有问题才有输出
  • docker-compose restart:重启当前docker-compose的所有服务
  • docker-compose start:启动当前docker-compose的所有服务
  • docker-compose stop:停止当前docker-compose的所有服务

5. docker-compose.yml编写

docker-compose的两个重要概念:

  • 一个项目(project)是一组关联的容器组成的完整业务
  • 一个服务(service)是提供一个服务的容器

目标:假设mysql和redis构成一个完整的业务,这就是一个项目。但必须先启动mysql再启动redis,而且它们处于一个自定义的network下。如果项目中有自定义的镜像,可以先编写Dockerfile生成镜像

docker-compose.yml内容如下。其中service的名称不能冲突。network会自动创建

[root@docker ~]# 
[root@docker ~]# mkdir my_compose
[root@docker ~]# 
[root@docker ~]# cd my_compose/
[root@docker my_compose]# 
[root@docker my_compose]# cat docker-compose.yml 
services:

  redis:
    image: redis

    ports:
      - "6379:6379"

    privileged: true

    volumes:
      - /root/redis/data:/data

    networks: 
      - my_network

    command: redis-server --bind 0.0.0.0  --port 6379 --appendonly yes --cluster-enabled yes

    depends_on: 
      - mysql
 


  mysql:
    image: mysql

    container_name: my_mysql

    environment:
      MYSQL_ROOT_PASSWORD: 'Root_123'
      MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
      MYSQL_DATABASE: 'test_db'
      MYSQL_USER: 'bulut'
      MYSQL_PASSWORD: 'Bulut_123'

    ports:
       - "3306:3306"

    volumes:
       - /root/mysql/log:/var/log/mysql
       - /root/mysql/data:/var/lib/mysql
       - /root/mysql/conf:/etc/mysql/conf.d
       
    networks:
      - my_network

    # 兼容mysql 8.0以下的密码认证
    command: --default-authentication-plugin=mysql_native_password 



networks: 
   my_network: 
   
   
[root@docker my_compose]# 
[root@docker my_compose]# docker compose config -q
[root@docker my_compose]# 

6. 使用docker compose命令进行一键启动和停止

启动。可以看到network的name添加了项目的目录作为前缀,service如果没有指定container_name也会添加项目的目录作为前缀

[root@docker my_compose]# 
[root@docker my_compose]# docker compose up -d
[+] Running 3/3
 ⠿ Network my_compose_my_network  Created                                                                                                                             0.1s
 ⠿ Container my_mysql             Started                                                                                                                             0.6s
 ⠿ Container my_compose-redis-1   Started                                                                                                                             1.3s
[root@docker my_compose]# 
[root@docker my_compose]# docker network ls
NETWORK ID     NAME                    DRIVER    SCOPE
11634c75f412   bridge                  bridge    local
fc720e541b06   host                    host      local
6295427e8bc7   my_compose_my_network   bridge    local
fa2400985f50   none                    null      local
[root@docker my_compose]# 
[root@docker my_compose]# docker ps 
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                                  NAMES
b5b82b44ab05   redis     "docker-entrypoint.s…"   9 seconds ago   Up 7 seconds   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              my_compose-redis-1
71e61fe64ba1   mysql     "docker-entrypoint.s…"   9 seconds ago   Up 8 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   my_mysql
[root@docker my_compose]# 

停止

[root@docker my_compose]# 
[root@docker my_compose]# docker compose stop
[+] Running 2/2
⠿ Container my_compose-redis-1  Stopped                                                                                                                              0.3s
⠿ Container my_mysql            Stopped                                                                                                                              1.6s
[root@docker my_compose]# 
[root@docker my_compose]# docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS                      PORTS     NAMES
b5b82b44ab05   redis     "docker-entrypoint.s…"   4 minutes ago   Exited (0) 13 seconds ago             my_compose-redis-1
71e61fe64ba1   mysql     "docker-entrypoint.s…"   4 minutes ago   Exited (0) 12 seconds ago             my_mysql
[root@docker my_compose]# 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值