Docker学习笔记 - 第五篇:容器编排

cc老师最新一期的高级架构师课程终于确定日期了,7月6号正式开课,现在618活动,三天限时折扣中6800一人不限时免费更新课程是最大的卖点,里面包含了现在主流的架构,以及最新的技术,据说从理论到运用全部带着做,像现在面试常用的 Netty, Redis, Kafka,Zookeeper, Dubbo, Nginx + openResty + kong + Lua, ElasticSearch等技术都深入源码层级,对于有想跟我一样有着像提高自身技术的同学,课程的详情都在私塾的首页详细说明了,感兴趣的小伙伴,可以一起去 【私塾在线 】 学习

1.1 Docker容器编排

1.1.1 编排简介

Docker的最佳实践建议:一个容器只运行一个进程。而实际的应用会由多个组件构成,要运行多个组件就需要运行多个容器,这就需要对这多个容器进行编排。
所谓编排:主要就是多个docker容器的自动配置、协作和管理服务的过程。Docker提供了docker-compose工具来实现。

1.1.2 Docker-compose简介

compose是用来定义和运行一个或多个容器应用的工具,使用python开发,通过yml文件来定义多个容器应用,非常适合在单机环境下部署一个或多个容器,并自动把多个容器互相关联起来。
其实,docker-compose做的就相当于解析配置文件,然后按照配置去执行一系列的docker命令。

1.1.3 Docker-compose安装

官方安装文档:https://docs.docker.com/compose/install/
Docker-compose基本示例
1:准备好要启动的镜像,虽然可以直接在compose里面build镜像,建议还是先准备好
2:编写docker-compose.yml
3:然后就docker-compose up -d,启动就好了
4:docker-compose.yml示例如下:

  1. version: '2'
  2. services:
  3. mysqldb:
  4. image: 'mysql:latest'
  5. environment:
    • MYSQL_ROOT_PASSWORD=cc
  6. volumes:
    • /ccuse/programes/mysqldata:/var/lib/mysql
  7. privileged: true
    1. web:
  8. image: 'cctomcat:9.0'
  9. ports:
    • "9080:8080"
  10. volumes:
    • /ccuse/programes/tomcat9docker/webapps/test:/usr/local/tomcat/webapps/test
  11. privileged: true
  12. links:
    • mysqldb:dblink

1.1.4 Docker-compose yml文件的配置

1:一份标准配置文件可以包含 version、services、networks 三大部分,详细的参照指南见官方网站: https://docs.docker.com/compose/compose-file/
2:version目前是有1,2,3这么三个
3:srvices常见的配置有:
(1)服务名称:用来表示一个服务,自定义的
(2)image:指定服务的镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像,Build和image必须使用一个。
(3)build:
服务除了可以基于指定的镜像,还可以基于一份 Dockerfile,在使用 up 启动之时执行构建任务,这个构建标签就是 build,它可以指定 Dockerfile 所在文件夹的路径。Compose 将会利用它自动构建这个镜像,然后使用这个镜像启动服务容器。
如果你同时指定了 image 和 build 两个标签,那么 Compose 会构建镜像并且把镜像命名为 image 后面的那个名字。
(4)args:
类似Dockerfile 中的 ARG 指令,可以在构建过程中指定环境变量,构建成功后取消
(5)command:使用 command 可以覆盖容器启动后默认执行的命令
(6)container_name:自定义容器的名称
(7)links:指定与其它容器的连接,与Docker client的--link一样效果
(8)volumes:将host主机上的路径或文件,挂载到容器中
(9)ports:将host主机的端口映射到容器的某个端口
(10)environment:设置环境变量, 与Dockerfile 中的 ENV 指令一样会把变量一直保存在镜像、容器中,类似 docker run -e 的效果
(11)privileged:设置挂载目录的权限
(12)depends_on:一般项目容器启动的顺序是有要求的,可以用depends_on来解决容器的依赖、启动先后的问题。
……还有很多,可以查阅官方文档。
Docker-compose 的networks配置
容器间的通讯,除了使用--link外,现在更推荐使用自定义网络,然后利用服务名进行通讯。每个自定义网络都可以配置很多东西,包括网络所使用的驱动、网络地址范围等设置。例如:
networks:
frontend:
backend:
1:你会看到frontend、backend后面是空的,这是指一切都使用默认,换句话说,在单机环境中,将意味着使用 bridge 驱动;而在 Swarm 环境中,使用 overlay 驱动,而且地址范围完全交给 Docker 引擎决定。
2:然后在每个services配置里面,也有一个networks,用来指定服务要连接到哪些网络上,可以指定多个,例如:
services:
nginx:
...
networks:

  • frontend
    web:
    ...
    networks:
  • frontend
  • backend
    mysql:
    ...
    networks:
  • backend
    3:连接到同一个网络的容器,可以进行互连;而不同网络的容器则会被隔离。
    4:处于同一网络的容器,可以使用服务名访问对方
    5:给前面的例子添加networks的配置,如下:
    1. version: '2'
    2. services:
    3. mysqldb:
    4. image: 'mysql:latest'
    5. environment:
      • MYSQL_ROOT_PASSWORD=cc
    6. volumes:
      • /ccuse/programes/mysqldata:/var/lib/mysql
    7. privileged: true
    8. networks:
      • frontend
    9. web:
    10. image: 'cctomcat:9.0'
    11. ports:
      • "9080:8080"
    12. volumes:
      • /ccuse/programes/tomcat9docker/webapps/test:/usr/local/tomcat/webapps/test
    13. privileged: true
    14. links:
      • mysqldb:dblink
    15. networks:
      • frontend
    16. networks:
    17. frontend:
    18. backend:

      1.2 Docker集群管理工具介绍

      1.2.1 Docker原生提供的工具

      1:compose:用来组装多个容器构成应用的工具
      2:machine
      machine是一个简化Docker安装的命令行工具,支持多平台安装docker,可以方便的在各种环境,比如笔记本、云平台、数据中心里安装docker。
      machine本质上就是一个docker host主机和经过配置的docker client的结合体。
      3:swarm
      docker社区原生提供的容器集群管理工具,可以把多个docker主机组成的系统转换成为单一的虚拟docker主机
      ###1.2.2 Kubernetes(K8S)
      google推出的开源的Kubernetes,用于跨主机群集自动部署,扩展和操作应用程序容器,提供以容器为中心的基础架构。利用Kubernetes能很方便管理多台Docker主机中的容器。 主要功能如下:
      1:将多台Docker主机抽象为一个资源,以集群方式管理容器,包括任务调度、资源管理、弹性伸缩、滚动升级等功能。
      2:使用编排系统快速构建容器集群,提供负载均衡,解决容器直接关联及通信问题
      3:自动管理和修复容器,简单说,比如创建一个集群,里面有十个容器,如果某个容器异常关闭,那么会尝试重启或重新分配容器,始终保证有十个容器在运行。
      4:类似的主流工具还有: Apache的Mesos等

猜你喜欢

转载自blog.51cto.com/14846948/2506380