全栈小白的gravatar头像
全栈小白 2023-03-18 15:57:10
【docker】- 一文搞懂docker-compose容器编排

原创声明:本人所发内容及涉及源码,均为亲手所撸,如总结内容有误,欢迎指出

唠嗑部分

本节我们来说说Docker-Compose,下面先看官方介绍

Compose项目是Docker官方的开源项目,负责实现对 Docker容器集群的快速编排。

其代码目前在https://github.com/docker/Compose 上开源。

Compose中有两个重要的概念:

  • 服务( service ):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。

  • 项目( project ):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

    Compose的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。

    Compose 项目由 Python编写,实现上调用了Docer服务提供的API来对容器进行管理。

    因此,只要所操作的平台支持Docer APl,就可以在其上利用Compose来进行编排管理。

既然有了docker,为什么还要用docker-compose呢,我们来说一下,首先docker每次只能启动一个容器,随着服务高可用的要求,企业级项目都会要求集群部署,同一个服务会部署很多个实例,实际是多台服务为用户提供服务

假如部署10个实例,使用docker就需要执行10次run命令,如果是10个微服务,每个微服务部署10份,那就是100份,噩梦...

docker-compose是对容器集群的快速编排工具,可以同时启动多个实例,下面我们来介绍一下

言归正传

安装(在安装了docker的前提下安装docker-compose)

# 安装
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` >/usr/local/bin/docker-compose
# 授权
sudo chmod +x /usr/local/bin/docker-compose

测试安装结果

docker-compose version

【docker】- 一文搞懂docker-compose容器编排

yml规范

docker-compose需要维护一个docker-compose.yml,学过SpringBoot的同学们都应该知道这种格式,就不多说了,自行百度哈

能写什么

  • build 构建镜像

  • command 用来覆盖容器启动的默认命令

  • container_name 容器名

  • depends_on 依赖于哪个容器,多个容器启动注意顺序

  • env_file 以配置文件的形式替换enviroment中的配置,因为直接写太敏感

  • enviroment 用来给容器中的某些环境赋值

  • healthcheck 心跳机制,检测容器是否存活

  • image 指定使用的镜像

  • networks 指定网络

  • ports 端口映射

  • volumes 数据卷

  • version 版本,大于等于3.0即可

docker-compose常用命令总结

说明:一个docker-compose.yml对应一个服务,下文说的服务代表yml中配置的所有容器

  • docker-compose up 启动命令,加-d选项表示后台启动 相当于docker run

  • docker-compose down 卸载yaml中的所有服务,包括网络、数据卷 相当于docker rm

  • docker-compose ps 查看服务中的所有容器 相当于docker ps

  • docker-compose stop 停止服务 相当于docker stop

  • docker-compose start 启动服务 相当于docker start

  • docker-compose restart 重启服务 相当于docker restart

  • docker-compose logs 查看服务日志,加-f选项会实时监听 相当于docker logs

  • docker-compose bulid 构建镜像,一般会使用下面代替 相当于docker build

  • docker-compose up -d --build 构建镜像+后台启动

  • docker-compose exec id bash 进入容器 相当于docker exec -it id bash

  • docker-compose -h 查看帮助

案例搭建

我们启动3台容器作为案例,搭建两台mysql,一台nginx

提前创建挂载目录并授权

mkdir -p /home/mysql-1/data
mkdir -p /home/mysql-2/data
​
chmod -R 777 /home/mysql-1/data
chmod -R 777 /home/mysql-2/data

【docker】- 一文搞懂docker-compose容器编排

docker-compose.yml

version: "3.0"
services:
  nginx: 
    container_name: cxs-nginx
    image: nginx
    ports:
      - "80:80"
    networks:
      - cxs-network
  mysql-1:
    container_name: cxs-mysql-1
    image: mysql:5.7
    ports:
      - "3307:3306"
    volumes:
      - mysqlconf1:/etc/mysql/conf.d
      - /home/mysql-1/data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
    networks:
      - cxs-network
  mysql1-2:
    container_name: cxs-mysql-2
    image: mysql:5.7
    ports:
      - "3308:3306"
    volumes:
      - mysqlconf2:/etc/mysql/conf.d
      - /home/mysql-2/data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
    networks:
      - cxs-network
volumes:
  mysqlconf1:
  mysqlconf2:
networks:
  cxs-network: 

启动(在docker-compose.yml目录执行)

docker-compose up -d

【docker】- 一文搞懂docker-compose容器编排

访问测试

nginx

【docker】- 一文搞懂docker-compose容器编排

连接mysql1,mysql将端口改为3308即可

【docker】- 一文搞懂docker-compose容器编排


打赏

已有1人打赏

最代码官方的gravatar头像
最近浏览
cytttt  LV2 6月7日
暂无贡献等级
1203767407  LV1 4月29日
3334004690  LV11 2023年10月31日
凌秋枫  LV8 2023年8月28日
wsq547  LV7 2023年7月23日
dapeng0011  LV15 2023年6月19日
hbsoft2008  LV16 2023年5月25日
江小囧 2023年4月8日
暂无贡献等级
java小书童  LV18 2023年3月29日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友