微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例
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
体量越大,调度越慢



