Usage: docker search [OPTIONS] TERM
$docker search -s 3 centos
搜索命令,参数 -s 指定镜像评价星级
Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST]
$docker pull centos:centos6.8
从默认镜像源下载镜像,docker pull NAME[:TAG],其中NAME是镜像仓库名称(用来区分镜像),TAG是镜像标签(往往用来表示版本),不指定TAG则拉取 latest 标签镜像,镜像仓库名称前面可以添加仓库地址从指定仓库下载
Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]
$docker images
查看本地镜像列表
Usage: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
$docker tag 0cd centos:ali
注意源镜像使用ID作为参数,目的镜像如果不传参数TAG的话则标签设置为默认值latest
Usage: docker inspect [OPTIONS] NAME|ID [NAME|ID…]
获取镜像详细信息
Usage: docker rmi [OPTIONS] IMAGE [IMAGE…]
删除一个或多个镜像,其中镜像需要指定明确,如果只指定镜像不指定标签则默认删除 latest标签镜像,可以使镜像ID,镜像只有在所有标签都被删除的时候才会被删除,镜像存在容器的时候也不能被删除
Usage: docker create [OPTIONS] IMAGE [COMMAND] [ARG…]
$docker create -it –name=”create_2″ centos:centos6.8
创建容器,不马上启动
Usage: docker start [OPTIONS] CONTAINER [CONTAINER…]
docker start -it 3ca
启动容器
Usage: docker stop [OPTIONS] CONTAINER [CONTAINER…]
关停一个容器
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
$docker run -it –name=”run_test” centos:centos6.8 /bin/bash
创建并启动容器
Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG…]
$docker exec -it 1aab /bin/bash
进入一个在后台运行的容器
因为服务器在国外,很多软件下载更新速度很慢,像Android Studio 下载 Android SDK,还有Xcode也有类似的问题,如果手上有VPN可以娴熟地F墙还好,不过仔细观察发现使用阿里云服务器下载也很快,这让我想到了一个快速实现的方法,简单到1、2、3就可以迅速提高下载速度,亲自体验家里20M带宽可以跑满。
使用到的必要工具
- 阿里云服务器,国内的就可以如果发现下载速度慢可以试试香港或国外的
- 端口转发工具,我选择SecureCRT
阿里云如果没有现成的服务器,可以租个按时间计算的配置,用完释放花不了几块钱,需要注意的是带宽最好选择按流量计算的,且一定要注意把带宽设置足够大,因为阿里按流量计算虽然理论上带宽可以达到G的水平,但是为了避免用户受到攻击带来流量损失做了一个极限带宽设置,设置100M即可。另外系统选择一个Linux发行版本的就可以了,主要是后面使用到端口转发使用SSH账号,Windows版的方法没有试过,其实原理差不多这里就不做研究了,有兴趣大家可以DIY 阅读全文…
在线教育似乎火了有一段时间了,公司总算下定决心趟这个浑水,临危受命从原来团队跳出来组建团队,本以为跳出坑了,没想到又进了另外一个大坑。算是在认真做产品了,自我安慰一下 🙂
除了线上产品外,还有线下传统纸质教辅发行,打着『互联网+教辅』的概念,让传统教辅通过APP与线上资源和系统结合起来,既是对传统教辅的升级把内容形式丰富起来,又可以通过APP搜集用户数据,推荐个性化学习资源,将线下用户导到线上。这就是我们的故事 🙂
好了,回归正题,现在计划做一款『拍照搜题』功能,是的类似于小猿搜题、学霸君等产品。。。
总体思路其实也算简单
- APP拍题照片上传
- 后台采用OCR识别出照片文字内容
- 根据文字内容匹配后台题库
- 展现匹配到的题库内容
阅读全文…
Web开发中我们经常会遇到需要PHP处理要下载的文件,比如需要用户登陆才能下载文件,被下载的文件不允许直接访问,下载后的文件需要重命名等,通常我们可以使用下面的代码实现:
<?php
authenticate(); //权限判断
// 读取文件内容
$content=file_get_contents($file);
// 发送合适的 HTTP 头
header("Content-type: application/octet-stream");
header('Content-Disposition: attachment; filename="' . basename($file) . '"');
header("Content-Length: ". filesize($file));
echo $content; // 或者 readfile($file);
?>
但是这样做性能极低,你可以想像用户每次下载的时候程序都会一次一次地经过一个固定的buffer读取文件内容到内存,再发送到前端服务器,最后才能发送到客户端,还有各种网络超时和大量内存消耗,这将会是一个相当糟糕的设计。下面将介绍一个更直接高效的方式来实现。
X-Sendfile 是一种将文件下载请求由后端转交给前端服务器,由前端服务器直接处理文件下载请求的一种机制。它可以有效缓解后端服务器压力,将文件下载请求直接将由擅长处理静态文件请求的前端服务器如:Nginx、Lighthttpd等,极大地提高了文件下载请求效率。
X-Sendfile是通过一个非标准化的特定HTTP header实现的,后端服务器发送一个特定的HTTP header到前端服务器的时候,前端服务器从X-Sendfile得到请求的文件地址后,前端服务器将利用自身的功能机制将文件直接发送给用户。
X-Sendfile实际上是一种服务器内部的跳转机制,这种处理请求并不会将实际需要请求的文件地址暴露给用户,X-Sendfile做为一种非标准化的机制,不同的服务器的实现有所区别
SENDFILE 头 |
使用的 WEB 器 |
X-Sendfile |
Apache, Lighttpd v1.5, Cherokee |
X-LIGHTTPD-send-file |
Lighttpd v1.4 |
X-Accel-Redirect |
Nginx, Cherokee |
阅读全文…
在ThinkPHP在使用Uploadify或其他基于Flash的上传插件的时候很多人会碰到上传控件无法传递Session的问题,特别是Firefox浏览器上面。官方解释可以将session id通过插件参数传递到后端,以下是Uploadify官方解决方案,但实测无法实现传递Session.
阅读全文…
之前的一编文章『OS X 系统PHP 5.5.9 的 MongoDB、Memcache、Redis客户端模块分享』因为微云分享官方修改了分享策略导致连接失效的原因文件无法下载(已更新链接),看了文章的网友抓狂实在不好意思,所以决定写一篇详细的编辑方法,希望能授人以渔。
PHP客户端编辑主要步骤如下:
解压缩扩展的源文件压缩包
在解压后的根目录下面执行phpize命令
/usr/bin/phpize
这里大家要注意了,因为OSX系统自带一个比较老版本的php安装,如果大家想使用最新版的PHP的话上面的命令使用新版phpize的命令地址,下面其他PHP命令类似
然后在根目录下面执行 configure 命令
./configure –with-php-config=/usr/bin/php-config
注意这个时候可能提示找不到 configure命令,那看看是不是没有安装 autoconf 和 automake,安装相关程序再次执行即可
另外一定要注意参数–with-php-config 的版本和路径
接下来执行编辑
make
make install
这个时候如果编辑安装成功的话会提示生成的拓展位置,在 php.ini 文件添加 extension=memcache.so
查看 phpinfo() 函数结果可查看memcache 拓展信息说明安装成功,如果你很不幸依然不成功,可以在『关于我』里面找到本人的联系方式
是的,PHP默认是开启PHP短标签的,即默认情况下short_open_tag=ON,大家看看PHP的官方说明上面讲的很清楚下面的官方配置文件上面也是这样说的(绿色和红色标)。
; This directive determines whether or not PHP will recognize code between
; <? and ?> tags as PHP source which should be processed as such. It is
; generally recommended that <?php and ?> should be used and that this feature
; should be disabled, as enabling it may result in issues when generating XML
; documents, however this remains supported for backward compatibility reasons.
; Note that this directive does not control the <?= shorthand tag, which can be
; used regardless of this directive.
; Default Value: On
; Development Value: Off
; Production Value: Off
; http://php.net/short-open-tag
short_open_tag = Off
不过在这里我还是建议大家还是忘了这个默认设置吧,最好还是不要使用短标签的好。
阅读全文…
如果你的MySQL表字符集刚好被设置为xxx_ci,比如utf8_generic_ci,如果刚好你做了一个如下查询,如果刚好你的数据库里面刚好有以下这两条记录,如果你足够细心,那么恭喜你应该发现出乎意料的结果。
table user
id name
1 hello
2 HELLO
SQL
select * from user where name=”hello”
结果集
id name
1 hello
2 HELLO
难道不应该是?
id name
1 hello
原来MySQL某些字符集下面默认是不区分查询大小写的,这主要是由mysql的字符校验规则的设置决定的。
简单介绍一下字符校验规则吧
字符集是一套符号和编码,校对规则是在字符集内用于比较字符的一套规则。任何一个给定的字符集至少有一个校对规则,它可能有几个校对规则。
校对规则一般有这些特征:
两个不同的字符集不能有相同的校对规则。
每个字符集有一个默认校对规则。例如,utf8默认校对规则是utf8_general_ci。
存在校对规则命名约定:它们以其相关的字符集名开始,通常包括一个语言名,并且以_ci(大小写不敏感)、_cs(大小写敏感)或_bin(二元)结束。
所以对于一些比较敏感的数据,应该十分注意字符集。
通常对结尾为『_cs』的字符集为『大小写敏感』型,或者使用『_bin』后续字符集,如utf8_bin.
那么对于已经存在的历史数据应该如何处理呢?
其实针对已经设置为xxx_ci字符集,同时又不得不处理大小写敏感问题的数据我们除了修改字符集以外还可以修改查询语句。
1.在SQL语句中使用collate::select * from user where name collate utf8_bin = ‘hello’;
2.在SQL语句中使用binary操作符:select * from user where binary name = ‘hello’;
换上MacBook Pro后第一件事情就是安装工作环境了,PHP系统环境还是选择了XAMPP,直接有现成的OSX安装包相当方便百度已经做了最新版本的分发,下载地址在这里 XAMPP For OSX
集成环境的PHP版本为PHP5.5.9,MongoDB、Redis、Memcache客户端的PHP模块没找到需要自己安装编辑,下面是本人自己安装编辑的so文件,有兴趣的同学可以下载直接使用(理论上相同版本的PHP可以直接使用,没有测试欢迎反馈)
mongo.so
redis.so
memcache.so
原文件在这里,直接使用不成功的可以下载编译,我在编译的过程中遇到过一些小问题,有个别出现Waring提示,但是编译通过了我做了忽略处理。其他如果出现致命错误停止编译的情况下建议换用最新版本的
mongo1.5.2-for-php5.5.9.tgz
redis-2.2.5-for-php5.5.9.tgz
memcache-3.0.8-for-php5.5.9.tgz
如果下载的拓展不可用建议大家参考『OSX系统下面编译PHP的memcache等客户端扩展』自已试着编译安装
最近上了几台从库之后经常出现疑似主从同步延时问题,但经过运维排查后给出结论是主从同步正常,不存在比较严重的延时问题,依据是反复实验参数Seconds_Behind_Master=0,但问题真的真的是存在。
事实上问题已经很明确,可能存在的问题就那么几点,主从延时可能性确实很大,后来查了一下资料才恍然,原来 Seconds_Behind_Master参数并不能说明主从同步是否延时问题
官方解释是:
- When the slave is actively processing updates, this field shows the difference between the current timestamp on the slave and the original timestamp logged on the master for the most event currently being processed on the slave.
准确说Seconds_Behind_Master指的是slave 系统当前时间和当前SQL thread处理的binlog event时间差,这个时间差与binlog event 和 slave 系统时间直接关联。如果master 和 slave时间不同步,就有可能产生 Seconds_Behind_Master 参数显示问题,可以在从库执行 date -s“+1 hour” 看看Seconds_Behind_Master是不是突然变的很大了?
- When no event is currently being processed on the slave, this value is 0.
当前没有待处理binlog event时,Seconds_Behind_Master也为0
这样问题就已经很明朗了,因为I/O thread并不能保证和master保持实时同步,所以Seconds_Behind_Master=0也不同说明同步没有延时。
阅读全文…