容器编排技术 docker compose 20210816
################################################
1.容器编排docker compose 为啥用??
1)、springboot项目
需要依赖redis、mysql5.7、nginx。
如果使用docker原生部署的话,则需要安装redis、mysql5、nigix容器,在才可以
springboot项目,这样的话部署项目的流程非常复杂
所以需要引入我们docker compose 实现容器编排技术
i)、局域网容器
mysql容器、redis容器、nginx容器、es容器
springboot项目容器
kafka zk
nacos
注:docker最终解决了运行环境配置中的问题。------镜像文件低层封装好了
ii)、容器编排
mysql容器
redis容器
nginx容器
es容器
springboot项目容器
2.原理
######docker compose:容器集群的快速编排
开发一个springboot项目---大工程
1、依赖mysql
2、依赖redis
3、依赖ZK
需要在:docker-compose.yml配置项目工程依赖环境配置
i)、3层: 工程project
服务service
容器contain
ii)、工程文件:docker-compose.yml
extends文件
环境变量文件 COMPOSE_FILE或-f参数自定义配置文件
定义了多个有依赖关系服务及每个服务运行
iii)、工程 :多个服务(服务:n个容器运行镜像、参数、依赖)
iiii)、负载均衡:借其他工具(服务发现及负载均衡)
2)、compose 重要概念
i)、服务(service):一个应用的容器,实际可以包括若干运行相同镜像的容器实例
ii)、项目(project):一组关联的应用容器组成一个完整业务单元,
在docker-compose.yml文件中定义
项目可以由多个服务(容器)关联而成,compose面向项目进行管理,通过子命令
对项目中的一组容器进行便捷地生命周期管理
iii)、调用docker服务提供的API来对容器进行管理(docker api)
docker-compse 分3层
a)、项目层 springboot项目依赖于我们的mysql、redis、nginx
一个项目由多个容器组成
b)、服务层 运行一个镜像的实例
c)、docker-compose编排容器
mysql容器 redis容器 nginx容器 es容器
springboot项目容器
.....................docker-compose.yml.....................................
注:独立IP信息
3.安装
1)、访问docker compose github官网
https://github.com/docker/compose/releases
2)、docker-compose-Linux-x86_64
下载 https://github.com/docker/compose/releases/download/1.29.2/docker-compose-Linux-x86_64
docker-compose-Linux-x86_64上传到宿主机
然后执行如下命令将其
/usr/local/bin目录中, 并且更名为docker-compose如下
mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
3)、执行如下命令
##添加可执行权限
chmod +x /usr/local/bin/docker-compose
4)、验证docker-compose
docker-compose -v
4.docker-compose入门实例
docker-compose入门实例
1)、需要定义一个docker-compose.yml文件-----工程
2)、需要在docker-compose 文件配置依赖服务
docker-compose.yml内容如
version: "3.0" #定义compose 版本号
services: ##服务,每个服务实际上就是一个独立容器运行
tomcat8080: ##服务名称
image: tomcat:8 #依赖镜像文件名称 tomcat:8
ports:
- 8080:8080
tomcat8081: ##服务名称
image: tomcat:8 #依赖镜像文件名称 tomcat:8
ports:
- 8081:8080
3)、/usr 目录下创建文件夹mayikt007
#mkdir mayikt007
本地idea项目中docker-compose.yml文件上传到/usr/mayikt007
4)、docker-compose执行该文件
##/usr/mayikt007/docker-compose.yml
目录下 执行 docker-compose up
docker ps 查看已创建的容器
5)、浏览部署的tomcat
###mayikt项目没文件显示为404.html
http://192.168.223.133:8080/mayikt/index.html
http://192.168.223.133:8081/mayikt/index.htnl
6)、docker-compose.yml
##数据卷 宿主机与容器数据共享 -v
####volumes: ##数据源 宿主机与容器数据共享 -v
/usr/tomcat/webapps:/usr/local/tomcat/webapps
#mkdir tomcat
#mkdir tomcat
#cd tomcat
#mkdir webapps 如下图
#mkdir mayikt
####docker-compose.yml###内容如下
version: "3.0" #定义compose 版本号
services: ##服务,每个服务实际上就是一个独立容器运行
tomcat8080: ##服务名称
##container_name: mayikt007_tomcat8080_1 ##容器名称
image: tomcat:8 #依赖镜像文件名称 tomcat:8
ports:
- 8080:8080
volumes: ##数据源 宿主机与容器数据共享 -v
- /usr/tomat/webapps:/usr/local/tomat/webapps
tomcat8081: ##服务名称
##container_name: mayikt007_tomcat8080_1 ##容器名称
image: tomcat:8 #依赖镜像文件名称 tomcat:8
ports:
- 8081:8080
volumes: ##数据源 宿主机与容器数据共享 -v
- /usr/tomat/webapps:/usr/local/tomat/webapps
docker-compose.ym重新上传,再 docker-compose up
容器本地访问 mayikt007_tomcat8080_1如下
宿机访问如下
外网浏览访问如下
6)、多容器启动
#####容器与宿主机映射的对应的宿主端口不能相同如下:
#####宿主机端口:8080###################
ports:
- 8080:8080
ports:
- 8080:8081
7)、多容器在同一局域网
########8080,8081容器可以相互访问######
######docker inspect 容器ID#########
##############定位服务的桥####
####networks: ###定位服务的桥
####mayikt_web ##############
####docker-compose.yml###内容如下
version: "3.0" #定义compose 版本号
services: ##服务,每个服务实际上就是一个独立容器运行
tomcat8080: ##服务名称
##container_name: mayikt007_tomcat8080_1 ##容器名称
image: tomcat:8 #依赖镜像文件名称 tomcat:8
ports:
- 8080:8080
volumes: ##数据源 宿主机与容器数据共享 -v
- /usr/tomcat/webapps:/usr/local/tomcat/webapps
networks: ###定位服务的桥
- mayikt_web
tomcat8081: ##服务名称
##container_name: mayikt007_tomcat8080_1 ##容器名称
image: tomcat:8 #依赖镜像文件名称 tomcat:8
ports:
- 8081:8080
volumes: ##数据源 宿主机与容器数据共享 -v
- /usr/tomcat/webapps:/usr/local/tomcat/webapps
networks: ###定位服务的桥
- mayikt_web
networks: ###定位服务的桥
mayikt_web:
docker-compose.ym重新上传,再 docker-compose up
########8080,8081容器可以相互访问######