docker进阶_docker-compose
Docker-compose
为什么使用docker-compose
官方介绍
Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Compose,您可以使用 YAML 文件来配置应用程序的服务。然后,使用一个命令,您可以从您的配置中创建并启动所有服务。Compose 适用于所有环境:生产、登台、开发、测试以及 CI 工作流程。
Compose 具有用于管理应用程序整个生命周期的命令:
- 启动、停止和重建服务
- 查看运行服务的状态
- 流式传输正在运行的服务的日志输出
- 在服务上运行一次性命令
需求分析
当你需要启动多个容器并且将容器有机的组合成一个整体,你需要一个一个的run ,每个都配置网络,每个都配置数据卷,并且停止的时候也需要每个都停止,极其不方便;例如启动一个webapp 包含python app.py 使用的是redis 这是你就需要手动启动两个容器,并且在将他们配置到同一个网络,如果应用中不是两个而是需要二十个容器呢?这就会使一个很大的任务量
docker-compose的功能
多数应用通过多个更小的服务互相协同来组成 一个完整可用的应用。比如一个简单地示例应用可能由如下四个服务组成
- web前端
- 订单管理
- 品类管理
- 后台数据库
以上服务组织在一起,就是一个可用的应用,部署和管理繁多的服务是困难的。而这正是docker compose要解决的问题,docker compose并不是通过脚本和冗长的docker命令来将应用组件组织起来,而是通过一个声明式的配置文件描述整个应用,从而使用一条命令完成部署
Docker-Compose 是用来管理容器的,我们有N多台容器或者应用需要启动的时候,有了 Docker-Compose 只需要一个配置文件就可以帮我们搞定,但是 Docker-Compose 只能管理当前主机上的 Docker,不能去管理其他服务器上的服务。意思就是单机环境
安装docker-compose
# 本机环境ubuntu
apt-get update
apt-get install docker-compose
# 安装完成后查看docker-compose版本
beginner@beginner-virtual-machine:~$ docker-compose -v
docker-compose version 1.25.0, build unknown
docker-compose文件格式简介
使用yaml文件来定义多服务的应用。默认文件名为docker-compose.yml,用户也可以使用-f参数指定具体文件,文件的框架大致如下
version: '3'
services:
服务1:
xxxxx
服务2:
xxxxx
volumes:
数据卷1:
xxxxx
networks:
网络1:
xxxxx
四个一级key:version、services、networks、volumes。
version:必须指定,而且位于文件第一行。定义了compose文件格式的版本。
service用于定义不同的应用服务(比如一个项目中使用pythonflask 做web redis做数据库 这就产生了两个服务 web、redis)
networks用于指引docker创建新的网络。默认情况创建bridge模式的网络
volumes用于指引docker文件创建新的数据卷
docker-compose.yml配置指令参考
[]: https://www.runoob.com/docker/docker-compose.html "菜鸟教程"
docker-compose搭建示例
[]: https://docs.docker.com/compose/gettingstarted/ "docker官方文档"
docker-compose常用命令
注意:使用以下命令时都要和yml文件在同一个目录下
docker-compose up # 启动定义的一组容器
docker-compose -f xxxx.yml up # 使用自定义的yml文件名
docker-compose up -d # 后台启动
docker-compose ps # 查看该组容器的状态
docker-compose top # 列出各个容器中正在运行的进程
docker-compose stop # 停止该组容器
docker-compose rm # 删除该组容器
docker-compose down # 停止和删除(stop和rm的组合)该组容器(停止容器--->删除容器--->删除网络) 但是不会删除卷!!!因为卷是和容器生命周期解耦的,卷用做持久化存储
docker-compose 实例分析
shell脚本 在主机创建目录 下面的docker-compose.yml会用到这些目录 作为指定路径挂载的主机目录
for port in $(seq 1 6); \
do \
mkdir -p ~/redis/node-${port}/conf
touch ~/redis/node-${port}/conf/redis.conf
cat << EOF > ~/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.2.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
上面是创建目录 创建配置文件的过程
docker-compose.yml
version: '3.5'
services:
redis1:
image: redis:6.2.6 # 采用redis:6.2.6镜像
container_name: redis-1 # 起个名
restart: always # 除非你stop容器 不然每次随着docker自启动
networks:
redis_net:
ipv4_address: 192.168.2.11 # 采用redis_net的自定义网络 ip地址为192.168.2.11
volumes: # 采用指定路径挂载开启两个数据卷 redis/node-1/conf/redis.conf上面已经初始好了
- ~/redis/node-1/conf/redis.conf:/etc/redis/redis.conf
- ~/redis/node-1/data:/data
command: ["redis-server", "/etc/redis/redis.conf"] # 启动redis服务
ports: # 开启两个端口映射 主机端口:容器端口
- "6371:6379"
- "16371:16379"
redis2:
image: redis:6.2.6
container_name: redis-2
restart: always
networks:
redis_net:
ipv4_address: 192.168.2.12
volumes:
- ~/redis/node-2/conf/redis.conf:/etc/redis/redis.conf
- ~/redis/node-2/data:/data
command: ["redis-server", "/etc/redis/redis.conf"]
ports:
- "6372:6379"
- "16372:16379"
redis3:
image: redis:6.2.6
container_name: redis-3
restart: always
networks:
redis_net:
ipv4_address: 192.168.2.13
volumes:
- ~/redis/node-3/conf/redis.conf:/etc/redis/redis.conf
- ~/redis/node-3/data:/data
command: ["redis-server", "/etc/redis/redis.conf"]
ports:
- "6373:6379"
- "16373:16379"
redis4:
image: redis:6.2.6
container_name: redis-4
restart: always
networks:
redis_net:
ipv4_address: 192.168.2.14
volumes:
- ~/redis/node-4/conf/redis.conf:/etc/redis/redis.conf
- ~/redis/node-4/data:/data
command: ["redis-server", "/etc/redis/redis.conf"]
ports:
- "6374:6379"
- "16374:16379"
redis5:
image: redis:6.2.6
container_name: redis-5
restart: always
networks:
redis_net:
ipv4_address: 192.168.2.15
volumes:
- ~/redis/node-5/conf/redis.conf:/etc/redis/redis.conf
- ~/redis/node-5/data:/data
command: ["redis-server", "/etc/redis/redis.conf"]
ports:
- "6375:6379"
- "16375:16379"
redis6:
image: redis:6.2.6
container_name: redis-6
restart: always
networks:
redis_net:
ipv4_address: 192.168.2.16
volumes:
- ~/redis/node-6/conf/redis.conf:/etc/redis/redis.conf
- ~/redis/node-6/data:/data
command: ["redis-server", "/etc/redis/redis.conf"]
ports:
- "6376:6379"
- "16376:16379"
networks:
redis_net:
driver: bridge # 驱动为bridge模式
ipam:
config:
- subnet: 192.168.2.0/24 # 设置网络
开启6个redis服务容器
docker-compose up -d #注意此条命令应该和docker-compose.yml文件在同一路径下
随机进入一个容器开启集群 docker exec -it redis-1 /bin/bash
root@409d076630b2:/# redis-cli --cluster create 192.168.2.11:6379 192.168.2.12:6379 192.168.2.13:6379 192.168.2.14:6379 192.168.2.15:6379 192.168.2.16:6379 --cluster-replicas 1
以集群方式连接redis以及查看集群状态
root@409d076630b2:/# redis-cli -c -h 192.168.2.11 -p 6379 #以集群方式连接节点进入节点
#进入节点后可以使用以下两个命令查看相关信息 检测redis集群是否搭建完成
cluster info 查看集群信息
cluster nodes 查看节点信息
docker进阶_docker-compose的更多相关文章
- 【云计算】Docker云平台—Docker进阶
Docker云平台系列共三讲,此为第二讲:Docker进阶 参考资料: 五个Docker监控工具的对比:http://www.open-open.com/lib/view/open1433897177 ...
- Docker进阶
Docker进阶 Docker容器命名与重命名 命名 docker run -it -p 80:80 --name containerName img:tag /bin/bash 重命名 docker ...
- Docker:四、Docker进阶 Windows Docker IIS 部署
前面的三篇docker 文档大家看的肯定不过瘾,自己可能也已经上手一试了...不知道有没有发现问题... 哈哈... 我来说说我遇到的问题哦 一.windows docker 镜像越来越大 默认的do ...
- docker入门_docker安装
docker入门_docker安装 ubuntu 安装 curl -sSL https://get.daocloud.io/docker | sh # 官方安装脚本自动安装 systemctl ena ...
- docker进阶之路-基础篇 | 一:环境搭建
转载请注明作者及出处: 作者:银河架构师 原文链接:https://www.cnblogs.com/luas/p/12061747.html 一.准备工作 查看内核 Docker 要求 CentOS ...
- Docker进阶使用1
容器间共享文件 Docker 的容器和外部环境是相对隔离的,并且容器是一次性的,运行结束后并不会有任何的持久化的文件或者数据.所以当我们需要做应用数据的持久化,或者保留应用的日志文件时,我们需要用到 ...
- Docker 三剑客之 Compose
Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排,开源地址:https://github.com/docker/compose Compose 中的两 ...
- docker进阶-搭建私有企业级镜像仓库Harbor
为什么要搭建私有镜像仓库 对于一个刚刚接触Docker的人来说,官方的Docker hub是用于管理公共镜像.既然官方提供了镜像仓库我们为什么还要去自己搭建私有仓库呢?虽然也可以托管私有镜像.我们 ...
- docker进阶-初探Docker-compose
什么是Docker-compose compose 翻译成中文的意思是"构成"和"组成"的意思.Docker我之前把他比作一个大轮船,这个轮船上面可以放很多 ...
- Docker进阶之三:Docker应用场景
场景一:节省项目环境部署时间 1.单项目打包 每次部署项目到测试.生产等环境,都要部署一大堆依赖的软件.工具,而且部署期间出现问题几率很大,不经意就花费了很长时间. Docker主要理念就是环境打包部 ...
随机推荐
- 自定义 Django admin 组件
摘要:学习 Django admin 组件,仿照源码的逻辑,自定义了一个简易的 stark 组件,实现类似 admin 的功能. 可自动生成 url 路由,对于model 有与之相应的配置类对象,可进 ...
- 解决metasploit的module load fail
解决metasploit的module load fail 在exploits文件夹下面新建一个文件夹test 把你要用的rb文件放进去 reload_all 就行了
- Mysql常用操作笔记
目录 登录 退出 Sql语句分类 DDL操作数据库 1.创建数据库 2.查看数据库 3.修改数据库 4.删除数据库 5.使用数据库 6.创建表 7.查看表 8.删除表 9.修改表 10.常用字段类型 ...
- Nature | 易基因DNA甲基化测序助力人多能干细胞向胚胎全能8细胞的人工诱导
北京时间2022年3月22日凌晨,<Nature>期刊在线刊登了由中国科学院广州生物医学与健康研究所等单位牵头,深圳市易基因科技有限公司.中国科学技术大学等单位参与,应用人多能干细胞向胚胎 ...
- vue中TinyMCE图片 “data-mce-src” 属性的问题
1.问题 在使用Vue中使用TinyMCE富文本编辑器时,上传的图片除了src属性还会多出来个"data-mcee-src" 属性,而保存时实际也是保存的"data-mc ...
- python 迭代器和生成器基础知识
1.迭代器遵循迭代器协议:必须拥有__iter__方法和__next__方法--字符串.列表.元组.字典.集合都是可迭代的--可以被for循环的都是可迭代的 2. 迭代器有的好处是可以节省内存 3.生 ...
- 深入理解Java虚拟机-垃圾收集算法
一.判断对象是否可进行回收 1.引用计数算法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1:当引用失效时,计数器值就减1:任何时刻计数器为0的对象就是不可能再被使用的.但是主流的 ...
- Could not find the main class
最近开发了一个短信报警的服务,打成程序包之后,再本地windows启动(start.bat)没有问题,但是发到生产环境,报如下错: Could not find the main class 莫名其妙 ...
- 转:红黑树和AVL树(平衡二叉树)区别
本文转载至链接:https://blog.csdn.net/u010899985/article/details/80981053 一.AVL树(平衡二叉树) (1)简介 AVL树是带有平衡条件的二叉 ...
- 写一段代码在遍历 ArrayList 时移除一个元素?
该问题的关键在于面试者使用的是 ArrayList 的 remove() 还是 Iterator 的 remove()方法.这有一段示例代码,是使用正确的方式来实现在遍历的过程中移 除元素,而不会出现 ...