十一、容器编排
11.1 简介
Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器
能干嘛
docker建议我们每一个容器中只运行一个服务,因为docker容器本身占用资源极少,所以最好是将每个服务单独的分割开来但是这样我们又面临了一个问题?
如果我需要同时部署好多个服务,难道要每个服务单独写Dockerfile然后在构建镜像,构建容器,这样累都累死了,所以docker官方给我们提供了docker-compose多服务部署的工具
例如要实现一个Web微服务项目,除了Web服务容器本身,往往还需要再加上后端的数据库mysql服务容器,redis服务器,注册中心eureka,甚至还包括负载均衡容器等等。。。。。。
Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
可以很容易地用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有依赖,完成构建。Docker-Compose 解决了容器与容器之间如何管理编排的问题。
安装
[root@VM-16-8-centos springboot_test]# curl -L "https://github.com/docker/compose/releases/download/1.29.2 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 664 100 664 0 0 982 0 --:--:-- --:--:-- --:--:-- 982 100 12.1M 100 12.1M 0 0 29870 0 0:07:06 0:07:06 --:--:-- 64748 [root@VM-16-8-centos springboot_test]# chmod +x /usr/local/bin/docker-compose [root@VM-16-8-centos springboot_test]# cd /usr/local/bin/ [root@VM-16-8-centos bin]# vim docker-compose [root@VM-16-8-centos bin]# ll total 13420 -rwxr-xr-x 1 root root 1001112 Aug 5 2020 busybox-x86_64 -rwxr-xr-x 1 root root 12737304 Apr 6 10:17 docker-compose [root@VM-16-8-centos bin]# docker-compose --version docker-compose version 1.29.2, build 5becea4c
11.2 docker-compose核心
一文件
docker-compose.yml
两要素
服务(service)
一个个应用容器实例,比如订单微服务、库存微服务、mysql容器、nginx容器或者redis容器
工程(project)
由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
Compose使用的三个步骤
- 编写Dockerfile定义各个微服务应用并构建出对应的镜像文件
- 使用 docker-compose.yml 定义一个完整业务单元,安排好整体应用中的各个容器服务。
- 最后,执行docker-compose up命令 来启动并运行整个应用程序,完成一键部署上线
11.3 Compose常用命令
docker-compose -h # 查看帮助
docker-compose up # 启动所有docker-compose服务
docker-compose up -d # 启动所有docker-compose服务并后台运行
docker-compose down # 停止并删除容器、网络、卷、镜像。
docker-compose exec yml里面的服务id # 进入容器实例内部 docker-compose exec docker-compose.yml文件中写的服务id /bin/bash
docker-compose ps # 展示当前docker-compose编排过的运行的所有容器
docker-compose top # 展示当前docker-compose编排过的容器进程
docker-compose logs yml里面的服务id # 查看容器输出日志
docker-compose config # 检查配置
docker-compose config -q # 检查配置,有问题才有输出
docker-compose restart # 重启服务
docker-compose start # 启动服务
docker-compose stop # 停止服务
11.4 快速入门Compose
跟着官网写个wordpress来写个实例
创建目录my_wordpress
进入目录,创建docker-compose.yml文件
version: "3.9" services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest volumes: - wordpress_data:/var/www/html ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: db_data: {} wordpress_data: {}
docker-compose up -d项目目录运行。
[root@VM-16-8-centos my_wordpress]# docker-compose up -d Creating network "my_wordpress_default" with the default driver Creating volume "my_wordpress_db_data" with default driver Creating volume "my_wordpress_wordpress_data" with default driver Pulling wordpress (wordpress:latest)... latest: Pulling from library/wordpress c229119241af: Already exists 47e86af584f1: Pull complete e1bd55b3ae5f: Downloading [====> ] 7.903MB/91.6MB e1bd55b3ae5f: Pull complete 1f3a70af964a: Pull complete 0f5086159710: Pull complete 7d9c764dc190: Pull complete ec2bb7a6eead: Pull complete 9d9132470f34: Pull complete fb23ab197126: Pull complete cbdd566be443: Pull complete be224cc1ae0f: Pull complete 629912c3cae4: Pull complete f1bae9b2bf5b: Pull complete 19542807523e: Pull complete 59191c568fb8: Pull complete 30be9b012597: Pull complete bb41528d36dd: Pull complete bfd3efbb7409: Pull complete 7f19a53dfc12: Pull complete 23dc552fade0: Pull complete 5133d8c158a7: Pull complete Digest: sha256:c8d7b938e831b715cf16f22b678f9c7a0ffd5e5efa9b9b2d77f39bed5cf5b2fd Status: Downloaded newer image for wordpress:latest Creating my_wordpress_db_1 ... done Creating my_wordpress_wordpress_1 ... done
测试
在云服务器上部署的记得放开开云服务器的端口
十二、Portainer
12.1 是什么
Portainer 是一款轻量级的应用,它提供了图形化界面,用于方便地管理Docker环境,包括单机环境和集群环境。
12.2 安装
官网
因为我docker环境部署在了云服务器上,所以直接选本地即可
测试
docker stats
十三、CAdvisor+InfluxDB+Granfana
docker ps
docker stats
用来查看容器占用资源
通过docker stats命令可以很方便的看到当前宿主机上所有容器的CPU,内存以及网络流量等数据,一般小公司够用了。。。。
但是,
docker stats统计结果只能是当前宿主机的全部容器,数据资料是实时的,没有地方存储、没有健康指标过线预警等功能
13.1 容器监控三剑客
CAdvisor监控收集+InfluxDB存储数据+Granfana展示图表
下面我们用docker-compose一键部署三剑客
version: '3.1' volumes: grafana_data: {} services: influxdb: image: tutum/influxdb:0.9 restart: always environment: - PRE_CREATE_DB=cadvisor ports: - "8083:8083" - "8086:8086" volumes: - ./data/influxdb:/data cadvisor: image: google/cadvisor links: - influxdb:influxsrv command: -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxsrv:8086 restart: always ports: - "8080:8080" volumes: - /:/rootfs:ro - /var/run:/var/run:rw - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro grafana: user: "104" image: grafana/grafana user: "104" restart: always links: - influxdb:influxsrv ports: - "3000:3000" volumes: - grafana_data:/var/lib/grafana environment: - HTTP_USER=admin - HTTP_PASS=admin - INFLUXDB_HOST=influxsrv - INFLUXDB_PORT=8086 - INFLUXDB_NAME=cadvisor - INFLUXDB_USER=root - INFLUXDB_PASS=root