苏苏的博客

简约至极

安装NodeJs和npm

安装NodeJs

nodejs官方提供了编译好的二进制的包,全平台都有,十分方便 最新版本NodeJs官方库

其他信息http://www.oschina.net/news/73974/node-v6-2-1-current

例如安装Linux版本

wget https://nodejs.org/dist/v6.0.0/node-v6.0.0-linux-x64.tar.xz
tar -xJf node-v6.0.0-linux-x64.tar.xz
sudo mv node-v6.0.0-linux-x64 /usr/local/nodejs
sudo ln -s /usr/local/nodejs/bin/node /usr/local/bin/node
sudo ln -s /usr/local/nodejs/bin/npm /usr/local/bin/npm
node -v
npm -v

单文件版node.exe单独安装npm

1.clone npm 源码 git clone --recursive git://github.com/isaacs/npm.git

2.进入npm目录,安装npm node cli.js install npm -gf

版本切换

使用n来管理node的版本,npm install -g n,小巧无依赖,仅一个文件.

也不会搞乱你的node_modules文件夹,node的可执行文件位置也始终不会变化.

node-compiler 编译nodejs为可执行文件.

https://github.com/pmq20/node-compiler 需要 node npm ,编译过程会安装依赖npm install

https://sourceforge.net/projects/squashfs/files/

yum install make gcc zlib-devel glibc-static gcc-c++ -y
make -j4

一些必备package

sudo npm install -g less autoprefixer express jshint uglify-js webpack react-native-cli airs

** npm加速 **

使用淘宝的npm镜像.控制台运行,或者加入你的bashrc中永久生效

alias cnpm="npm --registry=https://registry.npm.taobao.org --cache=$HOME/.npm/.cache/cnpm --disturl=https://npm.taobao.org/dist --userconfig=$HOME/.cnpmrc";

安装 MongoDb

CentOs上,yum 没有自带mongodb的源,首先我们需要添加源.

例如在CentOs6或者CentOs7 上,vim /etc/yum.repos.d/mongodb.repo 64位系统

[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1

如果是32位系统,则为

[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/i686/
gpgcheck=0
enabled=1

然后执行yum update 然后 yum install -y mongodb-org mongodb-org-server

安装完后就有了mongomongod命令了

mongostat

CentOs6上

启动 service mongod start

查看状态 service mongod status

停止 service mongod stop

CentOs7上

启动 systemctl start mongod

查看状态 systemctl status mongod

停止 systemctl stop mongod

其他一些 JavaScript 引擎

https://github.com/cesanta/v7

http://duktape.org/

网摘

基于网页的P2P文件分享

https://www.sharedrop.io/

云计算,存储,分发等

阿里百川 淘宝开放平台

淘宝云盘,也外链图片做图床 淘宝CDN,速度很快,https,仅仅图片限制3M以内

网易的Docker服务

价格略贵最低29/月

bmob移动后端云,网友示例项目BandwaghonhostAPP,结合mui移动开发框架开发手机APP

短信,推动消息等

阿里巴巴旗下的短信验证码通知服务,价格实惠,短信通知≤0.045元/条,还有文本转语音通知≤0.055元/条

短信和邮件发送服务,邮件有每日免费200封,短信5.5分每条

图像压缩软件

ImageOptim无损压缩

mozjpeg Mozilla的jpg压缩技术,支持无损,有损压缩在线压缩,最大2M.

tinypng 众多压缩软件中压缩效果较好的,支持png,jpg在线批量压缩

kraken 类似于tinypng,也提供在线压缩

pngquant 开源的压缩png,据说tinypng基于此项目

nodejs imagemin NodeJs模块,压缩jpg,png,压缩效果一般

移动混合应用/HHTML5开发

国产mui 最接近原生APP体验的高性能前端框架,不依赖任何第三方JS库,压缩后的JS和CSS文件仅有100+K和60+K

SUI Mobile 淘宝移动UI框架,轻量,小巧且精美的UI库 方便迅速搭建手机H5应用,兼容iOS 6.0+ 和 Android 4.0+,非常适合开发跨平台Web App。

mobiscroll 移动开发UI,丰富的时间选择器控件还有一些WEBAPP展示,https://github.com/acidb/mobiscroll

桌面开发

nwjs Mac版钉钉使用的就是这个技术,界面还算漂亮

网页动画

百度zrender 基于Canvas的图形仓库交互工具,可以方便的画出很多图形

游戏引擎

阿里Hilo 游戏渲染引擎,实现2048,切水果等.

http://www.egret.com/ 白鹭也是做这个的

https://github.com/iioinc/iio.js 也是canvas的游戏

网页富文本编辑器

wangeditor 轻量简介的富文本编辑器,使用容易,相比百度umeditor更简洁

medium-editor 一个非常简洁的输入框,支持很多插件扩充

quill 功能丰富,样式简介

网页Markdown编辑器

Editor.md 一款开源的、可嵌入的 Markdown 在线编辑器(组件),基于 CodeMirror、jQuery 和 Marked 构建。

markdown-plus Markdown Plus,界面不是很漂亮,也有收费的桌面APP

Markdown解析库

marked 支持nodejs 和浏览器端

markdown-js 支持nodejs 和浏览器端

字体相关

有字库中文字体 在线字体,CDN引用

字蛛 中文字体压缩器,让网页自由引入中文字体成为可能

阿里iconfont 阿里巴巴的网页矢量图标在线生成工具,中文字体和矢量图标

镜像网站/CDN

淘宝NPM镜像

常用前端公共库css.net 包括Gravatar,Google 字体库等反代,支持https

bootcdn 支持https

云端IDE

coderpad 在线运行多种语言代码,保存分享,不过是收费的

文件快速分享

transfer.sh 通过curl命令行

sharedrop 基于webrtc的p2p传输,局域网内网直传

file.pizza 也是p2p传输

v2url 短暂分享

视频解析

keepvid 支持多种国外视频网站解析,转码

clipconverter 支持youtube视频解析,转码,多分辨率,速度又快.

tubeninja 支持多种国内外视频网站解析

youtube-dl 全平台的YouTube视频下载工具

图床

smms

get-link

two.yt

niupic

前端/Node

Ajax库superagent 同时兼容IE9+和NodeJs的Ajax小工具,Gzip后仅为4.4kb

轮播图插件slidesjs 纯js的jQuery轮播图插件,简单易用响应式支持触摸,压缩后大小仅12kb,Gzip后3.3kb,但是单张图片存在bug,很久没有更新

模板引擎artTemplate 性能卓越的Js模板引擎,同时有NodeJs版本,压缩后5kb大小,Gzip后2.9kb

url解析工具js-url 解析url的query_string hostname protocol 等等,~1.7 Kb minified, ~0.7Kb gzipped

获取你的内网IP和外网IPwebrtc-ips 通过Webrtc技术连接stun服务器,取得IP

https://github.com/rmm5t/jquery-timeago http://c3js.org/ https://github.com/datejs/Datejs/blob/master/build/date.js https://github.com/Teamweek/instadate

JS插件

swiper滑动插件

轮播图

datetimepicker

https://github.com/amsul/pickadate.js

https://github.com/xdan/datetimepicker

JS图标库

dygraphs http://dygraphs.com/ 性能很好的Canvas图表,带交互效果,支持局部缩放,实测几万数据毫无压力,

测试工具

阿里测 测试你的服务器在全国各地的响应速度

cloudping 测试亚马逊云各节点到你电脑的延时

requestb 测试你发送的HTTP请求

代码转换

将python代码转化为可执行文件nuitka

py2exe支持windows平台的打包

https://github.com/pyinstaller/pyinstaller 跨平台打包

便宜服务器VPS

收集的一些支持支付宝或微信支付的vps和虚拟主机

搬瓦工,hostker,Conoha,Vultr 常见的支持支付宝

野草云 支持php7的香港虚拟主机,年付68元起

枫叶主机 香港虚拟主机年付60 美国Xen-512M月付25,国内速度都较快.

翼云 提供贵州低价EAE

hostdare.com 支持支付宝.微信,亚洲优化,优惠码可年付最低12$,联通直连,速度很快,下载达2M/s,推荐

gigsgigscloud 香港openvz,最低2$月付(年付18$)可支付宝,百兆出口,另有kvm中国优化线路,可以一试.

50kvm kvm最低34人民币每月(512MB),支持支付宝,旗下openvzvps即为下面的连接

50vz 最低70年付(openvz 128M),中文,集成锐速,可支付宝,还有cn2网络等

idcbuster 最低69年付(openvz 512M),88年付kvm 128M 支持支付宝

咖啡主机 半年付60元特价cn2,同时还有香港空间,法国openvz折后8.5元每月,测试站 http://ovh.cfhost.cn/

my.idc.ac 和咖啡主机类似,还提供低价加拿大虚拟主机.

比特熊 价格稍贵,可git部署,支持PHP5.3至7.1,最低年付150

vps.sh 香港虚拟主机最低50年付,美国Xen-512M月付25

eust.eu G口不限流量最低月付18KVM(256MB) 可支付宝.

hostus 最低16美元(支持支付宝约106人民币)每年(768M)

奇幻云 三网直连优化,64MB最低年付69元

魔方云 自带锐速,最低月付¥13.99 CNY

llrry 月付一元香港主机

内网穿透

frp 由于ngrok2不开源,ngrok1不在维护而新创建的项目,使用GO编写

otunnel GO语言编写类似于frp但更简单,无需配置文件.

natapp 国内服务提供商,基于ngrok

pc5s 使用java编写的,需要jre

qydev.com 国内服务商基于ngrok

dog-tunnel 使用GO编写的功能更加丰富,有一些不同之处,http://dog-tunnel.tk/

路由侠 是一个GUI客户端,貌似只有Windows

博客工具

纸小墨hugo类似的静态网站生成器,也是GO语言编写,https://github.com/InkProject/ink

HTML5播放器

ktPlayer视频播放器 简介

cPlayer音乐播放器 简介,支持歌词

DPlayer视频播放器 支持弹幕

skPlayer音乐播放器 支持拉取网易云音乐歌单

github 除了托管代码还有的其他功能

除了.io后缀的搞一个博客,(支持绑定域名,绑定后,会自动301到你绑定的域名)

还有 raw.githubusercontent.com 根据用户名,仓库名,版本号,访问资源.

例如 https://raw.githubusercontent.com/suconghou/mplayer/master/index.html

gist 也有类似的地址

https://gist.githubusercontent.com/suconghou/e0bb202cdb8344105a4287e8eca8d12e/raw/fetch.php

注意:文本是text/plain形式.且配置了Content-Security-Policy X-Content-Type-Options 不能作为其他资源形式使用.

但是图片还是可以外站引用的. raw是使用的CDN,缓存以后速度很快

http://htmlpreview.github.com/ 可以通过js去取资源,避免这个,但都是js操作的,并不能全部适配各种情况.

http://rawgit.com/ 可以类似于raw.githubusercontent.com,并返回真正的Content-Type. 支持CDN,并且也支持gist,支持http和https

但是非CDN的域名国内可能打不开了.可以使用带CDN的域名.

https://raw.githack.com/ 做的也是同样的事情,也有CDN,并且还支持 Bitbucket 和 GitLab ,国内访问畅通.

rawgit(https://github.com/rgrove/rawgit) 是通过nodejs 实现,而后者(https://github.com/neoascetic/rawgithack)是直接通过nginx配置文件实现.

https://stackoverflow.com/questions/6551446/can-i-run-html-files-directly-from-github-instead-of-just-viewing-their-source

pdf to images

imagemagick 可以转,各种图片格式也很容易转

xpdf,各种平台都支持,只需一个文件,提供编译好的文件 https://mirrors.tuna.tsinghua.edu.cn/CTAN/support/xpdf/

汉字转拼音

Web版可用: https://github.com/liuxianan/pinyinjs

MacOs上Chrome中的submit按钮默认样式问题

发现MacOs的Chrome中,input为submit的按钮,添加其他样式不生效,任然是默认样式, 解决方法是为其添加一个border或者backgroud就好了

开启docker之旅

安装Docker

docker 安装需要Linux内核在3.10.0以上,仅支持Linux,在Windows和MacOs上也是基于虚拟机方式运行,需要提前安装虚拟机

OpenVZ的VPS内核版本较低,且不能升级,并不能作为docker server,但是可以使用docker client

  • 通过df -lhT 看到Type为simfs,而不是ext3,ext4,一般就代表使用的是OpenVZ虚拟化的
  • 查看系统内核版本uname -r

查看安装的系统版本 lsb_release -a 或者 cat /etc/issue

以下二种方法适用于RedHat,CentOS

  • cat /etc/redhat-release 或者 cat /etc/centos-release
  • rpm -q centos-release 或者 rpm -q redhat-release

查看是否是64位系统uname -i

下载安装

http://www.oschina.net/news/83328/docker-17-03-1-ce-released

deb/rpm install: curl -fsSL https://get.docker.com/ | sh

Linux 64bits tgz: https://get.docker.com/builds/Linux/x86_64/docker-17.03.1-ce.tgz

Darwin/OSX 64bits client tgz: https://get.docker.com/builds/Darwin/x86_64/docker-17.03.1-ce.tgz

Linux 32bits arm tgz: https://get.docker.com/builds/Linux/armel/docker-17.03.1-ce.tgz

Windows 64bits zip: https://get.docker.com/builds/Windows/x86_64/docker-17.03.1-ce.zip

Windows 32bits client zip: https://get.docker.com/builds/Windows/i386/docker-17.03.1-ce.zip

快速安装docker并启动

官方安装教程

新版的docker包名改为docker-ce

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum makecache fast
sudo yum install -y docker-ce
sudo systemctl enable docker
sudo systemctl start docker

清华大学镜像源提供docker安装镜像与说明

https://mirror.tuna.tsinghua.edu.cn/help/docker/

或者http://get.daocloud.io/docker/builds/查看

阿里云也提供安装脚本 见http://mirrors.aliyun.com/help/docker-engine,

阿里云的软件源可以使用内网源不占用外网流量

使用docker 需要开机宿主机IPV4转发功能,否则docker info 会有警告,容器内无法上网

sysctl -w net.ipv4.ip_forward=1

基本使用

运行docker -v即可查看当前docker版本 docker 分为两部分,一分部是docker daemon , 一部分是docker client

1.12.0及以后版本,采用dockerd启动daemon服务,之前版本采用docker daemon启动daemon服务.

docker daemon 与 client 可分离部署运行,如

docker daemon -H=unix:///var/run/docker.sock -H=0.0.0.0:4243 --default-ulimit nofile=1024:4096

服务器同时监听unixsocket和tcp端口,然后客户端设置远端服务变量export DOCKER_HOST=tcp://1.1.1.1:4243,就可以使用docker client,不过这种没有认证,适合局域网玩.

如果是在公网上,最好做一些身份认证

生成证书可参考官网 https://docs.docker.com/engine/security/https/

其他参考 https://github.com/chenzhiwei/linux/tree/master/ssl-cert

这里一份脚本可以快速生成证书,只需修改DOMAIN变量即可. https://gist.github.com/suconghou/707d9c61367c4bb91e8ed2585b094853

将证书放在~/.docker目录下可以免去设置DOCKER_CERT_PATH

放置生成的证书

sudo yum install -y zip curl
mkdir -pv ~/.docker && cp -vf ca.pem ~/.docker && mv server-cert.pem ~/.docker/cert.pem && mv server-key.pem ~/.docker/key.pem && zip -r client.zip ca.pem cert.pem key.pem && rm ca.pem cert.pem key.pem

docker service的配置vim /usr/lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376 --tlsverify --tlscacert=/root/.docker/ca.pem --tlscert=/root/.docker/cert.pem --tlskey=/root/.docker/key.pem -s devicemapper --storage-opt dm.datadev=/dev/centos/docker-data --storage-opt dm.metadatadev=/dev/centos/docker-metadata

最好是将这些配置写入/etc/docker/daemon.json 防止更新docker覆盖配置文件

{
    "registry-mirrors": [
        "https://docker.mirrors.ustc.edu.cn"
    ],
    "hosts": [
        "unix:///var/run/docker.sock",
        "tcp://0.0.0.0:2376"
    ],
    "storage-driver": "devicemapper",
    "storage-opts": [
        "dm.datadev=/dev/centos/docker-data",
        "dm.metadatadev=/dev/centos/docker-metadata"
    ],
    "tlsverify": true,
    "tlscacert": "/root/.docker/ca.pem",
    "tlscert": "/root/.docker/cert.pem",
    "tlskey": "/root/.docker/key.pem"
}

cat /etc/docker/daemon.json | python -m json.tool 格式化

sudo systemctl restart docker

client端配置下面这几个变量就好

export DOCKER_HOST=tcp://some.domain:2376
export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=$DIR

动态设置$DIR,将你的docker.env和证书放在相同文件夹下.

export DOCKER_HOST=tcp://some.domain:2376
export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=$(cd `dirname $0`; pwd)

可能防火墙iptanles或者firewalld拦截了其他端口,需要开放

systemctl stop firewalld

其他脚本参考

https://gist.github.com/bradrydzewski/a6090115b3fecfc25280

https://gist.github.com/cameron/10797040

搜索 docker search 镜像名字 下载 docker pull learn/tutorial, 下载时要写完整名字

若证书始终验证不通过可能是两者的时间不一致 ntpdate cn.pool.ntp.org 同步一下服务器时间.

改动后,重启docker服务生效.

sudo systemctl daemon-reload
sudo systemctl restart docker

官方Docker镜像一览

下载官方ubuntu docker pull ubuntu

运行此ubuntu docker run ubuntu echo "hello"

运行完以后docker容器就退出了.

进入此ubuntu的shell docker run -i -t ubuntu /bin/bash 也可以写为 docker run -it ubuntu /bin/bash

期间如果有需要退出按 Ctrl+P+Q,退出后,容器任然是运行的,Ctrl+D退出后容器停止

docker ps 查看正在运行的docker容器,可以看到后台的docker

重新进入容器需要docker attach CONTAINER 此命令代表Attach to a running container.

CONTAINER可以是最前面的CONTAINER ID ,也可以是最后面的NAMES

你还可以使用 docker run -it --name myname ubuntu /bin/bash 来指定它使用的名字,否则名字的随机的

你可以用不同的名字同时运行多个此种镜像

使用 docker rename hello hello2 将原先名字为hello的容器改名为hello2

使用 docker top hello2 查看运行在hello2中的所有进程

使用docker stats 查看容器运行的CPU,内存,网络等消耗统计

使用 docker pause hello2 将docker hello2 中的所有进程暂停,使用docker ps 可以看到容器已经暂停了

使用 docker unpass hello2 恢复暂停的容器

使用 docker stop hello2 将名字为hello2的容器停止

使用 docker ps -a 查看所有的容器,将会看到很多容器,因为每次执行docker run命令都是Run a command in a new container新建了一个容器, 可以考虑使用 docker start 容器名称 然后再docker attach 进去,你上次的改动依然在那.

也可以考虑使用docker rm 容器名称 删除容器以节约资源,rm后可用空格分隔多个容器名称,此命令执行较慢

也可以在创建的时候指明结束运行时清除docker容器docker run --rm ubuntu echo "hello"

或者将要执行的命令附加到正在运行的容器上docker exec hello2 echo "hihi"

docker start后立即退出,来不及attach时,使用docker start -ia vps 这种方式

使用docker rmi来删除镜像 docker ps 默认显示当前正在运行中的container docker ps -a 查看包括已经停止的所有容器 docker ps -l 显示最新启动的一个容器(包括已停止的)

使用docker info查看机器的配置,docker版本,容器和镜像的数量,存储驱动等

技巧: attach是可以带上--sig-proxy=false来确保CTRL-DCTRL-C不会关闭容器

这是一些经常使用的镜像相关的数据:

名称 描述 大小
scratch 基础镜像 大小为0
busybox 最小Unix系统 (uClibc) 1.1MB
Alpine 基于busybox(musl) 4.8MB
CirrOS 最小化的Linux发行版 7.7MB
ubuntu:16.04 Ubuntu 121MB
debian:jessie Debian最新版 125MB
centos:latest Centos最新版 196MB

文件系统

把一个宿主机上的目录挂载到镜像里

通过挂载的方式

通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径.

docker run -it --name tmp -v /data/tmp:/home ubuntu /bin/bash

宿主目录不存在会自动创建,但是镜像内挂载路径必须存在,挂载后双向可写,实时生效 此镜像将一直保持挂载,stop,exit后重新进入,依然是挂载状态.

默认挂载的路径权限为读写.如果指定为只读可以用:ro docker run -it --name tmp -v /data/tmp:/home:ro ubuntu /bin/bash 挂载后,镜像内对挂载的数据不可写

docker还提供了一种高级的用法,叫数据卷. 数据卷:”其实就是一个正常的容器,专门用来提供数据卷供其它容器挂载的”.感觉像是由一个容器定义的一个数据挂载信息.其他的容器启动可以直接挂载数据卷容器中定义的挂载信息.

创建一个普通容器,定义一个名称,挂载目录. 数据容器是不需要运行的.

docker run -v /data/tmp:/home --name datafs busybox

其他容器使用这个数据卷 docker run -it --name tmp --volumes-from datafs ubuntu /bin/bash

--volumes-from 已过时,不建议使用.

通过volume方式(建议使用这种最新的方式)

docker1.9及以上可以使用docker volume create --name datafs创建volume 使用时类似docker run --name=yourcontainername -p 10022:22 -p 10080:3000 -v datafs:/data ubuntu

docker volume ls 查看创建的volume

docker volume rm用来删除

docker volume inspect datafs查看详情

这些数据是放在/var/lib/docker/volumes/下面的

docker的container是无状态的,也就是说标记状态的数据,例如:数据库数据,应用程序的log等等,是不应该放到container里的,而是放到 Data Volume Container里

建议使用Data Volume Container不要使用过去的方法了

网络系统

使用-p进行映射端口,第一个是外部端口,第二个是内部端口

默认的规则是TCP,如果需要UDP,采用类似-p 1234:1234/udp

-p 参数详解

http://udn.yyuap.com/doc/docker_practice/advanced_network/port_mapping.html

-p 80:8080容器内部的8080端口,对外暴漏于80端口 -p 22内部是22端口映射,外部则为一个随机可用的端口,-P则是将Dockerfile里EXPOSE的所有端口分配到宿主机的动态端口上,EXPOSE的端口不创建和宿主机的映射,是不能直接访问的

-p参数只能在docker run时指明,一旦生成了container就不能修改端口映射 可以采用如下方式生成新的容器修改

docker stop vps
docker commit vps vpsimage
docker rm vps
docker run -it -p 8080:8000 --name vps vpsimage bash

多个端口类似docker run -it --name vps -p 443:443 -p 80:8080 -p 8000:80 vpsimage bash

使用docker port vps可以查看此容器当前的端口映射,容器停止后,docker port vps不会显示出来,他显示的是正在工作的.

docker inspect vps 查看容器的详细配置信息,包括端口映射,来源镜像,日志存储路径,内存,CPU等

容器与镜像

容器: docker export docker import (不能用在镜像上)

镜像: docker save docker load (不能用在容器上)

在执行 导入以后,无论是import还是load,都会生成一个新的镜像.

导出后再导入exported-imported生成的镜像会丢失所有的历史.

而保存后再加载saveed-loaded生成的镜像没有丢失历史和层(layer).

这意味着使用导出后再导入的方式,你将无法回滚到之前的层(layer),

同时,使用保存后再加载的方式持久化整个镜像,就可以做到层回滚(可以执行docker tag <LAYER ID> <IMAGE NAME>来回滚之前的层)

docker history vpsimage 查看镜像的变迁历史

Export命令用于持久化容器[Export a container’s filesystem as a tar archive]

Save命令用于持久化镜像[Save an image(s) to a tar archive]

要转移一个正在使用中的容器,可以

接收方 nc -l 9090 | docker import - myimage

发送方 docker export container_name_or_id | nc 172.168.1.3 9090

容器

docker ps -a 查看所有的容器,包含已经停止的,暂停的,在运行的等,可以恢复运行,停止等,删除使用docker rm xx

修改容器名字:docker rename old new

导出:docker export vps > vpsdata.tar

导入:cat /home/vpsdata.tar | docker import – yourname,也可以通过指定 URL 或者某个目录来导入docker import http://example.com/exampleimage.tgz example/imagerepo

镜像

docker images 显示本机上存在的资源,大部分是docker pull下来的,可以使用 docker rmi xx 删除

修改镜像名字:docker tag old new 然后 docker rmi old

导出:docker save vpsimage > image.tar

导入:docker load < /home/image.tar

不使用重定向还可以使用参数

docker save -o image.tar vpsimage

docker load -i /home/image.tar

docker server 与 client 分离时,save,export等操作会非常慢,因为会通过网络把生成的文件下载到本地.

docker rm $(docker ps -q -a) 一次性删除所有的容器

docker rm $(docker ps -a -q) 删除所有停止运行的容器

docker rmi $(docker images -q) 一次性删除所有的镜像

docker ps -l -q 获取最后(-l)一个启动的容器id(-q)

docker rmi $(docker images | grep "^<none>" | awk "{print \$3}") 清除none标签的镜像

Docker 1.13 引进了新的管理命令,如下:

命令 docker system df 提供 Docker 整体磁盘使用率的概况,包括镜像、容器和(本地) volume

docker 提供命令可以直接查看容器的差异

提供 shell 用于分析两个 image的差异 https://github.com/moul/docker-diff

docker stats 显示容器名字

docker stats $(docker ps --format='{{.Names}}')

1.13 及以后可以

docker stats --format 'table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}\t{{.NetIO}}\t{{.BlockIO}}\t{{.PIDs}}'

国内加速

docker pull 默认采用https通信,国内一般提供镜像,或者自己的registry,可以采用 例如docker pull registry.aliyuncs.com/suconghou/http 这种方式指明registry

阿里云的registry,提供私有,公开docker镜像,单独https域名官方镜像加速

Daocloud提供的Docker服务地址 daocloud.io 并提供单独域名的加速器, 还有写好的脚本可以指定docker启动时使用的registry

网易提供的镜像 https://hub-mirror.c.163.com/

同时中科大USTC也提供镜像加速 https://docker.mirrors.ustc.edu.cn/https://servers.ustclug.org/2015/05/new-docker-hub-registry-mirror/

最新的配置帮助 https://lug.ustc.edu.cn/wiki/mirrors/help/docker

docker 配置文件 /etc/docker/daemon.json

配置镜像加速.

{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

配置文件介绍见 https://docs.docker.com/engine/reference/commandline/dockerd/

修改alpine linux 的镜像源地址

vi /etc/apk/repositories

http://dl-cdn.alpinelinux.org/alpine/v3.6/main
http://dl-cdn.alpinelinux.org/alpine/v3.6/community

可替换为

https://mirror.tuna.tsinghua.edu.cn/alpine/v3.6/main
https://mirror.tuna.tsinghua.edu.cn/alpine/v3.6/community

简化为

echo -e 'https://mirror.tuna.tsinghua.edu.cn/alpine/v3.6/main\nhttps://mirror.tuna.tsinghua.edu.cn/alpine/v3.6/community' > /etc/apk/repositories

使用流程

sudo groupadd docker

重新加载配置

sudo systemctl daemon-reload sudo systemctl restart docker

当你的docker不支持devicemapper存储驱动时,会报错 可以使用-s overlay 参数指定存储驱动

ExecStart=/usr/bin/docker daemon -s overlay -H fd://

如果已经启动docker daemon但是任然无法连接上,查看systemctl status docker.service 监听是否正确,如正确,查看当前登录的用户是否和docker用户一个组内 假设当前登录用户是root

sudo usermod -aG docker root
newgrp docker

再次重启docker daemon,退出当前用户再次登录

根据Dockerfile创建

sudo docker build -t="user/imgname:tag" .

其中-t标记来添加 tag,指定新的镜像的用户信息.

”.” 是 Dockerfile 所在的路径(当前目录),也可以替换为一个具体的 Dockerfile 的路径.

-f 指定dockerfile 的文件名称

如何使构建的镜像更小

  1. 基于busybox或者alpine等构建
  2. RUN 命令要尽量写在一条里,每次 RUN 命令都是在之前的镜像上封装,只会增大不会减小
  3. 新版本docker可以使用 多阶段构建(multi-stage build)

文件结构

进入目录查看 /var/lib/docker

volumes 目录里存放着创建的Data Volume Container

containers 目录存储启动的容器配置信息,查看docker ps -a里的CONTAINER ID和此文件夹下某些目录的前几位是相同的

graph pull的镜像信息保存在了graph文件夹下,镜像的内容存在了devicemapper/devicemapper/data 下,根据存储驱动不同,也可能存放在overlay目录,这些目录都比较大

ls -lh /var/lib/docker/graph/,进入一个文件夹,文件夹内保存着:

json -保存着关于这个镜像的元数据, cat json | python -m json.tool

layersize – 一个整数,表示layer的大小.

checksum - 一个sha256值

image

存储驱动

做paas一般使用aufs驱动,用于存储大量的docker,但是aufs只在ubuntu系的内核才自带此功能.

devicemapper驱动将所有文件存储在一个100G的虚拟磁盘,但是静态编译好的二进制文件不支持此驱动

overlay驱动将镜像里的各个文件还是存储在磁盘的各个文件,镜像过多存储的文件数量也很多,一般兼容性较好

aufs > overlay2 > devicemapper

docker 1.13 已将默认存储驱动由devicemapper修改为overlay了 有旧数据,新版docker不会自私切换驱动, 清除/var/lib/docker后重新启动,docker会使用新的驱动.

构建镜像

build images 使用 docker build -t="http" .

-t 指明tag 后面的.指明Dockerfile所在的目录

如果想要使用非Dockerfile为名字的构建文件可以使用-f参数指定构建文件

docker build -t=myimage -f mydockerfile .

还可以使用docker build -t=myimage - < mydockerfile , 不过尝试发现这种方式好像对路径处理有问题,还是推荐上面一种自定义的方式.

关联远端Docker Hub仓库

docker login 输入用户名,密码,邮箱登陆

docker push yourname/imagename

技巧

清除docker container log

使用 docker logs <container_name_or_id> 可以查看容器的log,也可以将重定向到一个文件,可以类似于tail -f一样跟踪变化.

但是未提供清空log的选项.

其实可以使用$(docker inspect --format='{{.LogPath}}' <container_name_or_id>)得出此容器的日志存储文件.

sudo ls -lh $(docker inspect --format='{{.LogPath}}' <container_name_or_id>) //查看日志文件
echo -n "" > $(docker inspect --format='{{.LogPath}}' <container_name_or_id>) //可以清空日志文件

还可以使用truncate -s 0 /var/lib/docker/containers/*/*-json.log清空所有的日志文件.

不过这个都是需要docker daemondocker client在同一台机器上.

docker 1.8及以后版本可以使用参数--log-opt max-size=10m限制日志文件的大小,更多详细介绍 https://docs.docker.com/engine/admin/logging/overview/

使用docker -m可以限制内存的使用,这个是直到程序内存使用超过此限定的2倍,才会因OOM而被进程杀掉.容器仍会正常运行.

要使超过限定大小如100,就杀死,可以 -m 100m --memory-swap=100m

docker update 可以动态修改容器的资源限制

问题排查

systemctl status docker.service -l 可查看docker工作状态,为什么启动失败等

CoreOs使用docker

docker 配置远程访问.

sudo touch /run/flannel_docker_opts.env && sudo chmod 777 /run/flannel_docker_opts.env
sudo echo 'DOCKER_OPTS=" -H=unix:///var/run/docker.sock -H=0.0.0.0:4243  --registry-mirror=https://docker.mirrors.ustc.edu.cn"' > /run/flannel_docker_opts.env
sudo systemctl restart docker

semanage port -a -t http_port_t -p tcp 2376

解决 Usage of loopback devices is strongly discouraged for production use. Use–storage-opt dm.thinpooldevto specify a custom block storage device.

备份docker volume数据卷

文件接收端执行 nc -l 9090 > data.tar.gz 有些nc(busybox里的nc)可能是 nc -l -p 9090 > data.tar.gz

以只读模式挂载数据卷,挂载数据卷到/data路径

docker run --rm -it -v gogs-data:/data:ro busybox sh -c "cd /data && tar czvf - . | nc host 9090"

打包文件并发送到目标主机

恢复docker volume数据

如果没有这个数据卷,先创建数据卷 docker volume create --name gogs-data

docker run --rm -it -v gogs-data:/data busybox sh -c "nc -l -p 9090 | tar -C /data -zxf -"

然后通过宿主机发送数据 nc host 9090 < data.tar.gz

如果两台电脑可以直接连通

发送方 docker run --rm -it -v gogs-data:/data:ro busybox sh -c "cd /data && tar czvf - . | nc host 9090"

接收方 docker run --rm -p 9090:9090 -it -v gogs-data:/data busybox sh -c "nc -l -p 9090 | tar -C /data -zxf -"

参考 https://blog.lab99.org/post/docker-2016-07-14-faq.html#docker-yin-qing-xiang-guan-wen-ti-61

docker service ls docker node ls docker stack ls docker swarm

Linux下常用的下载利器

wget

wget -c -O filename "http://xx.com" 下载存储到指定文件,并指定断点续传

wget -nc -c -i url.txt 批量下载文件中指定的资源(每行一个连接),跳过已下载的(同名的),并且断点续传.

wget -i url.txt -O - | mpv - 下载url.txt里的链接,输出到标准输出

使用user-agent

wget --user-agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36" URL-TO-DOWNLOAD

wget 断点续传 使用 -c 限速使用--limit-rate=300k

wget -c --limit-rate=30k http://...

lftp

wget 可以断点续传 但是不支持多线程下载, lftp 的一个用法可以实现多线程下载.

lftp -c "pget -n 10 http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.gz"

curl

常用的命令

curl http://xx.com 只获取http消息正文

curl -I http://xx.com 只获取http消息头

curl -i http://xx.com 获取http消息头和正文

curl -d "name=abc&pass=123" http://xx.com 发送http post请求,采用的是application/x-www-form-urlencoded形式

curl -F "name=abc" -F "pass=123" http://xx.com 发送http post请求,采用的是multipart/form-data 形式,此两种方式都可以由 $_POST 接收

curl -F "name=abc" -F "file=@/tmp/1.jpg" http://xx.com 发送 http post请求, multipart/form-data 形式还可以上传文件,只需改为@加路径

curl 不仅能用来下载,还是网络调试的利器,Chrome的网络请求也可以直接另存为curl请求格式

批量下载规则的URL资源

curl -O "http://www.example.com/[0001-9999].jpg"

在shell中可以这样用,实现同样功能

for i in {10001..19999}; do
wget www.example.com/${i:1}.jpg;
done

for i in {0001..9999}; do
echo www.example.com/${i}.jpg;
done

一个 range 请求

curl -o /tmp/1 -H "Range: bytes=0-10" http://share.ourwill.cn/temp/ss -v

这样服务器会返回 206 包含 Content-Length: 11 共11个字节 , 即是包含第11字节的

range 后面的值超过content-length ,响应也会正常响应,返回的Content-Range会纠正这个错误,给出正确的range

range 的前值如果超过content-length, 服务器就会给出 416 Requested Range Not Satisfiable

假如文件的大小为1024,则Range: bytes=0-1023 就返回了整个文件大小,Range: bytes=0-1024也能返回同样的数据,因为服务器会纠正range的后值.

start-end 表示不包含start(没有0位这个字节),从start开始一直到end+1 这些个字节.

响应的大小应该是 end-start+1

相继请求 Range:bytes=0-10 Range:bytes=10-20 一共是22字节,其中第11字节是重复的.

应为 Range:bytes=0-9 Range:bytes=10-19 一共是20字节 相当于 Range:bytes=0-19

下载一个压缩包,不存储直接解压

curl -sSL http://www.memcached.org/files/memcached-1.4.30.tar.gz | tar xz

其中-L表示更随重定向-s为安静模式,不输出任何信息,-S为在安静模式下出错的话要输出错误信息.

要解压到指定目录,后面的可以使用 tar xzC ./path/to/dir ,当然这个路径要存在

用curl下载的好处是不会像wget那样出现多个已下载的重复文件

| tar xJ 后面同压缩一样指定不同的压缩格式,xJ 解压 xz 格式

Axel

下载速度最快,分段下载速度优异 axel -n 30 -a -o localfilename http://xx.com/downloadfile 30个线程分段下载,存储为localfilename 参数-a更新进度条而不是每次都输出 参数-H 添加header,参数-U设定user-agent Downloads patch from 4 ftp mirrors axel ftp://ftp.{us,uk,br,fr}.kernel.org/pub/linux/kernel/v2.6/patch-2.6.39.gz

axel http://itmp.suconghou.cn hypriot-rpi-20160306-192317.img.zip http://wtmp.suconghou.cn hypriot-rpi-20160306-192317.img.zip http://btmp.suconghou.cn hypriot-rpi-20160306-192317.img.zip

Aria2c

官网 https://aria2.github.io/

aria2c支持多种协议,URI MAGNET TORRENT_FILE METALINK_FILE,也支持axel类似的分段下载

https://github.com/aria2/aria2/releases 发布 Windows 和 android 及 osx 系统编译好的, android里为一个可执行文件,

但没有Linux版编译好的. 有第三方提供的静态编译好的 https://github.com/q3aql/aria2-static-builds 包含 Linux,Windows

aria2c -s 30 -c -o localfilename http://xx.com/downloadfile 30个线程分段下载,存储为localfilename,并断点续传

aria2c file1.torrent file2.torrent

On CentOS 7.2.1511, I was able to install it through the EPEL repository:

yum install epel-release -y
yum install aria2 -y

CentOS 6 安装可参考 http://chuansong.me/n/341279751838

pkgs.repoforge.org已不可用, 可参考 https://github.com/repoforge/rpms/issues/375

http://repository.it4i.cz/mirrors/repoforge/

http://mirror-status.repoforge.org/

CentOS6 x86_64

rpm -Uvh http://repository.it4i.cz/mirrors/repoforge/redhat/el6/en/x86_64/rpmforge/RPMS/$(curl -s http://repository.it4i.cz/mirrors/repoforge/redhat/el6/en/x86_64/rpmforge/RPMS/ | grep rpmforge-release | grep x86_64 | grep el6 | sort | tail -n1 | sed 's%.*>\(rpmforge\-release\-.*.rpm\)<.*%\1%')
yum -y install aria2

就可以安装成功,只不过CentOS6源里的aria2版本较旧且不再更新了.

aria2 作为服务运行.

aria2c --enable-rpc --rpc-listen-all=true --rpc-allow-origin-all

后台服务 aria2c --enable-rpc --rpc-listen-all=true --rpc-allow-origin-all > /var/log/aria2.log 2>&1 &

aria2c --conf-path="/etc/aria2/aria2.conf"

/etc/aria2/aria2.conf

## '#'开头为注释内容, 选项都有相应的注释说明, 根据需要修改 ##
## 被注释的选项填写的是默认值, 建议在需要修改时再取消注释  ##

## 文件保存相关 ##

# 文件的保存路径(可使用绝对路径或相对路径), 默认: 当前启动位置
dir=/data/www/share
# 启用磁盘缓存, 0为禁用缓存, 需1.16以上版本, 默认:16M
#disk-cache=32M
# 文件预分配方式, 能有效降低磁盘碎片, 默认:prealloc
# 预分配所需时间: none < falloc ? trunc < prealloc
# falloc和trunc则需要文件系统和内核支持
# NTFS建议使用falloc, EXT3/4建议trunc, MAC 下需要注释此项
file-allocation=none
# 断点续传
continue=true

## 下载连接相关 ##

# 最大同时下载任务数, 运行时可修改, 默认:5
max-concurrent-downloads=1
# 同一服务器连接数, 添加时可指定, 默认:1
max-connection-per-server=5
# 最小文件分片大小, 添加时可指定, 取值范围1M -1024M, 默认:20M
# 假定size=10M, 文件为20MiB 则使用两个来源下载; 文件为15MiB 则使用一个来源下载
min-split-size=10M
# 单个任务最大线程数, 添加时可指定, 默认:5
split=5
# 整体下载速度限制, 运行时可修改, 默认:0
#max-overall-download-limit=0
# 单个任务下载速度限制, 默认:0
#max-download-limit=0
# 整体上传速度限制, 运行时可修改, 默认:0
#max-overall-upload-limit=0
# 单个任务上传速度限制, 默认:0
#max-upload-limit=0
# 禁用IPv6, 默认:false
disable-ipv6=true

## 进度保存相关 ##

# 从会话文件中读取下载任务
input-file=/etc/aria2/aria2.session
# 在Aria2退出时保存`错误/未完成`的下载任务到会话文件
save-session=/etc/aria2/aria2.session
# 定时保存会话, 0为退出时才保存, 需1.16.1以上版本, 默认:0
#save-session-interval=60

## RPC相关设置 ##

# 启用RPC, 默认:false
enable-rpc=true
# 允许所有来源, 默认:false
rpc-allow-origin-all=true
# 允许非外部访问, 默认:false
rpc-listen-all=true
# 事件轮询方式, 取值:[epoll, kqueue, port, poll, select], 不同系统默认值不同
#event-poll=select
# RPC监听端口, 端口被占用时可以修改, 默认:6800
rpc-listen-port=6800
# 设置的RPC授权令牌, v1.18.4新增功能, 取代 --rpc-user 和 --rpc-passwd 选项
#rpc-secret=<TOKEN>
# 设置的RPC访问用户名, 此选项新版已废弃, 建议改用 --rpc-secret 选项
#rpc-user=ruyo
# 设置的RPC访问密码, 此选项新版已废弃, 建议改用 --rpc-secret 选项
#rpc-passwd=RUYO.net

## BT/PT下载相关 ##

# 当下载的是一个种子(以.torrent结尾)时, 自动开始BT任务, 默认:true
#follow-torrent=true
# BT监听端口, 当端口被屏蔽时使用, 默认:6881-6999
listen-port=51413
# 单个种子最大连接数, 默认:55
#bt-max-peers=55
# 打开DHT功能, PT需要禁用, 默认:true
enable-dht=true
# 打开IPv6 DHT功能, PT需要禁用
#enable-dht6=false
# DHT网络监听端口, 默认:6881-6999
#dht-listen-port=6881-6999
# 本地节点查找, PT需要禁用, 默认:false
#bt-enable-lpd=true
# 种子交换, PT需要禁用, 默认:true
enable-peer-exchange=true
# 每个种子限速, 对少种的PT很有用, 默认:50K
#bt-request-peer-speed-limit=50K
# 客户端伪装, PT需要
peer-id-prefix=-TR2770-
user-agent=Transmission/2.77
# 当种子的分享率达到这个数时, 自动停止做种, 0为一直做种, 默认:1.0
#seed-ratio=0
# 强制保存会话, 即使任务已经完成, 默认:false
# 较新的版本开启后会在任务完成后依然保留.aria2文件
#force-save=false
# BT校验相关, 默认:true
#bt-hash-check-seed=true
# 继续之前的BT任务时, 无需再次校验, 默认:false
bt-seed-unverified=true
# 保存磁力链接元数据为种子文件(.torrent文件), 默认:false
bt-save-metadata=true
content-disposition-default-utf8=true

不错的项目提供WebUI

https://github.com/ziahamza/webui-aria2

https://github.com/mayswind/AriaNg

音乐标题
歌手