美文网首页
Docker 基本命令( Version:18.09.2,Win

Docker 基本命令( Version:18.09.2,Win

作者: MicoCube | 来源:发表于2019-05-14 15:07 被阅读0次

    服务

    通过运行镜像得到一个容器,这个容器向外提供服务,服务只运行一个映像,但它的运行方式——即它应该使用哪些端口,应该运行多少个容器副本,以及服务具有所需的容量,等等。扩展服务会更改运行该软件的容器实例的数量,从而为流程中的服务分配更多的计算资源,幸运的是在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执行以下操作:

    • 从username/repo:tag中拉取镜像。

    • 将该映像的5个实例作为一个被调用的服务运行web,限制每个实例的资源使用,最多只占单个CPU核心时间的10%(“1.5”表示一个半核心即150%),以及50MB RAM。

    • 如果一个失败,立即重启容器。

    • 将主机上的端口4000映射到web端口80。

    • 指示web容器通过称为负载平衡的网络共享端口80 webnet。(在内部,容器本身将web发布到 80端口。)

    • webnet使用默认设置(负载平衡的覆盖网络)定义网络。

    运行负载均衡的应用

    • 在运行之前,要打开集群模式,注意docker swarm init命令会将当前节点作为集群管理器
    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.”

    • 运行之前现在得为你的service取个名字:我给的名字是getstartedlab:
      docker stack deploy -c docker-compose.yml getstartedlab
    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中的一个,负载均衡使用的规则是轮询

    • 查看所有服务docker service ls
    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)的输出匹配。

    • 要查看堆中的所有任务,您可以运行docker stack ps加上您的服务名称,如以下示例所示:
    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以查看已重新配置的已部署实例。如果增大副本数量,则会启动更多任务,从而启动更多容器。

    停止应用程序和集群

    • 将应用程序关闭docker stack rm加上服务名称:

      docker stack rm getstartedlab
      
      
    • 关闭集群。

      docker swarm leave --force
      
    • 示例

      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>docker stack rm getstartedlab
      Removing service getstartedlab_web
      Removing network getstartedlab_webnet
      
      F:\dockerExample>docker container ls
      CONTAINER ID        IMAGE                        COMMAND             CREATED             STATUS              PORTS               NAMES
      2a514a1055bb        micoldd/test:friendlyhello   "python app.py"     About an hour ago   Up About an hour    80/tcp              getstartedlab_web.5.n3rg197d86j7ps3w1byeq2jqc
      eb01bd51c06c        micoldd/test:friendlyhello   "python app.py"     About an hour ago   Up About an hour    80/tcp              getstartedlab_web.4.xjlli44uqva9ztp02vl079q6w
      c0a6e0deb908        micoldd/test:friendlyhello   "python app.py"     About an hour ago   Up About an hour    80/tcp              getstartedlab_web.2.zoxpkb7uc18wa0jr6gbsyqayu
      f80d82b4d4f3        micoldd/test:friendlyhello   "python app.py"     About an hour ago   Up About an hour    80/tcp              getstartedlab_web.1.i3nytdihaaohn3hflznjx5hfv
      7c0d4e574839        micoldd/test:friendlyhello   "python app.py"     About an hour ago   Up About an hour    80/tcp              getstartedlab_web.3.ochfhxexdv4w6avv1jhn1i2hz
      
      F:\dockerExample>docker swarm leave --force
      Node left the swarm.
      
      F:\dockerExample>docker container ls
      CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
      
      F:\dockerExample>
      

    相关文章

      网友评论

          本文标题:Docker 基本命令( Version:18.09.2,Win

          本文链接:https://www.haomeiwen.com/subject/coxsaqtx.html