Docker 基本命令( Version:18.09.2,Win

2019-05-14  本文已影响0人  MicoCube

服务

通过运行镜像得到一个容器,这个容器向外提供服务,服务只运行一个映像,但它的运行方式——即它应该使用哪些端口,应该运行多少个容器副本,以及服务具有所需的容量,等等。扩展服务会更改运行该软件的容器实例的数量,从而为流程中的服务分配更多的计算资源,幸运的是在Docker上,运行和扩展服务非常容易——只需编写一个docker-compose.yml文件即可。

docker-compose.yml文件

version: "3"
services:
  web:
    # replace username/repo:tag with your name and image details
    image: micoldd/test:friendlyhello
    deploy:
      replicas: 5
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
      restart_policy:
        condition: on-failure
    ports:
      - "4000:80"
    networks:
      - webnet
networks:
  webnet:

docker-compose.yml文件告诉Docker执行以下操作:

运行负载均衡的应用

F:\dockerExample>docker swarm init
Swarm initialized: current node (n6bipht26vpu4yvfc36f706qs) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-1cu8f4kk8663cd4snt5f5xhoju7ywrcblg92e2h037kst1ox4r-acvg4htwkvm9e4w3xidh9y7sk 192.168.65.3:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

如果你没有执行swarm init 命令,你执行下面的命令的时候会报错:“this node is not a swarm manager.”

F:\dockerExample>docker stack deploy -c docker-compose.yml getstartedlab
Creating network getstartedlab_webnet
Creating service getstartedlab_web

F:\dockerExample>docker ps
CONTAINER ID        IMAGE                        COMMAND             CREATED             STATUS              PORTS               NAMES
2a514a1055bb        micoldd/test:friendlyhello   "python app.py"     51 seconds ago      Up 47 seconds       80/tcp              getstartedlab_web.5.n3rg197d86j7ps3w1byeq2jqc
eb01bd51c06c        micoldd/test:friendlyhello   "python app.py"     51 seconds ago      Up 47 seconds       80/tcp              getstartedlab_web.4.xjlli44uqva9ztp02vl079q6w
c0a6e0deb908        micoldd/test:friendlyhello   "python app.py"     51 seconds ago      Up 47 seconds       80/tcp              getstartedlab_web.2.zoxpkb7uc18wa0jr6gbsyqayu
f80d82b4d4f3        micoldd/test:friendlyhello   "python app.py"     51 seconds ago      Up 48 seconds       80/tcp              getstartedlab_web.1.i3nytdihaaohn3hflznjx5hfv
7c0d4e574839        micoldd/test:friendlyhello   "python app.py"     51 seconds ago      Up 47 seconds       80/tcp              getstartedlab_web.3.ochfhxexdv4w6avv1jhn1i2hz

F:\dockerExample>

可以看到已经启动了5个容器,如果你访问本地的htpp://localhost:4000,每刷新一次都是5个container id中的一个,负载均衡使用的规则是轮询

F:\dockerExample>docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                        PORTS
orh2kwsuwz1m        getstartedlab_web   replicated          5/5                 micoldd/test:friendlyhello   *:4000->80/tcp

F:\dockerExample>

注意以_web结束的NAME字段。如果你服务的名车和我取的一样,则名称为 getstartedlab_web。还列出了服务ID,以及副本数,镜像名称和公开端口。或者,您可以运行docker stack services,然后加上服务的名称。以下示例命令允许您查看与getstartedlab堆关联的所有服务 :

docker stack services getstartedlab
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
bqpve1djnk0x        getstartedlab_web   replicated          5/5                 username/repo:tag   *:4000->80/tcp

在服务中运行的单个容器称为任务。任务名称被赋予以数字递增的唯一ID,最多为在docker-compose.yml中定义的replicas数量。列出您的服务任务:

# docker service ps getstartedlab_web
F:\dockerExample>docker service ps getstartedlab_web
ID                  NAME                  IMAGE                        NODE                    DESIRED STATE       CURRENT STATE            ERROR               PORTS
i3nytdihaaoh        getstartedlab_web.1   micoldd/test:friendlyhello   linuxkit-00155d38010d   Running             Running 25 minutes ago
zoxpkb7uc18w        getstartedlab_web.2   micoldd/test:friendlyhello   linuxkit-00155d38010d   Running             Running 25 minutes ago
ochfhxexdv4w        getstartedlab_web.3   micoldd/test:friendlyhello   linuxkit-00155d38010d   Running             Running 25 minutes ago
xjlli44uqva9        getstartedlab_web.4   micoldd/test:friendlyhello   linuxkit-00155d38010d   Running             Running 25 minutes ago
n3rg197d86j7        getstartedlab_web.5   micoldd/test:friendlyhello   linuxkit-00155d38010d   Running             Running 25 minutes ago

如果您只列出系统上的所有容器,则任务也会显示:

docker container ls -q

查看所有的容器id

F:\dockerExample>docker container ls -q
2a514a1055bb
eb01bd51c06c
c0a6e0deb908
f80d82b4d4f3
7c0d4e574839

您可以运行多次curl -4 http://localhost:4000,或者在浏览器中访问该URL并点击刷新几次。

浏览器中的Hello World

无论哪种方式,Hostname都会发生变化,即五个容器id的一个,从而证明负载均衡; 对于每个请求,以轮询方式选择5个任务中的一个来响应。容器ID与上一个命令(docker container ls -q)的输出匹配。

F:\dockerExample>docker stack ps getstartedlab
ID                  NAME                  IMAGE                        NODE                    DESIRED STATE       CURRENT STATE               ERROR               PORTS
i3nytdihaaoh        getstartedlab_web.1   micoldd/test:friendlyhello   linuxkit-00155d38010d   Running             Running about an hour ago
zoxpkb7uc18w        getstartedlab_web.2   micoldd/test:friendlyhello   linuxkit-00155d38010d   Running             Running about an hour ago
ochfhxexdv4w        getstartedlab_web.3   micoldd/test:friendlyhello   linuxkit-00155d38010d   Running             Running about an hour ago
xjlli44uqva9        getstartedlab_web.4   micoldd/test:friendlyhello   linuxkit-00155d38010d   Running             Running about an hour ago
n3rg197d86j7        getstartedlab_web.5   micoldd/test:friendlyhello   linuxkit-00155d38010d   Running             Running about an hour ago

F:\dockerExample>

Windows 10上执行curl?

Windows 10 PowerShell上curl应该已经可用,但如果没有,你可以获得像Git BASH这样的Linux终端模拟器 ,或者下载wget

响应时间慢?

根据当前环境的网络配置,容器最多可能需要30秒才能响应HTTP请求。这并不表示Docker或swarm性能,而是未满足的Redis依赖性。目前,访客数量因同样的原因不起作用; 我们还没有添加服务来保存数据。

继续扩展应用程序

您可以通过更改docker-compose.yml中的replicas值,保存更改并重新运行docker stack deploy命令来扩展应用程序:

docker stack deploy -c docker-compose.yml getstartedlab

Docker执行实时更新,无需首先拆除堆或停止任何容器。

现在,重新运行docker container ls -q以查看已重新配置的已部署实例。如果增大副本数量,则会启动更多任务,从而启动更多容器。

停止应用程序和集群

上一篇下一篇

猜你喜欢

热点阅读