文档章节

Docker Swarm实战-部署

China_OS
 China_OS
发布于 2017/08/11 08:57
字数 869
阅读 20
收藏 0

    本章开始swarm的具体使用,swarm的知识点可以阅读docker swarm mode初探,废话不多说,开干

软件信息

软件 版本
OS Ubuntu 16.04.3 LTS
Docker 18.03.0-ce

主机信息

ubuntu16.04-1 172.31.68.241 swarm manager
ubuntu16.04-2 172.31.68.242 swarm node
ubuntu16.04-3 172.31.68.243 swarm node

swarm初始化

    初始化manager

docker swarm init --advertise-addr 172.31.68.241

   

    初始化worker

docker swarm join --token SWMTKN-1-1mn8x6itne5ldwad5bmtgtdkemoim3o53dc7u2b5y5zj1lwj4l-etyttp60hpns5i4jifym7y3hd 172.31.68.241:2377

        ps:注意要在两台worker上都要执行

    查看node状态

docker node ls

    禁止manager的worker功能

docker node update --availability drain ubuntu16.04-1

        ps:这样就不会在manager上分配执行任务了

    给worker增加label

docker node update --label-add app ubuntu16.04-2
docker node update --label-add app ubuntu16.04-3

    查看一个node的详细信息

docker node inspect ubuntu16.04-3

        ps:要查看某一项具体的信息,可以使用如下命令模式

docker node inspect ubuntu16.04-3  --format "{{ .Status.Addr }}"

创建service

    创建service,一个副本

docker service  create --replicas 1 -p 4000:80 --name hello 172.31.68.241/library/friendlyhello

    查看service

docker service ls
docker service ps hello

        ps:通过service ps可以看到真实的task是运行在ubuntu16.04-2的,容器的名称叫hello.1。

    查看其它节点任务

docker container ls

        ps:可以看到在ubuntu16.04-2上,容器的真实名称是:service名称+任务id+一串随机码。而在ubuntu16.04-3上并无相关task运行,因为replicas为1

    查看service的详细信息

docker service inspect hello
[
    {
        "ID": "woxqqkoqr6viu8flojtuuht97",
        "Version": {
            "Index": 25
        },
        "CreatedAt": "2018-08-17T07:20:13.503484813Z",
        "UpdatedAt": "2018-08-17T07:20:13.515429684Z",
        "Spec": {
            "Name": "hello",
            "Labels": {},
            "TaskTemplate": {
                "ContainerSpec": {
                    "Image": "172.31.68.241/library/friendlyhello:latest@sha256:05def471119a0937508cdcb2445cb55375d15257b0a117e954bcd3527c36eac2",
                    "StopGracePeriod": 10000000000,
                    "DNSConfig": {},
                    "Isolation": "default"
                },
                "Resources": {
                    "Limits": {},
                    "Reservations": {}
                },
                "RestartPolicy": {
                    "Condition": "any",
                    "Delay": 5000000000,
                    "MaxAttempts": 0
                },
                "Placement": {
                    "Platforms": [
                        {
                            "Architecture": "amd64",
                            "OS": "linux"
                        }
                    ]
                },
                "ForceUpdate": 0,
                "Runtime": "container"
            },
            "Mode": {
                "Replicated": {
                    "Replicas": 1
                }
            },
            "UpdateConfig": {
                "Parallelism": 1,
                "FailureAction": "pause",
                "Monitor": 5000000000,
                "MaxFailureRatio": 0,
                "Order": "stop-first"
            },
            "RollbackConfig": {
                "Parallelism": 1,
                "FailureAction": "pause",
                "Monitor": 5000000000,
                "MaxFailureRatio": 0,
                "Order": "stop-first"
            },
            "EndpointSpec": {
                "Mode": "vip",
                "Ports": [
                    {
                        "Protocol": "tcp",
                        "TargetPort": 80,
                        "PublishedPort": 4000,
                        "PublishMode": "ingress"
                    }
                ]
            }
        },
        "Endpoint": {
            "Spec": {
                "Mode": "vip",
                "Ports": [
                    {
                        "Protocol": "tcp",
                        "TargetPort": 80,
                        "PublishedPort": 4000,
                        "PublishMode": "ingress"
                    }
                ]
            },
            "Ports": [
                {
                    "Protocol": "tcp",
                    "TargetPort": 80,
                    "PublishedPort": 4000,
                    "PublishMode": "ingress"
                }
            ],
            "VirtualIPs": [
                {
                    "NetworkID": "zhamhv5cl7zhr7c7g6n1so6kv",
                    "Addr": "10.255.0.5/16"
                }
            ]
        }
    }
]

    访问service

curl http://172.31.68.241:4000 -I
curl http://172.31.68.242:4000 -I
curl http://172.31.68.243:4000 -I

        ps:随便访问swarm mode集群内的任何一个节点,都可以正常访问该服务。

    扩展service

docker service scale hello=2

    查看扩展厚的结果

docker service ps hello

  swarm config

    创建config

docker config create hello-config ./hello-config

    查看config

docker config ls

    查看详细信息

docker config inspect hello-config

    在service中使用config

docker service create --replicas 1 --name config-test --config source=hello-config,target=/mnt/hello-config 172.31.68.241/library/friendlyhello

        查看task的运行worker

docker service ps config-test

        进入容器查看配置

docker container ls
docker container exec -it b06c415e7cac /bin/bash

        ps:如果在启动service的时候不指定config的source/target,则默认config在容器内的挂载目录在/hello-config

    查看config的本地目录信息

        config一般在容器所在宿主机的/var/lib/docker/containers/container_id/mounts/secrets目录下面,是一个随机字符串文件

swarm secret

    config和secret的差别就是一个是本地文件,一个是在tmpfs中存储的

    创建secret

#查看secretr文件
cat hello-config-secret
#创建secret
docker secret create hello-secret ./hello-config-secret
#查看secret
docker secret ls

    在service中使用secret

        启动带secret的service

#启动服务
docker service create --replicas 1 --label app --secret hello-secret --name secret-test  172.31.68.241/library/friendlyhello
#查看task在哪台机器运行
docker service ps secret-test

        查看容器中secret信息

docker container exec -it 47c8f6f74ae3 /bin/bash

        ps:在使用secret的时候,secret配置一般在/run/secrets/目录下面,名称就是secret名称

 

© 著作权归作者所有

共有 人打赏支持
上一篇: curl
China_OS
粉丝 421
博文 460
码字总数 513906
作品 0
静安
技术主管
私信 提问

暂无文章

四、RabbitMQ3.7在CentOS7下的安装

安装依赖 sudo yum install -y gcc gcc-c++ glibc-devel make ncurses-devel openssl-devel autoconf java-1.8.0-openjdk-devel git 创建yum源 vi /etc/yum.repos.d/rabbitmq-erlang.repo [......

XuePeng77
今天
2
0
android 延长Toast的时长

示例:myToast(5000,"hello"); public void myToast(int showTime, String msg) { Toast hello = Toast.makeText(getActivity(), msg, Toast.LENGTH_SHORT); new CountDownTimer(......

雨焰
昨天
4
0
浅谈mybatis的日志适配模式

Java开发中经常用到的日志框架有很多,Log4j、Log4j2、slf4j等等,Mybatis定义了一套统一的日志接口供上层使用,并为上述常用的日志框架提供了相应的适配器。有关适配器模式例子可以参考 设计...

算法之名
昨天
13
0
大数据教程(13.6)sqoop使用教程

上一章节,介绍了sqoop数据迁移工具安装以及简单导入实例的相关知识;本篇博客,博主将继续为小伙伴们分享sqoop的使用。 一、sqoop数据导入 (1)、导入关系表到HIVE ./sqoop import --connect...

em_aaron
昨天
3
0
Git cherry-pick 使用总结

应用背景:假设现在有两个分支:dev_01, dev_02. 如果我想把dev_01分支上的某几个commit合并到dev_02分支, 那么怎么办呢? 这就是cherry-pick的工作了。cherry-pick会捡选某些commit, 即把某...

天王盖地虎626
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部