全栈小白的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头像
最近浏览
3334004690  LV3 2023年10月31日
凌秋枫  LV8 2023年8月28日
wsq547  LV7 2023年7月23日
dapeng0011  LV11 2023年6月19日
hbsoft2008  LV16 2023年5月25日
江小囧 2023年4月8日
暂无贡献等级
java小书童  LV17 2023年3月29日
hacker_  LV2 2023年3月26日
最代码官方  LV167 2023年3月18日
全栈小白  LV31 2023年3月18日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友