Docker Compose
简介:
比如有100个微服务,不需要手动启动每一个,可以使用docker compose定义运行多个容器,高效管理化。
定义、运行多个容器
YAML file配置文件
single command 命令
写docker-compose.yaml
docker-compose up 启动项目
Compose
version: "3" # optional since v1.27.0
services:web:build: .ports:- "5000:5000"volumes:- .:/code- logvolume01:/var/loglinks:- redisredis:image: redis
volumes:logvolume01: {}
配置web连接到redis,会先启动redis,再启动web应用
官方下载compose
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose国内镜像下载
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose#授权
chmod +x /usr/local/bin/docker-compose
构建个应用在/root/doc/compose_test
1、应用app.py
2、Dockerfile构建镜像
3、docker-compose.yaml
4、docker-compose up 启动
#可以先docker-compose build后再 up启动
启动后流程
ctrl+c停止退出后,可以重新docker-compose up启动
默认的服务名,文件名_服务名_num
网络规则,compose自动生成了一个网络,项目中的内容都在同一个网络中,通过域名访问
如果在同一个域名下,可以直接通过域名进行访问,比如redis服务直接通过redis域名访问,而不需要通过ip,如下
yaml规则
docker-compose.yaml核心
version: '' #版本
services: #服务服务1: web#服务配置imgaesbuildnetwork....服务2: redis..........
compose 官方文档
https://docs.docker.com/compose/compose-file/compose-file-v3/#command
搭建博客
官方文档地址:
https://docs.docker.com/samples/wordpress/
version: "3"services:db:image: mysql:5.7volumes:- db_data:/var/lib/mysqlrestart: alwaysenvironment:MYSQL_ROOT_PASSWORD: somewordpressMYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: wordpresswordpress:depends_on:- dbimage: wordpress:latestvolumes:- wordpress_data:/var/www/htmlports:- "8000:80"restart: alwaysenvironment:WORDPRESS_DB_HOST: dbWORDPRESS_DB_USER: wordpressWORDPRESS_DB_PASSWORD: wordpressWORDPRESS_DB_NAME: wordpress
volumes:db_data: {}wordpress_data: {}
进入yaml的文件夹docker-compose up 启动项目
后台启动
docker-compose up -d
Docker Swarm
集群搭建
初始化节点
docker swarm init --advertise-addr 192.168.148.136
#加入节点
docker swarm join
#在主节点主机执行下面的命令可以获得加入成为主节点的命令,然后将此命令在对应的机器上执行加入。
docker swarm join-token manager #获取主节点加入的命令
下面的命令就是生成的
步骤
1、生成主节点
2、加入(管理者、worker)
目标:双主双从(一般至少三个主节点)
Raft协议
双主双从:假设一个节点挂了,其他节点是否可以用
Raft协议:保证大多数节点存活才可以用。
如果将主节点挂掉一个,会导致主节点的数量过少而不能使用集群
docker1主节点关闭重启后由原来的leader变成了reachable,
#在对应节点上执行,会离开集群
docker swarm leave
需要保证有两个主节点存在才能使用
集群可以用,3个主节点 ,大于1台管理节点存活
使用docker service 进行集群的操作
#类似docker run
docker service create -p 8888:80 --name mynginx nginxdocler run 容器启动,不具有扩缩容器功能
docker service 集群启动,可以扩缩容
docker service 启动的时候,虽然是在docker1服务器上启动,但是容器可能启动在集群的docker3中
docker service update --replicas 10 mynginx
#创建10个mynginx的副本。
docker service update --replicas 10 mynginx
#回滚到剩下1个节点#动态扩缩容
docker service scale mynginx=5#集群移除服务
docker service rm mynginx
swarm是小型的k8s。
只要在集群的某一台服务器上启动一个服务,所有集群里面机子都可以访问得到。
概念总结
swarm
集群的管理和编号,docker可以初始化一个swarm集群,其他节点可以加入(管理、工作者)
Node
就是一个docker节点,多个节点就组成了一个网络集群(管理、工作者)
Service
任务,可以在管理节点或工作节点来运行(核心!),用户需要进行访问的服务。
使用docker service 进行操作
Task
容器内的命令,细节任务!
replicas :4 表示四个副本,可以进行均衡调度
docker stack
docker-compose 单机部署
docker stack 集群部署
#单机
docker-compose up -d wordpress.yaml#集群
docker stack deploy workpress.yaml
docker secret
安全证书、密码等
docker config
配置