美文网首页
Docker集群

Docker集群

作者: xieyan0811 | 来源:发表于2018-07-01 15:28 被阅读30次

    1. 说明

     一般情况下,我们用Docker run命令将docker启成普通进程。有时候我们有多台运行docker的机器,希望Docker以集群方式运行。与手动启动不同Docker,集群涉及统一管理,各服务的状态监控,负载均衡,日志文件,重启,统一向外暴露端口等等。

     本篇介绍一些Docker集群相关的内容:包括集群管理工具Smarm,卷Volume,图形化管理工具Portainer。

    2. 安装Docker的最新版本

     如果ubuntu版本较低,用apt-get只能安装docker的早期版本,像docker service, docker volume等工具都无法正常使用,需要下载docker较新的版本,方法如下:

    $ curl -fsSLO https://get.daocloud.io/docker/builds/Linux/x86_64/docker-17.05.0-ce.tgz
    $ sudo tar --strip-components=1 -xvzf docker-17.05.0-ce.tgz -C /usr/local/bin  #解压到bin目录
    $ sudo dockerd  
    

     执行dockerd启动docker后台服务,就无需再使用系统方式启动(service docker start),用docker命令即可与后台服务交互了。该方法也比较适用于在嵌入式系统中安装docker。

    3. Docker Portainer

     Portainer是Docker的可视化管理工具,用它可以查看和管理docker的映像,容器,卷,后台服务等等。

     Docker的辅助工具,一般也是以Docker image的方式提供,安装它们不需要用apt-get或者下载tgz包,只需要用docker pull把镜像下载到本地即可使用。安装Portainer方法如下:

    $ docker search portainer  # 查看portainer相关的工具
    $ docker pull docker.io/portainer/portainer  #下载portainer镜像
    $ docker images  # 查看是否正常下载到本地
    $ docker run -d -p 9000:9000 \
        --restart=always \
        -v /var/run/docker.sock:/var/run/docker.sock \
        --name prtainer-test \
    docker.io/portainer/portainer   # 运行portainer
    

     此时用浏览器访问http://127.0.0.1:9000,即可看到portainer界面,首次访问时需要设置密码(如:admin, 12345678),登入后即可看到docker的各种状态。

    4. Docker Volume

     上篇提到过,镜像是静态的,当容器关闭之后,对其中内容的修改不能保存,虽然可以用commit从容器生成镜像,但很麻烦,所以在手动运行容器时用-v参数,将容器外目录映射到容器内,以方便保存。

     在集群中以服务的方式启动docker时,不使用直接指定路径的映射方式,而使用volume,简单地说,就是把容器外目录映射成一个volume,再将该volume挂载成容器内目录,这样多个容器可使用同一volume。

     具体方法如下:

    $ docker volume create --name 名  # 创建volume, 默认位置在/var/lib/docker/volumes/名/_data
    $ docker volume ls  # 查看当前所有volume,也可使用portainer中的volume查看
    $ docker volume inspect VOLUME_NAME  # 查看volume的具体内容
    $ docker rm -v VOLUME_NAME  # 删除 volume
    

    5. Docker Swarm

     Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。

     Swarm自己不运行容器,它只是接受docker客户端发送过来的请求,调度适合的节点来运行容器,这意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,当Swarm重新恢复运行之后,它会收集重建集群信息。

     具体方法如下:

    $ docker pull swarm  # 下载swarm镜像
    $ docker run swarm create
    此时会显示集群号,要记住这个号,各台机器加入集群时,都需要指定这个号
    $ docker run swarm list token://集群号  # 查看集群中的所有节点
    

     在各个docker机器用以下方式加入集群

    $ docker run -d swarm join --addr=192.168.1.207:2375 token://集群号
    

     在管理节点上运行以下命令

    $ docker rn -d -p 2376:2375 swarm manage token:
    

     此时用docker ps就可以看到此管理容器了

    6. Docker Stack

     一个stack就是一组有关联的服务的组合,可以编排在一起管理。具体方法是将各个服务的内容填写在一个yml文件中。docker build时指定的CMD, EXPOSE, VOLUME, ENV 等) 将会自动被获取,无需在yml 中再次设置。

     yml文件写法如下:

    version: "3.0"
    services:
      example: # 服务名
        image: xieyan:0.4  # 镜像名
        command: sleep 5000  # 执行的程序
        volumes: 
          - haha:/root/model_data  # 挂载的volume及容器中的对应目录
        deploy:
          mode: replicated
          replicas: 1
          placement:
            constraints: [node.hostname!=node1]  # 限制不在nod1结点执行
          resources:
            limits:
              cpus: '2'  # 限制CPU个数
              memory: 2048M  # 限制内存大小
    
    volumes:
      haha:
    external: true
    

     开启和关系stack方法如期下:

    $ docker stack deploy --compose-file tmp.yml testme # 开启stack, testme是stack名
    $ docker stack rm testme  # 关
    

     此时在portainer的stack/service中可以看到testme_example
     如果启动服务出问题,可能会不停的重启,可用以下命令查看出错的具体原因。

    $ docker service logs testme_example
    

    7. 参考

    Portainer -- Docker可视化管理工具的安装配置及使用
    https://blog.csdn.net/A632189007/article/details/78779920

    Docker管理工具-Swarm部署记录
    https://www.cnblogs.com/liuyansheng/p/8178341.html

    深入理解Docker(镜像、容器、服务、swarm、stack)
    https://blog.csdn.net/oChangWen/article/details/75758211

    Docker存储volume
    https://www.cnblogs.com/elvi/p/8463673.html

    相关文章

      网友评论

          本文标题:Docker集群

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