docker--docker compose 编排工具
11 docker compose 编排工具
11.1 docker compose 介绍
根据前面所学的知识可知,想要使用Docker部署应用,就要先在应用中编写Dockerfile 文件来构建镜像。同样,在微服务项目中,我们也需要为每一个服务编写Dockerfile文件 来构建镜像。构建完成后,就可以根据每一个镜像使用docker run或者docker service create命令创建并启动容器,这样我们就可以访问容器中的服务了。 微服务架构中:涉及的服务数量巨多。 虽然使用上述方式可以部署微服务项目,但考虑到微服务项目可能有多个子服务组成, 并且每个服务启动过程中都需要配置额外的参数(如-e配置环境变量、--network指定网 络、磁盘挂载等等)。这种情况下,每次更新微服务后,都要手动运行指令来重新启动 容器,这就显得相当麻烦了。针对这种多服务部署的情况,Docker提供了Docker Compose编排工具来对多服务应用进行统一部署。Compose是Docker的服务编排工 具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个 Docker容器,非常适合组合使用多个容器进行开发的场景。 通过该编排工具,可以使用yml(或yaml)文件来配置应用程序服务,然后只需要一条简 单的服务部署指令就可以从配置中创建并启动所有服务。
11.2 docker compose 安装与卸载
安装docker compose
1、环境要求:Docker Compose是依赖于Docker引擎的,所以在安装Docker Compose之前
要确保机器上已经安装了Docker。https://github.com/docker/compose/releases
(查看docker compose版本)
2、下载docker‐compose工具
curl ‐L
https://github.com/docker/compose/releases/download/1.24.0/docker‐
compose‐`uname ‐s`‐`uname ‐m` ‐o /usr/local/bin/docker‐compose
3、设置docker compose可执行文件权限
chmod +x /usr/local/bin/docker‐compose
r:read w:write x:ex
4、查看docker compose版本
docker‐compose ‐‐version
PS:卸载docker compose
sudo rm /usr/local/bin/docker‐compose
11.3 docker compose 使用
11.3.1 例子
步骤:分为三步(在创建的一个空目录下执行)
1、编写Dockerfile文件(为每个服务构建需要的镜像,方便迁移‐不是必须的)
2、编写docker‐compose.yml文件(编写部署服务相关指令)
3、运行docker‐compose up(启动yml文件中服务)
案例:
1、准备:两个镜像(本次演示就不通过Dockerfile构建了)
docker pull mysql:5.7
docker pull wordpress
2、需要新建一个空白目录,例如rwtest。新建一个docker‐compose.yml,编辑该文件:
version: '3'
services:
db:
image: mysql:5.7
volumes:
‐ db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
‐ db
image: wordpress:latest
ports:
‐ "8001:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
volumes:
db_data:
该文件中内容:新建db和wordpress容器。等同于:
docker run ‐‐name db ‐e MYSQL_ROOT_PASSWORD=123456 ‐d mysql
docker run ‐‐name some‐wordpress ‐‐link db:mysql ‐p 8002:80 ‐d wordpress
3、启动docker compose
docker‐compose up
4、浏览器访问:http://ip:8001
5、停止/重启服务:docker‐compose stop/restart 注意:键值对冒号后要有空格
11.3.2 docker compose 指令说明
1 version: '3'
2 services:
3 web:
4 image: id/imagename:lable
5 restart: on‐failure
6 container_name: my‐web‐container
7 ports:
8 ‐ 8080:8080
9 networks:
10 ‐ example‐net
11 depends_on:
12 ‐ db
13 deploy:
14 replicas: 2
15 restart_policy:
16 condition: on‐failure
17 db:
18 image: mysql:5.6
19 restart: on‐failure
20 container_name: my‐mysql‐container
21 ports:
22 ‐ 3306:3306
23 volumes:
24 ‐ example‐mysql:/var/lib/mysql
25 networks:
26 ‐ example‐net
27 environment:
28 MYSQL_ROOT_PASSWORD: root
29 MYSQL_DATABASE: mysql_database
30 deploy:
31 replicas: 1
32 restart_policy:
33 condition: on‐failure
34 placement:
35 constraints: [node.role == manager]
36 networks:
37 example‐net:
38 volumes:
39 example‐mysql:
version :version通常在一个docker-compose.yml文件的最顶部,用来表示文件内 容的约束版本(类似于XML文件约束)(版本越高,支持的指令越多)
services 用来声明服务,在services下的所有同缩进的应用名称都代表一个服务,如 上面示例中的web和db。在进行多服务部署的时候,有多少个服务需要同时部署, 就需要在services参数下面声明并配置多少个服务
image :容器启动需要依赖的镜像(如果本地没有会自动pull)
restart :服务重启策略
restart: "no" # 服务默认值为no,即服务失败后没有任何动作
restart: always # 表示服务会一直重新启动
restart: on-failure # 表示服务提示失败错误后会重新启动
restart: unless-stopped # 表示只有服务在停止后才会重启
container_name :指定容器名称
ports :指定服务向外暴露的端口
networks :指定容器使用的网络
depends_on :服务依赖决定了服务的依赖关系,如示例中的web依赖db,所以 db服务会先于web服务启动,但并不表示db服务完全启动成功后才启动web服 务,它只决定启动的先后顺序而已
deploy :deploy参数是Docker Compose针对Swarm集群部署提供的,子参数 专门用于指定与服务部署和运行相关的配置
replicas :表示服务实例的副本数量
restart_policy :estart_policy参数同前面介绍的restart类似,都是用来配置 服务重启策略的,只是该属性配置在deploy参数下,并只在集群环境下生 效。该参数包含多个子属性及属性值
condition: on-failure # 表示服务重启的条件,值有none、on-failure和 any
delay: 5s # 表示重启服务之间等待时间,默认为0
max_attempts: 3 # 表示失败后尝试重启的次数
window: 120s # 表示等待多久来确定服务是否启动成功
placement :placement用来配置指定位置的约束,当服务在Swarm集群环 境下部署时会随机分配到管理节点和其他工作节点上。在上述示例中由于将 mysql数据挂载到了本机example-mysql数据卷中,所以使用了placement 的子参数constraints: [node.role == manager]指定该服务只在manager管 理节点上运行 :
environment 用于配置服务启动时需要的环境变量。如上述示例中 MYSQL_ROOT_PASSWORD表示数据库root用户的密码,MYSQL_DATABASE表 示数据库启动后自动创建的数据库。
networks :用于配置服务网络
volumes :目录挂载,上述示例中是将mysql数据挂载到本地example-mysql数据卷 中,如果该数据卷不存在,服务启动时也会默认创建
其他配置可参考:https://docs.docker.com/compose/compose-file/
最新文章
- NPOI导出Excel (C#) 踩坑 之--The maximum column width for an individual cell is 255 charaters
- hibernate 的SessionFactory的getCurrentSession 与 openSession() 的区别
- Audio Session Interruption
- leetcode 136
- hdu 3333 树状数组
- Spring3 + Spring MVC+ Mybatis 3+Mysql 项目整合
- flask twisted 结合方案
- Laravel 5.1 ACL权限控制 一
- iOS设置textfield为密码框
- requests_模拟登录知乎
- Linkin大话eclipse快捷键
- segment fault异常及常见定位手段
- 强化学习(十九) AlphaGo Zero强化学习原理
- jbe 可以用来修改Java class的字节码,配合jd-gui 使用
- <;<;浪潮之巅>;>;阅读笔记一
- java web 程序---缓冲代码
- C++ 面向对象基本释义
- Lodash 常用API中文参考
- HttpServletRequest 各种方法总结(转)
- windows10安装liux系统
热门文章
- SpringMVC @ModelAttribute详解
- 曝郭盛华公司30万美元收购Acn.ai域名,揭秘人工智能布局下的巨头们
- 6407. 【NOIP2019模拟11.05】小 D 与随机
- Vue-Router的简单使用
- aspnet:MaxHttpCollectionKeys 不起作用
- PHP基础教程探讨一些php编程性能优化总结
- BZOJ 4399: 魔法少女LJJ 线段树合并 + 对数
- explicit作用
- 打开ubuntu终端,没有用户名显示,只剩下光标在闪
- 编译依赖ndt_gpu库的包,遇到Eigen报错