美文网首页
Centos 7.2 系统下安装部署Docker工具 Swarm

Centos 7.2 系统下安装部署Docker工具 Swarm

作者: anlgo | 来源:发表于2018-10-08 15:22 被阅读33次

    1、环境

        IP                   服务        主机名
        192.168.3.204   Swarm管理节点   controler
        192.168.3.202   Swarm的node节点    node2
        192.168.3.201   Swarm的node节点    node1
    

    2、配置docker yum源(三台机器)

        cd /etc/yum.repos.d/
        touch docker.repo
        vim docker.repo
    

    添加内容如下:*

        [dockerrepo]
        name=Docker Repository
        baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
        enabled=1
        gpgcheck=1
        gpgkey=https://yum.dockerproject.org/gpg
    

    :wq保存退出

    3、配置hosts表(三台机器)

        vim /etc/hosts
    

    添加内容如下:

        192.168.3.204   controller
        192.168.3.201    node1
        192.168.3.202    node2
    

    4、配置manager节点(192.168.3.204)

    4.1、删除旧版本的环境

        yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
    

    4.2、查看可用的docker版本

        [root@controller lib]#  yum list docker-engine.x86_64  --showduplicates |sort -r
        Loading mirror speeds from cached hostfile
        Loaded plugins: fastestmirror, langpacks
        docker-engine.x86_64             1.9.1-1.el7.centos                   dockerrepo
        docker-engine.x86_64             1.9.0-1.el7.centos                   dockerrepo
        docker-engine.x86_64             1.8.3-1.el7.centos                   dockerrepo
        docker-engine.x86_64             1.8.2-1.el7.centos                   dockerrepo
        docker-engine.x86_64             1.8.1-1.el7.centos                   dockerrepo
        docker-engine.x86_64             1.8.0-1.el7.centos                   dockerrepo
        docker-engine.x86_64             1.7.1-1.el7.centos                   dockerrepo
        docker-engine.x86_64             17.05.0.ce-1.el7.centos              dockerrepo
        docker-engine.x86_64             17.04.0.ce-1.el7.centos              dockerrepo
        docker-engine.x86_64             17.03.1.ce-1.el7.centos              dockerrepo
        docker-engine.x86_64             17.03.0.ce-1.el7.centos              dockerrepo
        docker-engine.x86_64             1.7.0-1.el7.centos                   dockerrepo
        docker-engine.x86_64             1.13.1-1.el7.centos                  dockerrepo
        docker-engine.x86_64             1.13.0-1.el7.centos                  dockerrepo
        docker-engine.x86_64             1.12.6-1.el7.centos                  dockerrepo
        docker-engine.x86_64             1.12.5-1.el7.centos                  dockerrepo
        docker-engine.x86_64             1.12.4-1.el7.centos                  dockerrepo
        docker-engine.x86_64             1.12.3-1.el7.centos                  dockerrepo
        docker-engine.x86_64             1.12.2-1.el7.centos                  dockerrepo
        docker-engine.x86_64             1.12.1-1.el7.centos                  dockerrepo
        docker-engine.x86_64             1.12.0-1.el7.centos                  dockerrepo
        docker-engine.x86_64             1.11.2-1.el7.centos                  dockerrepo
        docker-engine.x86_64             1.11.1-1.el7.centos                  dockerrepo
        docker-engine.x86_64             1.11.0-1.el7.centos                  dockerrepo
        docker-engine.x86_64             1.10.3-1.el7.centos                  dockerrepo
        docker-engine.x86_64             1.10.2-1.el7.centos                  dockerrepo
        docker-engine.x86_64             1.10.1-1.el7.centos                  dockerrepo
        docker-engine.x86_64             1.10.0-1.el7.centos                  dockerrepo
        Available Packages
    

    4.3、安装稳定的版本1.13.1

        [root@controller lib]# yum -y install docker-engine-1.13.1-1.el7.centos 
    

    启动docker服务并设置开机自启动

        systemctl start docker
        systemctl enable docker
    

    4.4、下载swarm镜像

        [root@controller ~]# docker pull swarm
        Using default tag: latest
        latest: Pulling from library/swarm
        Digest: sha256:406022f04a3d0c5ce4dbdb60422f24052c20ab7e6d41ebe5723aa649c3833975
        Status: Downloaded newer image for swarm:latest
        [root@controller ~]# docker images
        REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
        swarm               latest              ff454b4a0e84        7 weeks ago         12.7 MB
    

    4.5、创建swarm

        [root@controller ~]# docker swarm init --advertise-addr 192.168.3.204
        Swarm initialized: current node (r344b4bz1ug3bnw6olsxzqtis) is now a manager.
    
    
        To add a worker to this swarm, run the following command:
    
    
            docker swarm join \
            --token SWMTKN-1-1kvrsn7j74ie7fqxzxb0wndk76gjnwdyc6jnhe4771h55edgzw-20spfbubw7ckh1w0w3plvsak3 \
            192.168.3.204:2377
    
    
        To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
    

    注:上面的token值要保存,其他节点均通过它加入集群

    4.6、查看集群信息

        [root@controller ~]# docker info
        Containers: 0
         Running: 0
         Paused: 0
         Stopped: 0
        Images: 1
        Server Version: 1.13.1
        Storage Driver: overlay
         Backing Filesystem: xfs
         Supports d_type: false
        Logging Driver: json-file
        Cgroup Driver: cgroupfs
        Plugins: 
         Volume: local
         Network: bridge host macvlan null overlay
        Swarm: active
         NodeID: r344b4bz1ug3bnw6olsxzqtis
         Is Manager: true
         ClusterID: p5r0a72jdoq9cztshyf0bvfye
         Managers: 1
         Nodes: 1
         Orchestration:
          Task History Retention Limit: 5
         Raft:
          Snapshot Interval: 10000
          Number of Old Snapshots to Retain: 0
          Heartbeat Tick: 1
          Election Tick: 3
         Dispatcher:
          Heartbeat Period: 5 seconds
         CA Configuration:
          Expiry Duration: 3 months
         Node Address: 192.168.3.204
         Manager Addresses:
          192.168.3.204:2377
        Runtimes: runc
        Default Runtime: runc
        Init Binary: docker-init
        containerd version: aa8187dbd3b7ad67d8e5e3a15115d3eef43a7ed1
        runc version: 9df8b306d01f59d3a8029be411de015b7304dd8f
        init version: 949e6fa
        Security Options:
         seccomp
          Profile: default
        Kernel Version: 3.10.0-327.18.2.el7.x86_64
        Operating System: CentOS Linux 7 (Core)
        OSType: linux
        Architecture: x86_64
        CPUs: 4
        Total Memory: 7.551 GiB
        Name: controller
        ID: 5E6V:BHYM:3L74:EYS3:ZUID:INQP:DINI:U7I6:QKJZ:UCYY:QZJF:GXGN
        Docker Root Dir: /var/lib/docker
        Debug Mode (client): false
        Debug Mode (server): false
        Registry: https://index.docker.io/v1/
        Experimental: false
        Insecure Registries:
         127.0.0.0/8
        Live Restore Enabled: false
    

    4.7、查看集群节点信息

        [root@controller ~]# docker node ls
        ID                           HOSTNAME    STATUS  AVAILABILITY  MANAGER STATUS
        r344b4bz1ug3bnw6olsxzqtis *  controller  Ready   Active        Leader
    

    5、配置节点(192.168.3.202,192.168.3.201)

    5.1、安装docker

        yum -y install docker-engine-1.13.1-1.el7.centos
    

    启动docker

        systemctl start docker
    

    开机自启动

        systemctl enable docker
    

    5.2、加入到集群

        docker swarm join --token SWMTKN-1-1kvrsn7j74ie7fqxzxb0wndk76gjnwdyc6jnhe4771h55edgzw-20spfbubw7ckh1w0w3plvsak3 192.168.3.204:2377
    

    5.3、查看docker信息(两个节点一样执行,我这里只贴出在node2执行的信息)

        [root@node2 ~]# docker info
        Containers: 0
         Running: 0
         Paused: 0
         Stopped: 0
        Images: 0
        Server Version: 1.13.1
        Storage Driver: overlay
         Backing Filesystem: xfs
         Supports d_type: false
        Logging Driver: json-file
        Cgroup Driver: cgroupfs
        Plugins: 
         Volume: local
         Network: bridge host macvlan null overlay
        Swarm: active
         NodeID: pdqau3dpxtgnr6gg78zbt7nnz
         Is Manager: false
         Node Address: 192.168.3.202
         Manager Addresses:
          192.168.3.204:2377
        Runtimes: runc
        Default Runtime: runc
        Init Binary: docker-init
        containerd version: aa8187dbd3b7ad67d8e5e3a15115d3eef43a7ed1
        runc version: 9df8b306d01f59d3a8029be411de015b7304dd8f
        init version: 949e6fa
        Security Options:
         seccomp
          Profile: default
        Kernel Version: 3.10.0-229.el7.x86_64
        Operating System: CentOS Linux 7 (Core)
        OSType: linux
        Architecture: x86_64
        CPUs: 2
        Total Memory: 1.797 GiB
        Name: node2
        ID: Q7VU:TMEP:NCO6:YVXC:O6U2:2DON:5RUL:VGJ4:D2TA:345M:I4Q6:UHN5
        Docker Root Dir: /var/lib/docker
        Debug Mode (client): false
        Debug Mode (server): false
        Registry: https://index.docker.io/v1/
        WARNING: bridge-nf-call-ip6tables is disabled
        Experimental: false
        Insecure Registries:
         127.0.0.0/8
        Live Restore Enabled: false
    

    5.4、在集群节点(192.168.3.204)查看节点信息

        [root@controller ~]# docker node ls
        ID                           HOSTNAME    STATUS  AVAILABILITY  MANAGER STATUS
        hjba4ers0ahzbdvggajc3b73s    node1       Ready   Active        
        pdqau3dpxtgnr6gg78zbt7nnz    node2       Ready   Active        
        r344b4bz1ug3bnw6olsxzqtis *  controller  Ready   Active        Leader
    

    6、在swarm中部署nginx服务

    6.1、创建覆盖网络(保障不同主机容器互通)

        [root@controller ~]# docker network create -d overlay nginx
        692ud2yyqimkuq6rufpnwnt05
        [root@controller ~]# docker network ls
        NETWORK ID          NAME                DRIVER              SCOPE
        27940e4bc00a        bridge              bridge              local
        cd675706a24e        docker_gwbridge     bridge              local
        ec66ee0e74b1        host                host                local
        l8d4j4w5o52u        ingress             overlay             swarm
        692ud2yyqimk        nginx               overlay             swarm
        3a44f24d7c1f        none                null                local
    

    6.2、创建服务

    创建:

        [root@controller ~]# docker service create --replicas 1 --network nginx --name MyNginx -p 80:80 nginx
        8sk44dipvooy4sb2e7e4l8wb1
    

    查看服务

        [root@controller ~]# docker service ls
        ID            NAME     MODE        REPLICAS  IMAGE
        8sk44dipvooy  MyNginx  replicated  1/1       nginx:latest
    

    查看摘要信息:

        [root@controller ~]#  docker service inspect --pretty MyNginx
    
    
        ID:        8sk44dipvooy4sb2e7e4l8wb1
        Name:        MyNginx
        Service Mode:    Replicated
         Replicas:    1
        Placement:
        UpdateConfig:
         Parallelism:    1
         On failure:    pause
         Max failure ratio: 0
        ContainerSpec:
         Image:        nginx:latest@sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424
        Resources:
        Networks: nginx 
        Endpoint Mode:    vip
        Ports:
         PublishedPort 80
          Protocol = tcp
          TargetPort = 80 
    

    6.3、查看服务的运行情况

        [root@controller ~]# docker service ps MyNginx
        ID            NAME       IMAGE         NODE   DESIRED STATE  CURRENT STATE               ERROR  PORTS
        khvp4r03de4f  MyNginx.1  nginx:latest  node2  Running        Running about a minute ago       
    

    6.4、访问服务

    浏览器或者curl访问服务http://192.168.3.204

        <!DOCTYPE html>
        <html>
        <head>
        <title>Welcome to nginx!</title>
        <style>
            body {
                width: 35em;
                margin: 0 auto;
                font-family: Tahoma, Verdana, Arial, sans-serif;
            }
        </style>
        </head>
        <body>
        <h1>Welcome to nginx!</h1>
        <p>If you see this page, the nginx web server is successfully installed and
        working. Further configuration is required.</p>
    
    
        <p>For online documentation and support please refer to
        <a href="http://nginx.org/">nginx.org</a>.<br/>
        Commercial support is available at
        <a href="http://nginx.com/">nginx.com</a>.</p>
    
    
        <p><em>Thank you for using nginx.</em></p>
        </body>
        </html>
    

    7、Service的复制功能

    7.1、增加

    设置5个副本

        [root@controller ~]# docker service scale MyNginx=5
        MyNginx scaled to 5
        [root@controller ~]# docker service ps MyNginx
        ID            NAME       IMAGE         NODE        DESIRED STATE  CURRENT STATE            ERROR  PORTS
        khvp4r03de4f  MyNginx.1  nginx:latest  node2       Running        Running 12 minutes ago          
        wecu7jye2mg3  MyNginx.2  nginx:latest  controller  Running        Preparing 5 seconds ago         
        5a6rp8c6arvt  MyNginx.3  nginx:latest  node2       Running        Running 4 seconds ago           
        68lu0fpg75on  MyNginx.4  nginx:latest  node1       Running        Preparing 5 seconds ago         
        todza2i5lnnt  MyNginx.5  nginx:latest  controller  Running        Preparing 5 seconds ago       
    

    7.2、减少

    变更为1个副本

        [root@controller ~]# docker service scale MyNginx=1
        MyNginx scaled to 1
        [root@controller ~]# docker service ls
        ID            NAME     MODE        REPLICAS  IMAGE
        8sk44dipvooy  MyNginx  replicated  1/1       nginx:latest
        [root@controller ~]# docker service ps MyNginx
        ID            NAME           IMAGE         NODE        DESIRED STATE  CURRENT STATE           ERROR                             PORTS
        exoh860irad5  MyNginx.1      nginx:latest  node1       Running        Running 4 minutes ago         
    

    8、使用volume

    8.1、查看volume

        [root@controller ~]# docker volume ls
        DRIVER              VOLUME NAME
    

    8.2、创建volume

        [root@controller ~]# docker volume create --name nginx
        nginx
        [root@controller ~]# docker volume ls
        DRIVER              VOLUME NAME
        local               nginx
    

    8.3、创建服务并指定挂载

    src是volume名称

    dst是挂载点(也就是容器内的路径,如果不存在会自动创建)

    注:若指定的是本机的路径,需要把type改成bind, src是本机的路径

        [root@controller ~]# docker service create  --replicas 2 --mount type=volume,src=nginx,dst=/farmer --name ng nginx
        r7bld5xg9cy6285z6207wlly2
        [root@controller ~]# docker service ls
        ID            NAME     MODE        REPLICAS  IMAGE
        9et4o10fn0w2  MyNginx  replicated  2/2       nginx:latest
        r7bld5xg9cy6  ng       replicated  2/2       nginx:latest
        [root@controller ~]# docker service ps ng
        ID            NAME  IMAGE         NODE   DESIRED STATE  CURRENT STATE           ERROR  PORTS
        190gm96z6brc  ng.1  nginx:latest  node2  Running        Running 25 seconds ago         
        093pql11ttdm  ng.2  nginx:latest  node1  Running        Running 25 seconds ago         
    

    9、创建nginx服务和负载均衡的测试

    9.1、创建volume名称为modules

        docker volume create --name modules
    

    注:因为/etc/nginx/mudules是软连接到/usr/lib/nginx/modules,一旦将/etc/nginx挂载到本地,这个目录将会失效,所以需要在modules也挂到本地

        lrwxrwxrwx 1 root root   22 Jul 24 21:02 modules -> /usr/lib/nginx/modules 
    

    9.2、创建软连接(所有节点,192.168.3.204,192.168.3.202,192.168.3.201)

        mkdir /usr/lib/nginx
        ln -s /var/lib/docker/volumes/modules/_data/modules/ /usr/lib/nginx/modules
    

    9.3、创建test服务

        [root@controller ~]# docker service create --replicas 2 --mount type=volume,src=nginx,dst=/etc/nginx/ --mount type=volume,dst=/usr/lib/nginx/,src=modules --name test -p 8880:80 nginx
        9mt9wuabsluykwfh2j7ez9gut
        [root@controller ~]# docker service ps test
        ID            NAME    IMAGE         NODE        DESIRED STATE  CURRENT STATE          ERROR  PORTS
        hwp14enb23gz  test.1  nginx:latest  node1       Running        Running 6 seconds ago         
        t6mpq6sbongg  test.2  nginx:latest  controller  Running        Running 6 seconds ago      
    

    9.4、配置HTML服务(三个节点,192.168.3.201,192.168.3.202,192.168.3.204)

        cd /var/lib/docker/volumes/nginx/_data
        mkdir html
        vim conf.d/default.conf
    

    修改如下:

        location / {
                root   /etc/nginx/html;
                index  index.html index.htm;
            }
    

    注:这里用/etc/nginx/html路径是因为在docker里面路径是这个

    我把创建的新的html当做nginx的root目录

    9.4.1、管理节点

        cd /var/lib/docker/volumes/nginx/_data/html
        touch index.html
    

    添加内容:

        <h1>Controller</h1>
    

    9.4.1、node1节点

        cd /var/lib/docker/volumes/nginx/_data/html
        touch index.html
    

    添加内容:

        <h1>Node1</h1>
    

    9.4.2、node2节点

        cd /var/lib/docker/volumes/nginx/_data/html
        touch index.html
    

    添加内容:

        <h1>Node2</h1>
    

    9.5、重启nginx服务

    当前服务在node1和controller节点运行,故而只在这两个节点执行(机器环境不同,所在的节点不同,请看清自己的节点)

    9.5.1、node1节点

        [root@node1 ~]# docker ps
        CONTAINER ID        IMAGE                                                                           COMMAND                  CREATED             STATUS              PORTS               NAMES
        33b4e08c57d0        nginx@sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424   "nginx -g 'daemon ..."   4 hours ago         Up 4 hours          80/tcp              test.1.ov76pdo715cc1f24i5vfgu6si
        docker exec -ti 33b4e08c57d0 /bin/bash
        /etc/init.d/nginx reload
    

    9.5.2、controller节点

        [root@controller _data]# docker ps
        CONTAINER ID        IMAGE                                                                           COMMAND                  CREATED             STATUS              PORTS               NAMES
        e54913d64ce9        nginx@sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424   "nginx -g 'daemon ..."   3 days ago          Up 3 days           80/tcp              test.2.t6mpq6sbongg5rq8rd4lofp6u
        [root@controller _data]# docker exec -ti e54913d64ce9 /bin/bash
        root@e54913d64ce9:/# /etc/init.d/nginx reload
    

    9.6、测试服务(服务是否正常,是否有负载)

    注:测试过程中有时候多curl几次才会负载到另外的一个节点

        [root@mysql76 ~]# curl http://192.168.3.204:8880/
        <h1>Node1</h1>
        [root@mysql76 ~]# curl http://192.168.3.204:8880/
        <h1>Controller</h1>
    

    9.7、测试集群

    在节点1执行

        docker stop 33b4e08c57d0
    

    查看集群服务

        [root@controller _data]# docker service ps test
        ID            NAME        IMAGE         NODE        DESIRED STATE  CURRENT STATE         ERROR  PORTS
        ov76pdo715cc  test.1      nginx:latest  node2       Running        Running 1 hours ago          
        qoyuk652tky2   \_ test.1  nginx:latest  node1       Shutdown       Complete 1 hours ago         
        t6mpq6sbongg  test.2      nginx:latest  controller  Running        Running 3 days ago
    

    测试集群服务(服务是否正常,是否有负载)

    注:测试过程中有时候多curl几次才会负载到另外的一个节点

        [root@mysql76 ~]# curl http://192.168.3.204:8880/
        <h1>Node2</h1>
        [root@mysql76 ~]# curl http://192.168.3.204:8880/
        <h1>Controller</h1>

    相关文章

      网友评论

          本文标题:Centos 7.2 系统下安装部署Docker工具 Swarm

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