1

CentOS6上Docker的安装与使用

安装Docker

yum install http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm
yum install docker-io
service docker start
chkconfig docker on

获取镜像

docker pull kaychen/centos6_lnmp

启动镜像

#进入交互模式
docker run -ti kaychen/centos6_lnmp
#后台运行模式并映射80端口到容器
docker run -d -p 80:80 kaychen/centos6_lnmp

停止镜像

​#查看所有镜像状态
docker ps -a
#停止镜像
docker stop (CONTAINER_ID)
#启动镜像
docker start (CONTAINER_ID)
#重启镜像
docker restart (CONTAINER_ID)

提交镜像修改

docker commit (CONTAINER_ID) kaychen/centos6_lnmp

上传镜像

#登录dockerHub
docker login
#上传镜像
docker push kaychen/centos6_lnmp

导出/载入镜像

#导出镜像到本地
docker save -o centos6_lnmp.tar kaychen/centos6_lnmp:latest
#载入镜像
docker load < centos6_lnmp.tar

导出/导入容器

#导出容器
docker export 61229a6262a3 > export_centos6_lnmp.tar
#导入容器
cat export_centos6_lnmp.tar | sudo docker import - kaychen/testimport
#可以通过指定 URL 或者某个目录来导入
docker import http://example.com/exampleimage.tgz example/imagerepo

注:用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以使用 docker import 来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。

删除镜像

#一次性删除所有的容器
docker rm $(docker ps -q -a)
#一次性删除所有的镜像
docker rmi $(docker images -q)

CentOS6上安装和配置KVM

检查CPU是否支持虚拟化

# egrep 'vmx|svm' /proc/cpuinfo 
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni vmx ssse3 cx16 sse4_1 sse4_2 x2apic popcnt hypervisor lahf_lm arat dts tpr_shadow vnmi ept vpid
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni vmx ssse3 cx16 sse4_1 sse4_2 x2apic popcnt hypervisor lahf_lm arat dts tpr_shadow vnmi ept vpid

安装KVM

# yum install kvm kmod-kvm qemu kvm-qemu-img virt-viewer virt-manager \
libvirt libvirt-python python-virtinst

安装完后重启系统,然后确认一下是否安装成功:

# reboot
# lsmod | grep kvm
kvm_amd                69416  0 
kvm                   226208  1 kvm_amd
# ll /dev/kvm 
crw-rw---- 1 root kvm 10, 232 Jun 25 15:56 /dev/kvm

至此,KVM环境已安装完成,接下来,开始安装虚拟机。
安装之前需要准备一个系统镜像ISO,我这里用的是WindowsServer2003。路径为/kvmdata/kaychen/cn_win_srv_2003_r2_enterprise_x64_with_sp2.iso

先创建一块虚拟硬盘

# qemu-img  create -f qcow2 /kvmdata/kaychen/winserver2003.img 20G

安装系统

# virt-install \
--name winserver2003 \
--ram 2048 \
--vcpus=2 \
--disk path=/kvmdata/kaychen/winserver2003.img,device=disk,format=qcow2,bus=ide,cache=writeback,size=15 \
--accelerate \
--os-type=windows \
--virt-type=kvm \
--disk /kvmdata/kaychen/cn_win_srv_2003_r2_enterprise_x64_with_sp2.iso,device=cdrom \
--vnc --vncport=9125 --vnclisten=0.0.0.0 \
--noautoconsole

虚拟机启动成功后,我们需要用VNC连接IP:9125来安装操作系统,直到系统安装完成。

SublimeText2快捷键大全

Ctrl+D 选词 (反复按快捷键,即可继续向下同时选中下一个相同的文本进行同时编辑)
Ctrl+G 跳转到相应的行
Ctrl+J 合并行(已选择需要合并的多行时)
Ctrl+L 选择整行(按住-继续选择下行)
Ctrl+M 光标移动至括号内开始或结束的位置
Ctrl+T 词互换
Ctrl+U 软撤销
Ctrl+P 查找当前项目中的文件和快速搜索;输入 @ 查找文件主标题/函数;或者输入 : 跳转到文件某行;
Ctrl+R 快速列出/跳转到某个函数
Ctrl+K Backspace 从光标处删除至行首
Ctrl+KB 开启/关闭侧边栏
Ctrl+KK 从光标处删除至行尾
Ctrl+KT 折叠属性
Ctrl+KU 改为大写
Ctrl+KL 改为小写
Ctrl+K0 展开所有
Ctrl+Enter 插入行后(快速换行)
Ctrl+Tab 当前窗口中的标签页切换

Ctrl+Shift+A 选择光标位置父标签对儿
Ctrl+Shift+D 复制光标所在整行,插入在该行之前
ctrl+shift+F 在文件夹内查找,与普通编辑器不同的地方是sublime允许添加多个文件夹进行查找
Ctrl+Shift+K 删除整行
Ctrl+Shift+L 鼠标选中多行(按下快捷键),即可同时编辑这些行
Ctrl+Shift+M 选择括号内的内容(按住-继续选择父括号)
Ctrl+Shift+P 打开命令面板
Ctrl+Shift+/ 注释已选择内容
Ctrl+Shift+↑可以移动此行代码,与上行互换
Ctrl+Shift+↓可以移动此行代码,与下行互换
Ctrl+Shift+[ 折叠代码
Ctrl+Shift+] 展开代码
Ctrl+Shift+Enter 光标前插入行
Ctrl+PageDown 、Ctrl+PageUp 文件按开启的前后顺序切换

Ctrl+Z 撤销
Ctrl+Y 恢复撤销
Ctrl+F2 设置书签
Ctrl+/ 注释整行(如已选择内容,同“Ctrl+Shift+/”效果)
Ctrl+鼠标左键 可以同时选择要编辑的多处文本

Shift+鼠标右键(或使用鼠标中键)可以用鼠标进行竖向多行选择
Shift+F2 上一个书签
Shift+Tab 去除缩进
Alt+Shift+1~9(非小键盘)屏幕显示相等数字的小窗口

Alt+. 闭合当前标签
Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑

Tab 缩进 自动完成
F2 下一个书签
F6 检测语法错误
F9 行排序(按a-z)
F11 全屏模式

pyquery初体验

部署安装:

yum install python-setuptools python-devel python-lxml* -y
easy_install pip
pip install pyquery

使用方法:

from pyquery import PyQuery
html = PyQuery(url="http://old.kaychen.cn")
print html("title").text() #获取title文本
print html("#logo").html() #根据ID获取元素

Beanstalkd初体验

​安装beanstalkd

#首先使EPEL生效(参考:http://fedoraproject.org/wiki/EPEL/FAQ#howtouse):
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
#安装beanstalkd
yum install beanstalkd

推荐使用加载类文件方式调用
可到http://sourceforge.net/projects/beanstalk/ 下载php客户端代码(见附件)
PHP使用范例:

 array( '127.0.0.1:11300' ),
        'select'        => 'random peek'
    ));  
    $beanstalk->use_tube('foo');
    $beanstalk->put(0, 0, 120, 'say hello world');         
    $beanstalk->watch('foo');
    $job = $beanstalk->reserve_with_timeout();
    echo $job->get();                  // Output: 'say hello world'   
    Beanstalk::delete($job);                    // Delete the job.
?>

CentOS6 RabbitMQ体验

RabbitMQ安装与启动

#首先使EPEL生效(参考:http://fedoraproject.org/wiki/EPEL/FAQ#howtouse):
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
#安装rabbitmq-server
yum install rabbitmq-server librabbitmq*
#启用rabbitmq-server
service rabbitmq-server start
#查看rabbitmq的插件列表
/usr/lib/rabbitmq/bin/rabbitmq-plugins list
#开启rabbitmq网页端管理功能
/usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management
#关闭rabbitmq网页端管理功能
/usr/lib/rabbitmq/bin/rabbitmq-plugins disable rabbitmq_management
#使用默认账号密码(均guest)登陆http://server-name:15672/即可管理

PHP集成扩展ampq(版本参考:http://pecl.php.net/package/amqp)

wget http://pecl.php.net/get/amqp-1.2.0.tgz #php5.3安装amqp1.2.0可成功. 1.4会报错
tar xzf amqp-1.2.0.tgz
cd amqp-1.2.0
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-amqp
make && make install
#增加生成的amqp.so到php.ini中
[AMPQ]
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/amqp.so
#重启web/php服务
/etc/init.d/nginx -s reload
#查看是否已集成成功
php -m|grep amqp

PHP使用RabbitMQ的例子
入队列:

'localhost' , 'port'=> '5672', 'login'=>'guest' , 'password'=> 'guest','vhost' =>'/');
$conn = new AMQPConnection($conn_args);
$conn->connect();
//创建exchange名称和类型
$channel = new AMQPChannel($conn);
$ex = new AMQPExchange($channel);
$ex->setName('direct_exchange_name');
$ex->setType(AMQP_EX_TYPE_DIRECT);
$ex->setFlags(AMQP_DURABLE | AMQP_AUTODELETE);
$ex->declare();
//创建queue名称,使用exchange,绑定routingkey
$q = new AMQPQueue($channel);
$q->setName('queue_name');
$q->setFlags(AMQP_DURABLE | AMQP_AUTODELETE);
$q->declare();
$q->bind('direct_exchange_name', 'routingkey_name');
//消息发布
$channel->startTransaction();
$message = json_encode(array('Hello World!','DIRECT'));
$ex->publish($message, 'routingkey_name');
$channel->commitTransaction();
$conn->disconnect();
?>

取队列:

'localhost' , 'port'=> '5672', 'login'=>'guest' , 'password'=> 'guest','vhost' =>'/');
$conn = new AMQPConnection($conn_args);
$conn->connect();
//设置queue名称,使用exchange,绑定routingkey
$channel = new AMQPChannel($conn);
$q = new AMQPQueue($channel);
$q->setName('queue_name');
$q->setFlags(AMQP_DURABLE | AMQP_AUTODELETE);
$q->declare();
$q->bind('direct_exchange_name', 'routingkey_name');  
//消息获取
$messages = $q->get(AMQP_AUTOACK) ;
if ($messages){
      var_dump(json_decode($messages->getBody(), true ));
}
$conn->disconnect();
?>

LVM扩展根目录空间

#LVM扩展根目录
df -h #查看挂载 /dev/mapper/前缀的表示支持LVM扩展
yum install lvm2* part* #必要工具
fdisk -l #查看新硬盘
fdisk /dev/sdb #硬盘分区 需手动输入指令
#输入n进行分区
#输入p为主分区
#输入1(一个主分区)
#输入回车(起始磁盘数默认)
#输入回车(磁盘大小默认全部)
#输入t修改分区格式
#输入8e(LVM必须为此格式)
#输入p查看分区
#输入w写入分区

mkfs.ext4 /dev/sdb1 #格式化分区
partprobe #重新读取分区表 无需重启
pvcreate /dev/sdb1 #创建物理卷(physical volume)
pvscan #查看物理卷
pvdisplay #查看物理卷详情
vgscan #查看卷组(Volume Group)
vgdisplay #查看卷组详情
vgextend VolGroup00 /dev/sdb1    #扩展VolGroup00
lvscan #查看逻辑卷(logical volume)
lvdisplay #查看逻辑卷详情 以lv_root为例
lvextend -L +100G /dev/VolGroup00/lv_root #扩展lv_root  精确扩展可用-l指定PE扩展
resize2fs /dev/VolGroup00/lv_root #重设lv_root大小
df -h #查看挂载情况,已经扩容

#非LVM扩展空间
fdisk -l		#查看硬盘
fdisk /dev/sdb   	#硬盘分区 需手动输入指令
#输入n进行分区
#输入p为主分区
#输入1(一个主分区)
#输入回车(起始磁盘数默认)
#输入回车(磁盘大小默认全部)
#输入p查看分区
#输入w写入分区

mkfs.ext4 /dev/sdb1 #格式化分区
mv /var/lib/redis /backup #先备份
mkdir /var/lib/redis
mount /dev/sdb1 /var/lib/redis
mv /backup/redis/* /var/lib/redis
echo "/dev/sdb1 /var/lib/redis ext4 defaults 0 0" >> /etc/fstab   
#修改/etc/fstab 加入启动挂载

iptables笔记

iptables -P INPUT ACCEPT/DROP
iptables -P OUTPUT ACCEPT/DROP
iptables -P FORWARD ACCEPT/DROP

iptables -F #清除预设表filter中的所有规则链的规则
iptables -X #清除预设表filter中使用者自定链中的规则
iptables -Z #清除预设表filter中使用者自定链中的规则
iptables -L -n #查看
iptables-save  #预览规则内容
service iptables save #保存到默认文件
service iptables restart #重启


#接纳属於现存及相关连接的压缩
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#允许icmp包通过,也就是允许ping
iptables -A INPUT -p icmp -j ACCEPT
#允许loopback(不然会导致DNS无法正常关闭等问题)
iptables -A INPUT -i lo -j ACCEPT
#添加必要端口
iptables -A INPUT -s 192.168.0.0/16 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -j REJECT #拒绝其他
iptables -A FORWARD -j REJECT #拒绝转发


iptables -L --line-numbers #显示行号
iptables -D INPUT 8 #删除INPUT的第8条规则