cc老师最新一期的高级架构师课程终于肯定日期了,7月6号正式开课,如今618活动,不限时免费更新课程是最大的卖点,里面包含了如今主流的架构,以及最新的技术,听说从理论到运用所有带着作,像如今面试经常使用的 Netty, Redis, Kafka,Zookeeper, Dubbo, Nginx + openResty + kong + Lua, ElasticSearch等技术都深刻源码层级,对于有想跟我同样有着像提升自身技术的同窗,课程的详情都在私塾的首页详细说明了,感兴趣的小伙伴,能够一块儿去 【 私塾在线 】 学习
Docker的最佳实践建议:一个容器只运行一个进程。而实际的应用会由多个组件构成,要运行多个组件就须要运行多个容器,这就须要对这多个容器进行编排。
所谓编排:主要就是多个docker容器的自动配置、协做和管理服务的过程。Docker提供了docker-compose工具来实现。python
compose是用来定义和运行一个或多个容器应用的工具,使用python开发,经过yml文件来定义多个容器应用,很是适合在单机环境下部署一个或多个容器,并自动把多个容器互相关联起来。
其实,docker-compose作的就至关于解析配置文件,而后按照配置去执行一系列的docker命令。mysql
官方安装文档:https://docs.docker.com/compo...
Docker-compose基本示例
1:准备好要启动的镜像,虽然能够直接在compose里面build镜像,建议仍是先准备好
2:编写docker-compose.yml
3:而后就docker-compose up -d,启动就行了
4:docker-compose.yml示例以下:nginx
version: '2' services: mysqldb: image: 'mysql:latest' environment: - MYSQL_ROOT_PASSWORD=cc volumes: - /ccuse/programes/mysqldata:/var/lib/mysql privileged: true web: image: 'cctomcat:9.0' ports: - "9080:8080" volumes: - /ccuse/programes/tomcat9docker/webapps/test:/usr/local/tomcat/webapps/test privileged: true links: - mysqldb:dblink
1:一份标准配置文件能够包含 version、services、networks 三大部分,详细的参照指南见官方网站: https://docs.docker.com/compo...
2:version目前是有1,2,3这么三个
3:srvices常见的配置有:
(1)服务名称:用来表示一个服务,自定义的
(2)image:指定服务的镜像名称或镜像 ID。若是镜像在本地不存在,Compose 将会尝试拉取这个镜像,Build和image必须使用一个。
(3)build:web
服务除了能够基于指定的镜像,还能够基于一份 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配置sql
容器间的通信,除了使用--link外,如今更推荐使用自定义网络,而后利用服务名进行通信。每一个自定义网络均可以配置不少东西,包括网络所使用的驱动、网络地址范围等设置。例如: networks: frontend: backend:
1:你会看到frontend、backend后面是空的,这是指一切都使用默认,换句话说,在单机环境中,将意味着使用 bridge 驱动;而在 Swarm 环境中,使用 overlay 驱动,并且地址范围彻底交给 Docker 引擎决定。
2:而后在每一个services配置里面,也有一个networks,用来指定服务要链接到哪些网络上,能够指定多个,例如:docker
services: nginx: ... networks: - frontend web: ... networks: - frontend - backend mysql: ... networks: - backend
3:链接到同一个网络的容器,能够进行互连;而不一样网络的容器则会被隔离。
4:处于同一网络的容器,可使用服务名访问对方
5:给前面的例子添加networks的配置,以下:tomcat
version: '2' services: mysqldb: image: 'mysql:latest' environment: - MYSQL_ROOT_PASSWORD=cc volumes: - /ccuse/programes/mysqldata:/var/lib/mysql privileged: true networks: - frontend web: image: 'cctomcat:9.0' ports: - "9080:8080" volumes: - /ccuse/programes/tomcat9docker/webapps/test:/usr/local/tomcat/webapps/test privileged: true links: - mysqldb:dblink networks: - frontend networks: frontend: backend:
1:compose:用来组装多个容器构成应用的工具
2:machine网络
machine是一个简化Docker安装的命令行工具,支持多平台安装docker,能够方便的在各类环境,好比笔记本、云平台、数据中内心安装docker。 machine本质上就是一个docker host主机和通过配置的docker client的结合体。
3:swarm架构
docker社区原生提供的容器集群管理工具,能够把多个docker主机组成的系统转换成为单一的虚拟docker主机
google推出的开源的Kubernetes,用于跨主机群集自动部署,扩展和操做应用程序容器,提供以容器为中心的基础架构。利用Kubernetes能很方便管理多台Docker主机中的容器。 主要功能以下:1:将多台Docker主机抽象为一个资源,以集群方式管理容器,包括任务调度、资源管理、弹性伸缩、滚动升级等功能。2:使用编排系统快速构建容器集群,提供负载均衡,解决容器直接关联及通讯问题3:自动管理和修复容器,简单说,好比建立一个集群,里面有十个容器,若是某个容器异常关闭,那么会尝试重启或从新分配容器,始终保证有十个容器在运行。4:相似的主流工具还有: Apache的Mesos等