MSA - Docker Swarm

1Docker

1.1start docker

yum install docker

docker -v //docker版本

docker info - high level

docker inspect - low level

systemctl start docker  //启动docker, systemctl=service+chkconfig

systemctl stop docker

systemctl restart docker

systemctl status docker

systemctl enable docker   //开机启动...


1.2docker命令

docker images    //列出本地镜像

docker search mysql   //搜索远程镜像

docker pull centos:7   //pull镜像

docker pull zookeeper

docker pull httpd

docker images -q    //所有的镜像id

MSA - Docker Swarm_第1张图片

docker push  //推送镜像

docker ps  //**正在运行的容器

docker ps -a  //全部容器

docker ps -l   //最新的容doc器

docker ps -f status=exited   //停止的容器,都小写

docker ps -f status=created

docker ps -n 5    //最新5个container

相对应的有:

docker node ps -f "label=usage"

docker service ps -f 'desired-state=running' dit_ui-homepage

docker service ps -q dit1_ui-homepage   //-q或--quiet //only display task(也叫service) IDs

docker service ps --quite dit1_ui-homepage


1.3运行容器

docker run     //创建并运行容器, -i表示运行容器;-t表示容器启动后会进入命令行;-d表示detached, 后台运行;-t和-d刚好相反

docker run -id --name=pinyougou_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql    //如果没有相应镜像会自动下载 -e:环境变量...

docker run -id --name=mycentos3 -v /usr/local/myhtml:/usr/local/mh --privileged=true centos:7  //运行容器并顺带映射--宿主机目录:容器目录  //--privileged=true 容器获得宿主机的权限

-v   //在宿主机上修改,然后共享到容器上...

exit: 退出容器

docker run -it --name=mycentos centos:7 /bin/bash     //bin/bash是用来交互的,前台运行需要加上...   //即使关闭的容器也不能重名



1.4查看后台运行的容器

//查看必须是-it 且加上交互/bin/bash

docker exec -it mycentos3 /bin/bash   //或

docker exec -it mycentos3 /bash   //或

docker exec -it mycentos3 sh

docker inspect 容器名   //外面不能访问ip,只能通过端口映射来访问容器,因为容器ip在不同的网段...

容器的停止: 用run创建后的容器都可以启动和停止

docker stop 容器名   //不是docker的停止


1.5文件拷贝

docker cp testFile testCentos:/usr/local    //容器间的拷贝是不允许的... //echo 123 > testFile

//容器停止再启动,拷贝的文件还在那吗?还有,如果容器是以service的形式启动的呢?

可以重新启动...(容器不能重名,所以restart还是原来的容器,东西也不会丢失)

docker rm 容器名   //区别于docker rmi image名,如果image有容器在运行就没法删除...

1.6文件挂载(文件映射)

宿主机:容器

1.7将容器保存为镜像

这样配置好的容器就可以迁移...

docker commit...

将镜像保存为文件

docker save -o myfile.tar myimage

恢复

docker load -i myfile.tar


2Docker Swarm

Swarm: stack一组服务编排的使用;service一个应用的抽象;task一个容器;

2.1docker node

docker node ls                      //List nodes in the swarm

hostname manager         //重命名

docker node inspect --pretty worker02

docker node ps self              //This command works with the Swarm

orchestrator  //List tasks running on one or more nodes, defaults to

current node

docker node ps -f "label=usage"

docker node update --help     //availability string       drain就是排除

docker node update --availability drain manager       //manager节点不跑service


2.2docker service

docker service --help   //查询所有相关命令

Docker service create --replicas 1 --name hello busybox ping google.com    //创建服务

Docker service create --replicas 1 --name hello 8080:80 busybox ping google.com      //创建服务并映射端口

MSA - Docker Swarm_第2张图片


docker service ls     //list services

docker service ps hello

docker service update --args 'ping www.google.com' hello     //更新现有service的配置...

docker service ps my_web                                                 //用docker ps -a 是能够看到这些容器的(只能查看到本节点的service)

docker service ps -f 'desired-state=running' service名               //查看service所在的节点

[online@master ~]$ docker service ps perf_service-sitesettings       //可以在manager上查看到service所在的节点

docker ps | grep 容器名: docker ps | grep cms


docker service inspect --pretty my_web   //清晰查看

把镜像从3.0.6更新到3.0.7(从创建时的镜像更新到新镜像...)

docker service update --publish-add 30094:4055 my_web    //更新服务

Docker service update --image nginx:1.12 nginx_test            //更新服务

Docker service scale my_web=2  //扩容,创建的时候用--replicas 1,扩容用scale

//other cases

Docker service create --replicas 1 --name uat_service-price xxxx:xx registry.online.xxx.com/ecomm/service.price:uat   //never tried this, better use yml file

docker service update --image registry.online.kungnect.com/ecomm/service.caas:uat uat_service-caas

docker service update --image registry.online.xxx.com/ecomm/service.localization:prod prod_service-localization //更新服务的一些相关配置...

//查看或删除特定的service

docker ps | grep service-name

docker service stop service-name   //错误,没有docker service stop, but you can try docker service rm

docker service rm 4orr7bof323w      //kill or remove service

docker service scale service-name=0 //跟portainer的scale相对应

docker service rm service-name  //跟portainer的remove相对应

docker service rm ...          //跟portainer里的操作一样的...

回滚策略:

[root@localhost ~]# docker service create \

> --name my_web4 \

> --replicas 10 \

> --update-delay 10s \

> --update-parallelism 2 \

> --update-failure-action continue \

> nginx

docker service update --rollback my_web4                 //手动回滚

2.3docker build

docker build -t 192.168.0.210:5000/nginx:v1 .     //192.168.0.210:5000是私有仓库

2.4docker push

2.5docker swarm init

2.6docker stack deploy

docker stack deploy -c app.yml.cms2 uat     //基于yml创建和更新服务,即docker service create & docker service update

python ./script/haproxy.py    //更新proxy文件

2.7dockerfile和yml文件的区别

2.7.1dockerfile用来创建镜像

Container 转成Image(不推荐),比如docker commit 容器名 镜像名

docker build的方式也就是通过Dockfile的方式(推荐),比如docker build -t 仓库/centos-vim-new .

2.7.2yml用来创建服务service

yml - 创建服务cms-a / cms-b / cms-c

service:nginx:image: 192.168.0.210:5000/nginx:v1

2.8docker container和docker swarm service

swarm service只能通过manager node控制和管理,docker container由docker daemon进行控制和管理

而且从实践看来,每个service都是一个container,比如:

在portainer停止一个service后,特别是replicas=1的service,你就能看到相应的container也停止了;

如果service的replicas=2, 肯定会有相应的2个container,从这个意思上讲,service和container的关系是1:n


3脚本

3.1

sh -c"while true;do curl 127.0.0.1:8080&&sleep 1;done"


4实战

[root@localhost ~]# ln -s /opt/apache-maven-3.5.3/ /opt/apache-maven

[root@localhost ~]# systemctl start docker

[root@localhost ~]# docker images


MSA - Docker Swarm_第3张图片

你可能感兴趣的:(MSA - Docker Swarm)