# docker-manage 小型编排工具

install：
<pre>
git clone https://github.com/shemic/dm
cd dm
chmod +x install
./install
</pre>

安装时会自动安装docker。如果失败，请自行安装最新版本的docker即可。

基础指令：
<pre>
更新代码：dm up
使用哪个仓库为主(默认aliyun)：dm set private|aliyun|hub
删除某一个软件：dm rm web-php
</pre>

<pre>
可以使用以下命令开启web：
启动全部：dm run web
启动某一个软件：dm run web-mysql
删除全部：dm rm web
删除某一个软件：dm rm web-php
</pre>

执行完之后，请用浏览器访问你的ip即可。修改nginx配置可到container/conf/web/nginx下。

<pre>
目录说明：
1、container：容器内的文件
2、data：生成的数据目录，可以用作备份
3、src：源码
</pre>

<pre>
指令传参说明：

-h 查看帮助 
-a or --action 方法名
-n or --name 配置文件名或行为名
-p or --param 执行参数，一般要根据name判断

docker方法列表：
1、show：显示当前启动的docker容器
2、showi：显示当前的docker镜像
3、rm：删除出现异常或者没有启动的docker容器
4、rmi：删除过期的docker镜像
5、package：显示可用的docker镜像(2017-07-25)

方法列表（带有name参数）：
1、run：运行容器
2、stop：停止容器
3、restart：重启容器
4、crate：创建容器
5、call：运行容器，仅运行一次，用于执行一些特殊指令
6、up：运行容器并更新docker镜像
7、rm：删除正在运行的docker容器
8、save：保存或备份正在运行的docker容器
9、load：将保存或备份的docker容器恢复并重新运行
10、show：显示当前启动的docker容器(2017-07-25)

例子：
1、dm -a run -n web-php：根据src/docker/conf/web.conf里的php配置，来持续运行php容器
2、dm -a run -n tool-apidoc -p input=demo^out=output：根据src/docker/conf/tool.conf里的apidoc配置，来运行apidoc容器，这个配置里设置了run参数，指令中加入run，则apidoc容器将作为工具使用，无需持续运行apidoc容器，仅执行一次。input=demo将替换{$input}为demo，out=output将替换{$out}为output，冒号“:”为默认值
容器的配置请修改src/docker/conf/*.conf

也可以使用无参数名的方式来传入参数：
1、dm run web-php
2、dm call tool-apidoc input=demo^out=output

2017-07-25更新：
当使用dm run之后，会自动生成这个容器的基本指令，比如执行了上述的dm run web-php

之后可以这样使用：
1、web-php: 进入该容器的sh命令行
2、web-php logs：查看该容器启动日志
3、web-php inspect：查看该容器的基本信息
4、web-php stop：停止该容器
5、web-php rm：停止并删除该容器，等同于dever rm web php
6、web-php show：显示该容器的状态
7、web-php run：运行或者重新启动改容器
8、web-php restart：重新启动容器

</pre>

<pre>
2017-11-22更新：
增加一些比较有用的docker工具包：
1、大数据套件：
dm run data-java
dm run data-hadoop
dm run data-spark
dm run data-zeppelin
需要先等待data-java安装完成之后再安装之后的。可以到container/share/lib下看一下是否有jdk
访问：
ip:9991 
ip:40099
ip:9999

2、机器学习：
dm run py-note（jupyter+numpy、scipy、matplotlib、pandas、scikit-learn、scrapy、gevent、pymysql、psycopg2）
2018-01-17更新：增加opencv、dlib库
2018-01-31更新：增加tensorflow、pytorch库，但是没有集成在包里，因为装完比较大，建议自行安装，jupyter里打开命令行，执行以下命令：
cd /shell/install
./tensorflow.sh
./pytorch.sh


使用：
dm run py-note
py-note logs 查看token
访问你的浏览器：ip:10001、ip:10002
dmlearn install * 可以安装你需要的库，如：
dmlearn install seaborn

3、elk：
dm run elk-java（如果之前用了data-java这里就不用再执行了）
dm run elk-es
dm run elk-filebeat（需要到container/conf/elk里定义下抓取的日志目录）
dm run elk-kibana
默认账号密码：elastic/changeme
</pre>

<pre>
2017-12-05更新：
增加个人网盘：
dm run tool-pan
访问：
ip:9030 用户名密码都是superuser
ip:9030/dweb 是离线下载
</pre>

<pre>
2017-12-15更新（重要！）：
删除use功能。以不同的命令替代：

1、使用docker：
dm run web-php

2、安装php扩展：
dp install libevent 安装libevent扩展
dp install swoole 安装swoole扩展
dp install redis
dp install memcached
dp install mongo
dp show 查看当前可以安装的扩展
自带的php5.6和php7已经删除redis、mongo等扩展，请在需要时自行安装。
后续我会按照http://pecl.php.net/packages.php增加一些常用的扩展。
你也可以现在自行实现扩展的安装：
phpInstall swoole-2.0.10 swoole libevent-dev,libaio-dev,libmnl-dev
说明：
phpInstall 为固定指令
swoole-2.0.10 为在pecl.php.net中的扩展名和版本号
swoole 为生成的so名称
libevent-dev,libaio-dev,libmnl-dev 为依赖，多个用逗号隔开



3、使用composer：
dpc install laravel

4、使用dever：
安装plant：
dever是一个php框架，适合开发api、微服务、频繁修改模板、专题等业务，目前是内部测试版本。
plant是dever框架开发的一个小型社区
dever init
dever product plant
例子：http://www.5dev.cn/

5、使用git(方便在任意目录下pull或者push)：
dgit pull /data/
dgit push /data/
</pre>

<pre>
2017-12-18更新：
别名功能优化升级，当多个容器使用同一个别名时，可以使用该别名同时操作这多个容器。
如同时启动了php5、php7时，输入php -v， 可以同时看到这两个php的版本。
使用dp install redis安装扩展时，可以同时安装php5、php7的redis扩展。
该功能将为以后dm-manage多机部署提供支持。
</pre>



<pre>
2018年计划：
分工明确：
1、dm tool：工具包。上述更新都是增加了工具包。
2、dm task：任务器
3、dm manage：后台管理
4、dm cicd：持续集成
5、dm api：对外接口
6、dm shell：命令行工具，可以统一的直接对容器里的软件发布命令，如dp install libevent，将升级成：
dm shell
> php install libevent
> pip install tornado
> exit

7、dm ss：vpn工具

具体计划：
1、增加图形管理界面(dm manage)
2、增加多机使用dm(dm manage -> etcd -> dm1、dm2、dm3)
3、增加任务调度功能(celery、airflow)
4、增加持续集成等功能(从git上自动拉取代码并更新容器：CircleCI)
5、增加测试工具包
6、增加自动代理(能够通过dm直接访问google查资料)
</pre>


<pre>
2018-6-20更新：
1、增加default功能，直接使用dever run web时，只运行里面default定义的进程
2、增加lvs、consul等组件
3、增加集群（简易版本）：
ds init：开启集群，之后将得到集群主机ip，如果内网ip较多，请直接输入ds init ip
ds join ip：加入到集群中
之后的操作和dm一样
ds run web：启动web服务组集群
ds run web-nginx：启动nginx集群
ds rm web-nginx：删除nginx集群
ds num web-nginx 10:将nginx集群的数量增加到10

之后将把consul和daemon加入进去，并实现可视化
</pre>

<pre>
2018-6-22更新：
1、优化底层容器的启动脚本，增加启动进程的记录，方便监控进程的状态，如果进程死掉，可以自动重启。
2、增加overlay网络的跨主机支持，增加docker run可以直接使用swarm网络，方便docker单机与集群的联通。添加overflow网络时，建议加上overlay_前缀
3、开始增加daemon进程，现在暂时只有consul，来做服务发现及kv存储。

</pre>

<pre>
2018-7-16更新：
更新dever相关指令
1、dever init 初始化，更新核心类库
2、dever package manage 更新manage官方组件
3、dever put http://git.5dev.cn:3000/php_package/ 定义自定义组件的仓库组路径
4、dever get collect 获取自定义组件，如果未定义路径，则直接更新官方组件
5、dever pull 在当前目录下更新所有依赖组件
6、dever create 在当前目录下创建一个dever项目
7、dever all 更新当前所有组件

</pre>


<pre>
2018-9-10更新：
1、增加文件同步工具包：rsync、btsync、lsyncd、nfs等，可以根据需要来使用。
2、增加overlay网络的跨主机支持，增加docker run可以直接使用swarm网络，方便docker单机与集群的联通。添加overflow网络时，建议加上overlay_前缀
3、daemon进程中增加文件同步机制，会将share/lib中的文件同步到从机，daemon中的git容器会自动更新代码到share/lib/php/web中

</pre>
