重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇文章为大家展示了docker service管理是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
创新互联专注于企业网络营销推广、网站重做改版、五指山网站定制设计、自适应品牌网站建设、H5高端网站建设、商城网站开发、集团公司官网建设、外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为五指山等各大城市提供网站开发制作服务。
如何以方便的方式管理service。
我们之前提到docker-compose,适用于本地开发,可以在本机部署,提供了很大的便利。而swarm是一个cluster,可不可以通过docker-compose来实现定义的application?答案是可以,但是不推荐。仅仅使用docker命令行就可以。我们依然可以使用docker-compose.yml文件去定义一个应用,但是我们一般不用docker-compose去部署,而是直接使用docker命令,而且我们这个部署只能用于swarm cluster。
version "3.3" services: wordpress: image: wordpress ports: - 8080:80 networks: - overlay deploy: mode: replicated replicas: 2 endpoint_mode: vip placement: constraints: - node.role == manager - engine.labels.operatingsystem == ubuntu 16.04 preferences: - spread: node.labels.zone resources: limites: cpus: '0.50' memory: 50M
上面是一个例子:
endpoint_mode有两种取值方式
第一种是vip,就是之前介绍的虚拟ip,用户service之间互相访问时暴露的VIP,通过虚拟IP访问时,底层通过LVS将虚拟IP负载均衡成具体的某一个service的ip地址。
第二种是DNSrr ,DNS round-robin。这种方式不使用虚拟ip,而是直接使用service的ip地址,我们知道service的ip地址有很多个,特别是我们做了横向扩展之后,每个service都有自己的ip地址,如果使用dnsrr的时候,我们不使用IP地址,而是使用dns。
默认使用的是vip。
mode也有两种取值方式
第一种是global,表示这个service在全局cluster中只有一个。不能做横向扩展。
第二种是replicated,默认值。可以做横向扩展。
placement
用于设置service的一些限制条件。
例如上面的wordpress service一定会部署到manager节点上
replicas
如果这个service的mode设置成replicated的时候就可以在初始化的时候定义,需要几个replicas。
resources
limit表示CPU和memory最多可以用多少
restart_policy
如果service因为某种原因停止了,那么是否需要重启,以及重启的一些条件
update_config
要去做一些配置,比如对service做一些更新的时候,要遵循的一些原则。比如设置parallelism:2表示同时最多更新2个replicas,delay每次更新后的延迟时间。
我们这个实验环境依旧是使用wordpress。
我们的docker-compose.yml文件内容如下:
version: '3' services: web: image: wordpress ports: - 8080:80 environment: WORDPRESS_DB_HOST: MySQL WORDPRESS_DB_PASSWORD: 123456 networks: - my-network depends_on: - mysql deploy: mode: replicated replicas: 3 restart_policy: condition: on-failure delay: 5s max_attempts: 3 update_config: parallelism: 1 delay: 10s mysql: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: wordpress volumes: - mysql-data:/var/lib/mysql networks: - my-network deploy: mode: global placement: constraints: - node.role == manager volumes: mysql-data: networks: my-network: driver: overlay
这个yml文件适用于使用docker-compose工具在本地部署。那如果要部署到swarm cluster中,用docker-compose是不合适的,原因一:networks,我们在本地docker-compose时,我们的network是bridge,而我们在swarm中部署时,service是会分布到不同的机器上,所以说networks是不能采用bridge,需要改成overlay。
上面的配置中,mysql service设置为:mode:global表示这个mysql服务不允许做replicas。并且限制mysql只能部署到manager节点。
wordpress:运行在replicas模式下,并且初始化replicas=3
我们要将docker-compose.yml部署到swarm cluster中使用的命令是docker stack
我们上面的docker-compose定义了一个stack,这个stack就叫wordpress。我们在wordpress 这个stack中定义了两个service,一个是wordpress一个是mysql。
执行命令:
iie4bu@swarm-manager:~/ddy/docker-compose-swarm$ vim docker-compose.yml iie4bu@swarm-manager:~/ddy/docker-compose-swarm$ ls docker-compose.yml iie4bu@swarm-manager:~/ddy/docker-compose-swarm$ docker stack deploy wordpress --compose-file=docker-compose.yml Creating network wordpress_my-network Creating service wordpress_web Creating service wordpress_mysql
查看现在stack的情况:
iie4bu@swarm-manager:~/ddy/docker-compose-swarm$ docker stack ls NAME SERVICES wordpress 2
可以看到有一个wordpress stack
查看wordpress stack的详细信息:
iie4bu@swarm-manager:~/ddy/docker-compose-swarm$ docker stack ps wordpress ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS qzpzs6kj1ec5 wordpress_mysql.yd42nx646854nrzyqohwmpgwi mysql:5.7 swarm-manager Running Running about a minute ago se9rn27p694f wordpress_web.1 wordpress:latest swarm-worker2 Running Running 2 minutes ago lz10x51q2on8 wordpress_web.2 wordpress:latest swarm-worker1 Shutdown Failed about a minute ago "starting container failed: fa…" z8tsp0b08uzs \_ wordpress_web.2 wordpress:latest swarm-worker1 Shutdown Failed about a minute ago "starting container failed: fa…" f1dh6i8xqlrf \_ wordpress_web.2 wordpress:latest swarm-worker1 Shutdown Failed about a minute ago "starting container failed: fa…" n3la11ttg30v \_ wordpress_web.2 wordpress:latest swarm-worker1 Shutdown Failed 2 minutes ago "starting container failed: fa…" 8n4gcxt3b1kv wordpress_web.3 wordpress:latest swarm-manager Running Running 2 minutes ago
发现有一个web service没有启动成功,原因未查明。
可以通过浏览器访问。
上述内容就是docker service管理是怎样的,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。