微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例
docker compose是一种编排服务,基于python语言实现,是一个用于docker上定义并运行复杂应用的工具,可以让用户在集群中部署分布式应用。
用户可以很容易地用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有依赖,完成构建。
解决了容器与容器之间如何管理编排的问题。
docker
stack官方可能就是用stack替代compose的,compose可以做构建,开发人员用的比较多点
compose重点是编排。这里注重编排文件就可以。
docker-compose.yml
服务(service)一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
项目(project)由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件定义。
server1
mkdir compose/
cd compose/
ls
vim docker-compose.yml
高可用负载均衡。haproxy keepalived+lvs
netstat -antlp|grep :80 #确定本机有没有80,如果没有问题的话就没问题
用自定义网络 web_net提供解析
把配置通过卷挂接到容器内,让它生效。
server2
docker images
docker run --rm -it nginx bash
ls
cd /etc/nginx/
ls -l
cd conf.d/
ls
default.conf#怎么样使这个配置文件生效
cd ..
cat nginx.conf
cd conf.d/
cat default.conf #其中就是一些server的监听
cd ..
cat nginx.conf
将其中的内容复制下来
server1
mkdir proxy
cd prixy/
ls
\vi nginx.conf #先反向转义复制进去,否则会缩进的。
vim nginx.conf
访问域名www.westos.org直接定义到负载均衡器westos上
cd compose/
vim docker-compose.yml
使用一个web_net自定义网络,然后每个网络使用卷
server1
mkdir web1
mkdir web2
cd web1
echo web1 > index.html
cd ..
cd web2/
echo web2 > index.html
cd ..
ls
docker-compose up
刚才的语法有问题,需要在最后一行web-net加冒号
宿主机
cd /etc/hosts/
ping www.westos.org #访问域名的时候,要访问的通
server1
docker-compose ps
docker-compose start
docker-compose ps
curl 172.25.0.1
curl www.westos.org
检测
server1
docker ps
docker stop compose-web1-1
docker ps
宿主机
curl www.westos.org只能显示web2
server1
docker-compose start 会将没有启动的,自动启动起来
tree . #会显示文件的结构
server1
docker-compose down #删除之前做的实验
docker ps -a
cd
cd harbor/
./install.sh --with-chartmuseum #这个脚本可以自动拉集群
docker-compose ps
server2
cd #新建docker集群,只需要两条命令
docker swarm init #初始化
docker node ls
server3
server2
docker node ls
需要建一个内有仓库,外部仓库比较慢,会影响到部署效率
server1
cd /etc/docker/
ls
cat daemon.json
ls
server2
cd /etc/docker/
ls
scp -r daemon.json certs.d/ server3:/etc/docker/
scp -r daemon.json certs.d/ server4:/etc/docker/
server3/4
systemctl daemon-reload
systemctl reload docker
docker info
vim /etc/hosts
最后一行删除
server4
docker images
docker pull busybox
server3
cd /etc/sysctl.d/
ls
scp docker.conf server4:/etc/sysctl.d/
server4
systemctl --system
docker info
docker pull busybox #这里若出现仓库问题
server1
cd harbor/
docker-compose down
ls
./prepare #把这个脚本清理一下
ls
df -h /
去掉扫描功能不让磁盘增加过快。
vim docker-compose.yml
rm -f docker-compose.yml #删除这个文件
ls
docker volume ls
docker volume prune
docker volume ls
ls
cd /data
ls
cp -r certs/ ~#证书不能被清理
rm -fr *
ls
cp -r ~/certs/ . #将之前的证书拷过来
ls
cd
cd harbor/
ls
./install.sh --with-chartmuseum
docker push reg.westos.org/library/busybox:latest
docker push reg.westos.org/library/nginx:latest
server4
docker pull reg.westos.org/library/busybox#也可以不必打全键,docker pull busybox
#删除镜像 docker rmi reg.westos.org/library/busybox
cd
docker images
server3
docker pull busybox
server2
docker pull busybox
docker node ls #检测节点状态
docker service ls
在集群当中部署服务,以下是命令行方式
docker service create --name webservice -p 80:80 --replicas 3 nginx
docker service ls
server3
docker ps
server1做仓库,任何访问节点都可以做集群。
宿主机
curl 172.25.0.2
server2
docker service rm webservice
docker service ls
server1
docker search myapp
docker search ikubernetes
docker pull ikubernetes/myapp:v1
docker pull ikubernetes/myapp:v2
docker tag ikubernetes/myapp:v1 reg.westos.org/library/myapp:v1 #把镜像全扔到仓库中
docker tag ikubernetes/myapp:v2 reg.westos.org/library/myapp:v2 #让所有集群下载镜像时全到仓库中
docker push reg.westos.org/library/myapp:v1
docker push reg.westos.org/library/myapp:v2
server2
docker service create --name webservice -p 80:80 --replicas 3 myapp:v1
宿主机
curl 172.25.0.2/hostname.html #访问集群中任何一个节点都是负载均衡的
并且副本数可以随时增加或减少
server2
docker service scale webservice=6
docker service ls
docker service ps webservice
不要的时候就可以把webservice回收掉
docker service rm webservice
docker service ps webservice
问题:对于集群配置目录
宿主机
cd docker/
ls
cd supervisor/
cd ..
cd pub/images/
ls
ll visualizer.tar#对于docker集群配置图形化
代码在github.com,搜索visualizer.tar
server1
cd
docker node ls#这个指令只能在管理端上运行,其他节点不可以
宿主机
docker pull dockersamples/visualizer #先把镜像拉下来,再长传到私有仓库
docker tag dockersamples/visualizer:latest reg.westos.org/library/visualizer:latest
docker push reg.westos.org/library/visualizer:latest
server2
docker service ls
docker service create --name webservice -p 80:80 --replicas 3 myapp:v1
docker service scale webservice=20
在网页上搜172.25.0.2,出现以下则为成功
viz是监控
server2
docker service updata --image myapp:v2 --updata-parallelism 2 --updata-delay 2s webservice
#--updata-parallelism 每次更新多少个。--updata-delay每隔多长时间更新。
宿主机
curl 172.25.0.2
server2
docker service rollback webservice #回滚,回到之前的镜像
server3假设docker引擎出问题了,若3出问题了,便会均分到其他两个节点上
systemctl stop docker
docker ps
恢复的话
systemctl start docker
docker ps
isosize
写成文件的形式
server2
docker service rm webservice
docker service rm viz
docker service ls
cd
vim docker-compose.yml
server3
docker network ls #网络,如果不定义网络,就用节点自带的
server2
docker stack deploy -c docker-compose.yml mycluster #在集群当中,用docker stack把docker-compose替换掉了
docker service ls
docker service ps mycluster_webservice
docker service ps mycluster_visualizer
当不用的时候
docker stack rm mycluster
docker node ls
docker node promote server3升级
#docker node demote server2降级
在除开leader所有节点上执行离开集群
docker swarm leave
在leader上
docker node rm server2
docker node ls
在管理端,整个集群就废了
docker swarm leave --force
体量越大,调度越慢