从零开始学习docker(二十一)service管理

本节我们介绍如何以方便的方式管理service。

我们之前提到docker-compose,适用于本地开发,可以在本机部署,提供了很大的便利。而swarm是一个cluster,可不可以通过docker-compose来实现定义的application?答案是可以,但是不推荐。仅仅使用docker命令行就可以。我们依然可以使用docker-compose.yml文件去定义一个应用,但是我们一般不用docker-compose去部署,而是直接使用docker命令,而且我们这个部署只能用于swarm cluster。

deploy

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…"   
f1dh5i8xqlrf         \_ 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没有启动成功,原因未查明。

可以通过浏览器访问。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值