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/log
links:
- redis
redis:
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
#服务配置
imgaes
build
network
....
服务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.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- wordpress_data:/var/www/html
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_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 nginx
docler 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
配置