戊辰人博客

青,取之于蓝而青于蓝;冰,水为之而寒于水。

Docker实战(三)镜像管理

日期:2016年4月28日 作者: 分类:运维 阅读:1,636

简单的说镜像就是一个容器的只读模板,用来创建容器。当运行容器时需要指定镜像,如果本地没有该镜像,则会从Docker Registry下载。默认查找的是Docker Hub。Docker的镜像是增量的修改,每次创建新的镜像都会在老的镜像上面构建一个增量的层,使用到的技术是Another Union File System(AUFS)。

一、使用 Docker Hub

镜像存储中的核心概念仓库(Repository)是镜像存储的位置。Docker 注册服务器(Registry)是仓库存储的位置。每个仓库包含不同的镜像。

比如一个镜像名称 ubuntu:14.04,冒号前面的ubuntu是仓库名,后面的14.04是TAG,不同的TAG可以对应相同的镜像,TAG通常设置为镜像的版本号。

Docker Hub 是Docker官方提供公共仓库,提供大量的常用镜像,由于众所周之的原因经常连接Docker Hub会比较慢,所以我们也可以选择一些国内提供类似Docker Hub镜像服务站点。连接Docker Hub的常用命令包括:

# 搜索镜像
docker search ...

# 下载镜像
docker pull ...

阅读全文…

Docker实战(二)数据卷管理

日期:2016年4月27日 作者: 分类:运维 阅读:1,794

Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume)。数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享。

数据卷呈现给Docker容器的形式就是一个目录,支持多个容器间共享,修改也不会影响镜像。使用Docker的数据卷,类似在系统中使用 mount 挂载一个文件系统。

一、数据卷创建

容器管理实验中我们学习的命令 docker run 用来创建容器,可以在使用改命令时添加 -v 参数,就可以创建并挂载一个到多个数据卷到当前运行的容器中,-v的作用是将宿主机的一个目录作为容器的数据卷挂载到容器中,使宿主机和容器之间可以共享一个目录,如果本地路径不存在,Docker也会自动创建。

# 创建两个目录
mkdir /tmp/data1 /tmp/data2 

# 分别将两个目录挂载到新创建的容器上
docker run -t -i --name docker2 -v /tmp/data1:/data1 -v /tmp/data2:/data2 ubuntu /bin/bash

Docker数据卷管理

上述命令中 -v 参数可以使用多次,并挂在多个数据卷到容器中。后面的参数信息中冒号前面是宿主机的本地目录,冒号后面是容器中的挂载目录。

阅读全文…

Docker实战(一)容器管理

日期:2016年4月26日 作者: 分类:运维 阅读:557

Linux容器技术很早就有了,比较有名的是被集成到主流Linux内核中的LXC项目。容器通过对操作系统的资源访问进行限制,构建成独立的资源池,让应用运行在一个相对隔离的空间里,同时容器间也可以进行通信。

容器技术对比虚拟化技术,容器比虚拟化更轻量级,对资源的消耗小很多。容器操作也更快捷,启动和停止都要比虚拟机快。但Docker容器需要与主机共享操作系统内核,不能像虚拟机那样运行独立的内核。

Docker是一个基于LXC技术构建的容器引擎,基于GO语言开发,遵循Apache2.0协议开源。Docker的发展得益于为使用者提供了更好的容器操作接口。包括一系列的容器,镜像,网络等管理工具,可以让用户简单的创建和使用容器。

Docker支持将应用打包进一个可以移植的容器中,重新定义了应用开发,测试,部署上线的过程,核心理念就是 Build once, Run anywhere。

Docker容器技术的典型应用场景是开发运维上提供持续集成和持续部署的服务。

一、Docker安装

Docker的安装教程非常多,此处就不写了,各种系统下安装教程可以点击查看官方安装文档

二、创建第一个容器

如果我们需要一个保持运行的容器呢,最简单的方法就是给这个容器一个可以保持的应用,比如bash,运行 ubuntu 容器并进入容器的 bash:

docker run -t -i ubuntu /bin/bash

Screenshot from 2016-04-26 12:52:40

阅读全文…

你好,我的第二家

日期:2016年3月25日 作者: 分类:随笔 阅读:798

QQ截图20160325171938代码写烦了,趁着现在经理不在,组长不在,就写点东西,来悄悄偷懒一下。

大家都说,现在的社会就是这样,不管你到什么地方,都会有自己的不满,而我,现在正在体验着这种感觉。之前在东码时,一直都在吐槽着这不好那不好,最终下定决心离开它,想从此解脱这种烦恼,可是,到了下一家以后,很多东西得到了改善,可也有一些东西心里觉得有些不够。不过现在总体感觉也都还不错,只是感觉这样生活得有些劳累。

来了两个星期的时间了,说下总体的感觉吧!不用为每天中午吃什么而烦恼了,因为现在都是在公司里面吃统一的;也不用过着总感觉在混日子的上班生活了,因为现在几乎忙得不给你喘气的机会。其实也不至于这么忙,只是我觉得这样的忙,可以给我改变点什么,至少改变了我懒散的生活。

这个星期开始,周一经理在出差前召开了研发部会议,就说了一件事情,就是项目太紧,强制性进行周246的加班。听到这个消息,可能很多人就不爽了,本来是双休的时间,现在好了,加班!可我更加苦逼,周一晚上开始就进行了加班,这一开始,就到了今天周五,眼看这周就要结束,可我也感觉累得快不行了,全省酸痛……

听说加班有加班费!这样的消息,对加班的人来说,莫过于打了一针兴奋剂。不仅如此,晚饭也包了!这样也才让人感觉自己没有白干,虽然至今为止,我都还没有拿到过所谓的加班费……

说到这,不得不提下之前的公司了,原来的那些吐槽其实也是应该的。在了两年,每个月就只拿着那点可怜的固定工资,两年下来,查了下工资卡的进账单,也就那么几个月的工资是真的全额固定工资,其他的都被各种理由扣了,这样的收入,对于现代的90后在这样的城市中生活,真心有些累了。可发工资的老总还经常给我说,这样的工资,每个月不说多,至少也可以存个两千块吧!我*&%¥%#@#!现在想想,终于知道为何工作两年,还是身无分文了!看来离开的决定是正确的,而且也是一个最佳时机!

吐槽完了,说下收获吧!

阅读全文…

再见,我的第一家

日期:2016年3月25日 作者: 分类:随笔 阅读:363

QQ截图20160325171938

对于辞职,我没有什么经验,可现在有了,因为我真的辞职了。

早在一年前,我就有过辞职的念头,因为我觉得那个公司太过于小了,“小”就能带来很多方面的问题,一是人太少,交际范围有限,同事就那么两三个,何时才能壮大我的朋友圈;二是业务太少,完全没有什么规整点的项目给我们来做,平时感觉工作就是在混时间,结果浪费了大好青春;三是小就带来了各种制度的不完善,本来嘛,咱工作也是个正规的工作,本来应该享受一般白领所能享受的待遇,可公司太小,刚成立那么几年,各种制度不够完善,很多福利不但没有,每次发工资都要扣你几块,反正扣得原因有你想得到的,也有你想不到的……

每一个辞职者,或许都会有一个或者多个自己想要走的原因,但就像“一千个读者就会有一千个哈姆雷特”一样,每一个想要离开的人,都会编造出各种离开的理由,可说到底,也就无非那句话“世界那么大,我想去看看”,或者更直接点:“不爽!”所以在辞职申请当中,辞职理由那里留了很大的一个空间,可我就写了四个字:个人原因!本来这四个字是同事给我的忠告,说这四个字写上去,自己想这么说就怎么说,反正别人抠不出什么,其实我也觉得这四个字很适合,因为说到头来,的确是自己的原因,因为“不爽!”可后来没办法,人事那边说这样不好像上边交代,我只能再在后面加了一句,大概意思就是“世界那么大,我想去看看!”

对于这次的辞职,我一开始有些不知所措,因为没经验,不知道怎么去开口说出我要走了。然后一同事说他也要走了,我就给他说那你先去辞职,你先走,我断后!话是这么说,可真的要实践起来,还不是那么简单的事。我一直在做心理准备,想着如何去说我要辞职这个事情。之所以如此担忧,一方面是因为我是公司现今为止最老的员工,现在去辞职,可能对领导来说是一个打击;另一方面,是见识过前面辞职的员工,他们都或多或少和领导辞职的时候遇到了各种问题,要么是对工资的事情针锋相对,要么对社保的问题纠缠不清,而且前面辞职的同事,都被领导扣了一大笔的工资……对这些事情,我亲眼见识,也深有体会,害怕我现在的辞职又与领导闹起来,那我如何是好?我可不想把事情闹得不可开交,甚至以后见个面都觉得尴尬甚至不想见面。

阅读全文…

一个叫做《404》的互联网

日期:2016年3月2日 作者: 分类:互联网 阅读:1,008

几年以前,我曾经嘲笑过某科技界大佬。当时他说:也许90后、95后会慢慢不知道谷歌是什么网站。

那一年,这对于我来说简直就是世界上最好笑的笑话。谷歌,全世界最卓越的互联网公司,活在互联网的一代中国人,会不知道他们的网站?

google-404

今天,我收回这句嘲笑。因为这件不可能的事,它慢慢变成了现实。

没有人再关注什么谷歌不谷歌。对他们来说,百度也蛮好用的,反正他们几乎没用过谷歌。没有谷歌又怎样?大家还是开心的刷微博,看微信,听歌,看娱乐节目。对于从来就不知道谷歌的人来说,少了谷歌又有什么影响?

阅读全文…

在Linux中让echo命令显示带颜色的字

日期:2016年3月2日 作者: 分类:编程 阅读:380

echo -e “\033[字背景颜色;文字颜色m字符串\033[0m”

例如:

echo -e “\033[41;37m TonyZhang \033[0m”

其中41的位置代表底色, 37的位置是代表字的颜色

注:

1、字背景颜色和文字颜色之间是英文的“”””

2、文字颜色后面有个m

3、字符串前后可以没有空格,如果有的话,输出也是同样有空格

下面看几个例子:

echo -e "\033[30m 黑色字 \033[0m"
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[32m 绿色字 \033[0m"
echo -e "\033[33m 黄色字 \033[0m"
echo -e "\033[34m 蓝色字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"
echo -e "\033[36m 天蓝字 \033[0m"
echo -e "\033[37m 白色字 \033[0m"
 
echo -e "\033[40;37m 黑底白字 \033[0m"
echo -e "\033[41;37m 红底白字 \033[0m"
echo -e "\033[42;37m 绿底白字 \033[0m"
echo -e "\033[43;37m 黄底白字 \033[0m"
echo -e "\033[44;37m 蓝底白字 \033[0m"
echo -e "\033[45;37m 紫底白字 \033[0m"
echo -e "\033[46;37m 天蓝底白字 \033[0m"
echo -e "\033[47;30m 白底黑字 \033[0m"

控制选项说明 :

\33[0m 关闭所有属性
\33[1m 设置高亮度
\33[4m 下划线
\33[5m 闪烁
\33[7m 反显
\33[8m 消隐
\33[30m -- \33[37m 设置前景色
\33[40m -- \33[47m 设置背景色
\33[nA 光标上移n行
\33[nB 光标下移n行
\33[nC 光标右移n行
\33[nD 光标左移n行
\33[y;xH设置光标位置
\33[2J 清屏
\33[K 清除从光标到行尾的内容
\33[s 保存光标位置
\33[u 恢复光标位置
\33[?25l 隐藏光标
\33[?25h 显示光标

阅读全文…

Python之PIL图片处理

日期:2015年12月28日 作者: 分类:编程 阅读:1,032

由于工作原因需要将大量jpg图片文件缩放成宽度为1000像素的图片上传,最初是用图片处理工具进行一张张处理,但效率十分低下,于是就自己动手用Python实现一个批量处理工具。

PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。

在Debian/Ubuntu Linux下直接通过apt安装:

sudo apt-get install python-imaging

为了方便不同宽度的需求,程序要支持指定宽度,缩放后的图片保存在当前目录下的子目录中。程序代码如下

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Filename: resize-img.py
# require: python-pil python-imaging

import os
import sys
import Image

# 重新设置图片大小
def resize_img(width, filename):
    newdir = "size_" + str(width)
    if not os.path.exists(newdir):
        os.mkdir(newdir)
    img = Image.open(filename)
    (x, y) = img.size

    x_s = width
    y_s = y * x_s / x

    out = img.resize((x_s, y_s), Image.ANTIALIAS)
    out.save(newdir + '/' + filename, 'jpeg');


if __name__ == "__main__":
    if len(sys.argv) != 2:
        print 'usage: ' + sys.argv[0] + " width(px)"
        print 'e.g. : ' + sys.argv[0] + " 1000"
        sys.exit(1)

    files = os.listdir(os.getcwd())
    for filename in files:
        if 'jpg' == filename.split('.')[-1].lower():
            resize_img(int(sys.argv[1]), filename)
            print 'resize ' + filename + ' succes'

阅读全文…

使用iptables屏蔽垃圾评论实战

日期:2015年11月26日 作者: 分类:运维 阅读:957

在博客后台,每天会拦截大量垃圾评论,但近期的垃圾评论都是下面这样的,同一个IP地址。

使用iptables屏蔽垃圾评论实战

 

查询该IP的详细信息如下:

使用iptables屏蔽垃圾评论实战

 

因为最近的垃圾评论都是这个IP发出的,于是想到利用iptables将这个IP屏蔽掉,思路就是任何从117.26.117.132这个IP来的数据,统统DROP掉,从而防止这个IP来的垃圾评论。

# root权限执行命令
iptables -I INPUT -s 117.26.117.132 -j DROP

在添加该防火墙规则之前,平均10~20分钟左右一条来自117.26.117.132的评论,添加规则之后,到目前为止,评论数没有再增加。

阅读全文…

WordPress上传图片或附件自动重命名的实现方法

日期:2015年11月20日 作者: 分类:编程 阅读:1,135

在使用wordpress发布文章时,经常用到的一个功能就是添加媒体,比如在文章中添加图片或其他格式的附件。那么,问题来了,wordpress在英语环境中使用,文件名一般都是英文,但是对于中文用户来说,经常会碰到文件名是中文的情况。尽管直接上传一个中文名的文件到网站上是没有问题的,但是我们更希望这个文件能在我们上传的时候自动变成英文或数字。

本文将会介绍两个格式的文件命名方法:根据上传的时间命名,如20140101112233.xxx(表示2014年1月1日11时22分33秒上传的,xxx表示文件类型后缀);另一种是将文件名通过md5转码后得到的一个32位字符串,如21232f297a57a5a743894a0e4a801fc3.xxx(原始文件名为admin.xxx)。在自定义的wordpress主题或官方自带的主题中都可以使用这个方法来实现上传文件重命名。

原理

wordpress之所以强大就是因为它给开发者提供了一系列API,使其变得非常灵活。wordpress有一个Filter Functions(过滤器函数):add_filter,使用这个函数来操作wp_handle_upload_prefilter就能实现重命名的功能。

wp_handle_upload_prefilter可以参看wordpress官方文档的说明:

根据上传时间重命名文件

通常情况下,我们每次上传文件的时间都是不同的,即使是批量上传的情况下,也几乎不会出现同一时刻上传了多张图片文件的情况。所以这个方法几乎不会出现重名的文件。

这里需要用到php中的date()函数,完整的代码如下:

add_filter('wp_handle_upload_prefilter', 'custom_upload_filter' );
function custom_upload_filter( $file ){
	$info = pathinfo($file['name']);
	$ext = $info['extension'];
	$filedate = date('YmdHis').rand(10,99);//为了避免时间重复,再加一段2位的随机数
	$file['name'] = $filedate.'.'.$ext;
    return $file;
}

阅读全文…