zoukankan      html  css  js  c++  java
  • 【Docker】Docker学习笔记:shipyard使用

    Docker的命令行操作已经非常方便,不过容器多了难免不方便,如果有web系统来管理、监控则对运维来说会更方便一些。这方面的选择也比较多,比如Docker UI、Shipyard等。因为shipyard支持多主机、集群管理。所以我们选择了shipyard来进行容器管理。
    在网上找到有关shipyard的资料除了官网git。其他大部分资料都是老版本python实现相关的,而现在已经采用go + Angular.js + semantic UI实现。

    shipyard是在Docker Swarm实现对容器、镜像、docker集群、仓库、节点进行管理的web系统。采用golang调用Docker Remote API和angular.js+semantic UI实现web开发的。

    shipyard部署

    shipyard的部署非常简单,官方提供了在线的脚本通过命令进行安装,使用curl -s https://shipyard-project.com/deploy | bash -s命令进行安装即可。
    deploy实际上是一个shell脚本,实现docker run启动shipyard依赖的容器。如果觉得每次通过curl启动不方便也可以将这个脚本下载到本地磁盘进行操作。
    启动完成以后,在浏览器输入http://host:8080即可访问,默认用户名为admin密码为shipyard。
    注意:由于deploy在执行时需要访问/var/run/docker.sock,所以需要root权限,或者为该文件添加权限。

    shipyard的生态

    shipyard是由shipyard控制器以及周围生态系统构成,以下按照deploy启动顺序进行介绍。

    • RethinkDB

    deploy首先启动的就是RethinkDB容器,shipyard采用RethinkDB作为数据库来保存用户等信息

    • Discovery

    为了使用Swarm,我们需要一个外部的密钥值存储群容器,shipyard默认是采用了etcd。

    • shipyard_certs

    证书管理容器,实现证书验证功能

    • Proxy

      默认情况下,Docker引擎只监听Socket,我们可以重新配置引擎使用TLS或者使用一个代理容器,转发请求从TCP到Docker监听的UNIX Socket。

    • Swarm Manager

      Swarm管理器

    • Swarm Agent

    Swarm代理,运行在每个节点上。

    • Controller

    shipyard控制器,Remote API的实现和web的实现。

    其他操作

    执行curl -sSL https://shipyard-project.com/deploy | bash -s -- -h可以看到deploy的使用帮助介绍

    可以通过在命令后面带上选项,实现其他功能。

    • 使用自定义shipyard镜像

    curl -sSL https://shipyard-project.com/deploy | IMAGE=shipyard/shipyard:test bash -s

    • 添加节点

    curl -sSL https://shipyard-project.com/deploy | ACTION=node DISCOVERY=etcd://10.0.1.10:4001 bash -s

    • 删除容器

    curl -sSL https://shipyard-project.com/deploy | ACTION=remove

    • 升级容器

    curl -sSL https://shipyard-project.com/deploy | ACTION=upgrade

    代码结构

    git下载到shipyard源码以后,可以看到代码目录下的结构。

    自定义编译

    官方的shipyard在实际应用中总有不够完善的地方,比如汉化、比如部署容器时,镜像竟然不能选择而得手动输入镜像名,等等。如果涉及到修改以后如何编译,build自定义image的问题。

    环境部署

    • go开发环境

    网上参考文章比较多,ubuntu下可以参考这篇

    • 安装Godep

    go get github.com/tools/godep

    • 安装npm

    yum install npm或apt-get install npm

    • bower

    npm install -g bower

    docker-compose打包

    • docker-compose安装

    sudo curl -L https://github.com/docker/compose/releases/download/1.4.2/docker-compose-uname -s-uname -m > /usr/local/bin/docker-compose
    在shipyard目录下直接执行docker-compose up即可,会编译控制前,建立shipyard镜像,然后启动shipyard。
    用现有docker-compose.yml生成的controller包括shipyard和media镜像,体积都非常大,达到900M+,具体原因没去深究,所以还是不建议用此方法。

    单独编译shipyard

    • controller

    按照官方提供的make build编译,在提交git步骤一直不对,只是本地开发,则可以直接打开Makefie,找到build选项,使用godep go build -a -tags "netgo static_build" -installsuffix netgo 到controller目录下编译即可,不提commit到git。编译完成后,在目录下会生成一个controller可执行文件,可以./controller -h测试是否编译成功。

    说明
    因为代码中很多包是直接从git code.google import,所以需要在FQ情况下执行go get . 将这些包下载到本地目录。

    不知道为何code.google的代码无法自动下载,只有通过hg从code.google下载了。
    首先安装mercurial,使用yum install hg即可。
    如果通过代码安装mercurial则按照以下步骤
    wget http://mercurial.selenic.com/release/mercurial-1.4.1.tar.gz tar –zvxf mercurial-1.4.1.tar.gz cd mercurial-1.4.1 make install
    如果安装提示找不到文件‘Python.h’ 则需要安装 python-devel
    apt-get install python-devel
    添加环境变量export PYTHONPATH=/usr/local/lib64/python2.6/site-packages

    安装完成后使用hg clone https://code.google.com/p/go.crypto/将代码下载下来。

    • web页面编译

    web页面的编译直接使用官方提供的make media即可。编译完成可以看到controller/static目录下多了bower_components目录。

    • 构建镜像

    在controller有提供Dockerfile,直接执行docker build .即可。

    说明

    在应用中,官方提供的在线部署方法有时候不行,可能是由于网络原因造成,解决方法可以将deploy下载下来执行,也可以对deploy进行修改。
    为了符合我的使用习惯,我对deploy官方代码修改成短参数形式。

    遇到的问题

    在centos启动时,总是一直处于等待状态,后查明应该是防火墙的原因,导致一些应用无法访问,解决的办法是打开用到的端口,如4001等。或者直接关闭防火墙

    以上内容通过参考网上相关博客和自己实践整理,若有问题,欢迎指正、讨论!

  • 相关阅读:
    Android SurfaceView实战 带你玩转flabby bird (上)
    linux释放内存的命令
    Linux上的free命令详解
    app后端设计(14)--LBS的偏移问题
    包床、退床
    oracle学习17
    提示在【办公管理】-->【今日工作】
    oracle学习16
    数据库的表信息
    CodeForces
  • 原文地址:https://www.cnblogs.com/zhiqli/p/4946119.html
Copyright © 2011-2022 走看看