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来安装操作系统,直到系统安装完成。

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条规则

CentOS SSH密钥设置

#需求场景一: www用户无密码登录root@remotehost 
passwd www  #root设置www用户密码 
su www && cd /home/www  #登录www用户并进入家目录 
ssh-keygen -b 1024 -t rsa  #生成公钥私钥 
cd /home/www/.ssh/ #进入公钥目录 
scp id_rsa.pub root@remotehost:/root/ #拷贝公钥到指定服务器 
ssh root@remotehost #登录指定服务器 
cat id_rsa.pub >> /root/.ssh/authorized_keys #将公钥加入审计文件中,如无.ssh需创建 

#需求场景二: root用户免密码登录root@remotehost 
ssh-keygen -b 1024 -t rsa  #登录root用户生成公钥私钥 
ssh-copy-id -i .ssh/id_rsa.pub root@remotehost #将公钥加入到指定服务器审计文件中
1

kstring linux下字符串批量查找替换工具

自制小工具分享: kstring

功能:

1.查找指定目录下所有存在指定字符串的文件

2.替换指定目录下所有文件中的指定字符串为新字符串

开发语言:python

部署:复制到/usr/bin/目录并给于执行权限.

用法:

查找字符串

kstring -f 目录路径 字符串

替换字符串

ksrting -r 目录路径 字符串 新字符串

———————————————————–

kstring -[f|r] dirpath string newstring

-f : find string in files
[ksrting -f dirpath string]
-r : replace string to newstring in files
[ksrting -r dirpath string newsrting]
-h : help

———————————————————–

另附上:纯shell命令替换方法

sed -i “s/oldString/newString/g” `grep oldString -rl /path`

例如:

1.sed -i “s/大小多少/日月水火/g” `grep 大小多少 -rl /usr/aa`

2.sed -i “s/大小多少/日月水火/g” `grep 大小多少 -rl ./`

传送门: 下载kstring

Linux配置rdate同步时间服务器

配置多台服务器时,经常需要让各个服务器之间的时间保持同步,如果服务器有外网环境,可以直接同外部的时间服务器更新时间,可以采用rdate命令更新时间:

rdate -s tick.greyware.com

可以写个脚本放在/etc/cron.hourly中每小时校正一下时间。

如果是内网环境下,可以自己配置一个时间服务器,以CentOS为例,配置时间服务器的方法如下:

1.先安装xinetd : sudo yum install -y xinetd

2.修改/etc/xinetd.d/time-stream, 修改:

disable     = yes  改为

disable = no

3.启动xinetd

service xinetd start

这样其它机器就可以通过rdate 与该机器进行时间同步

rdate -s ip

rdate(receive date)

功能说明:显示其他主机的日期与时间。

语  法:rdate [-ps][主机名称或IP地址...]

补充说明:执行rdate指令,向其他主机询问系统时间并显示出来。

参  数:
-p  显示远端主机的日期与时间。
-s  把从远端主机收到的日期和时间,回存到本地主机的系统时间。