它可以简化docker容器的管理,使得多个容器之间的部署,连接变的更加简单、可靠同时还能够实现服务自动扩展和容器的定期的更新等功能。此外还支持设置各种容器之间的依赖关系。比如启动数据库容器才能启动应用容器。
使用docker-compose可以完成 多个 docker run 所有操作
使用 YAML 时需要注意下面事项:
大小写敏感
通过缩进表示层级关系
不支持制表符 tab 键缩进,只能使用空格缩进
缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格
用 # 号注释
符号字符后缩进1个空格,如冒号 : 逗号, 横杠 -
如果包含特殊字符用单引号()引起来会作为普通字符串处理,双引号(""): 特殊字符作为本身想表示的意思 name: "Hi,\nTom"
docker compose内部控制参数
name
自定义挂载
自定义ENV 环境变量 【运行前——> 自定义网络】
自定义端口
自定义传参 【运行后】
docker-compose命令
build : 描述
ps : 重新构建服务
up :创建和启动容器
exec :在容器里面执行命令
scale :指定一个服务容器启动数量
top :显示容器进程
logs :日志
down :删除容器、网络、数据卷、镜像
stop/start :停止/启动服务
restart :重启服务
no:默认策略
on-failure:在容器非正常退出时(状态非0),才会重启容器
on-failure:3 :在容器非正常退出时重启容器,最多重启3次
always:在容器退出时总是重启容器
unless-stopped:在容器退出时总是重启,但不考虑在docker守护进程启动时就已经停止了
Docker Compose配置常用字段
cservies:服务模块 【nginx、mysql、php】
container_name:容器名
build:指定dockerfile文件名
centext:指定dockerfile文件的路径
dockerfile:指定文件名Dockerfile
ports:开启端口
networks:加入网络
volumes:挂载
networks:网络模块
driver:网络模式
Docker consul
consul 是一个基于分布式的服务发现和配置管理工具。 它具有快速构建分布式架构提供服务发现和服务治理等的功能的特点,同时consul还提供了可靠的保证,多数据中心和强大的API以满足高可用、分布式环境下的需求。
服务注册:当服务启动时会将自己的网络地址注册到一个中心化的服务注册中心。
服务发现:客户端或其他服务能够自动找到他想要调用的服务的网络位置的过程。
consul特性
服务注册与发现:consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务,例如saas提供的也可以一样注册。
健康检查:健康检测使consul可以快速的告警在集群中的操作。和服务发现的集成,可以防止服务转发到故障的服务上面。
Key/Value存储:一个用来存储动态配置的系统。提供简单的HTTP接口,可以在任何地方操作。
多数据中心:无需复杂的配置,即可支持任意数量的区域。
启动consu1后默认会监听5个端口
8300:replication (副本代表同步) 、leader (领导者farwarding (转发)的端口。
8301:lan cossip的端口 内网。
8302:wan gossip的端口web ui界面的端口 外网。
8500:用与http接口和web。
8600:使用dns协议查看节点信息的端口 用于已注册的服务发现:使用DNS协议查看节点信息的端口。
consul主要工作
主要工作分为两个部分:服务发现和配置管理。服务发现是指在分布式计算环境下,自动发现可用的服务实例,并将其注册到CODSCL上,以便其他服务进行调用。配置管理是指通过consuL,动态更新分布式架构中配置信息,包括 环境变量 属性值,文件,数据库等。
consuL 可以与多种不同的服务以其使用 包括 kubernetes、docker、mescos等,因此 它成为分布式系统中心不可少的一部分。
创建consul
1、建立 Consul 服务
mkdir /opt/consul
cp consul_0.9.2_linux_amd64.zip /opt/consul
cd /opt/consul
unzip consul_0.9.2_linux_amd64.zip
mv consul /usr/local/bin/
2、设置代理,在后台启动 consul 服务端
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.10.23 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &
netstat -natp | grep consul
2. 查看集群信息
consul members
浏览器中,输入 http://192.168.10.23:8500,在 Web 页面中“单击 NODES”,然后单击“consurl-server01”,会出现服务。
3、准备 template nginx 模板文件
vim /opt/consul/nginx.ctmpl
#定义nginx upstream一个简单模板
upstream http_backend {
{{range service "nginx"}}
server {{.Address}}:{{.Port}};
{{end}}
}
4、定义一个server,监听8000端口,反向代理到upstream
5、安装nginx
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
useradd -M -s /sbin/nologin nginx
tar zxvf nginx-1.12.0.tar.gz -C /opt/
cd /opt/nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make -j && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
6、配置 nginx,添加虚拟主机目录
vim /usr/local/nginx/conf/nginx.conf
......
http {
include mime.types;
include vhost/*.conf; #添加虚拟主机目录
default_type application/octet-stream;
7、配置并启动 template
创建虚拟主机目录
mkdir /usr/local/nginx/conf/vhost
创建日志文件目录
mkdir /var/log/nginx
启动nginx
配置并启动 template
unzip consul-template_0.19.3_linux_amd64.zip -d /opt/
cd /opt/
mv consul-template /usr/local/bin/
8、启动 template 服务
consul-template --consul-addr 192.168.10.23:8500 \
--template "/opt/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/kgc.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info
另外打开一个终端查看生成配置文件
9、访问 template-nginx
docker exec -it 4f74d2c38844 bash
echo "this is test1 web" > /usr/share/nginx/html/index.html
docker exec -it b73106db285b bash
echo "this is test2 web" > /usr/share/nginx/html/index.html
浏览器访问:http://192.168.10.23:8000/,并不断刷新。