制作镜像的最佳实践

本文以制作基于centos的nginx镜像为例,来说明如何做一个可控的镜像。

step 1. 先基于centos的基础镜像,启动一个叫mynginx的容器

1
$ docker run -it --name mynginx centos /bin/bash

step 2. 基于该容器做镜像改造,以下操作是在容器内操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 新建 nginx yum仓库文件
$ cat > /etc/yum.repos.d/nginx.repo <<EOF
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/\$basearch/
gpgcheck=0
enabled=1
EOF
# 安装 Nginx, -y 表示自动确认
$ yum -y install nginx
# 顺便修改下主页文件
$ echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
# 退出容器,我们容器部分的安装就算完成了
$ exit

当然如果简单的话,可以直接写到 Dockerfile 中,这种方式适合哪种对Dockerfile的各种奇葩语法搞不懂,需要copy各种数据,安装软件比较复杂,例如需要编译需要各种依赖等等。等同于你拿到一个全新的系统做的一些初始化工作,能变成你们公司的基础镜像,后续的镜像都可以基于这个镜像来构建。

Centos上禁用 rpcbind 111端口

腾讯云上centos7装好以后,除了监听22端口(sshd的服务)外,还监听了111端口,而且监听的是0.0.0.0,担心存在安全风险,于是想禁用掉。

起111端口的进程是systemd,在网上查了下,实际用的是rpcbind。大部分服务是不依赖于rpcbind的,只有NFS需要用到这个服务,所以可以禁掉。

以下是禁掉该rpcbind服务的命令:

1
2
3
4
5
6
7
# 停止进程
$ systemctl stop rpcbind.socket
$ systemctl stop rpcbind

# 禁止随开机启动
$ systemctl disable rpcbind.socket
$ systemctl disable rpcbind

Go语言初体验

GO语言是一门函数式编程的语言。写起来有不一样的味道。
GO语言是一门静态类型语言,使用变量的时候需要预先声明。
GO语言没有类,但是可以用结构体来模拟类的一些特性。
GO语言适合写服务,写逻辑的能力有待考察。
GO语言跟其他语言的通信用gRPC的方式还是用httpAPI的方式有待考察。
GO编码规范,https://golang.org/doc/effective_go.html

运行态 runtime

  • 获取当前goroutine数量 num := runtime.NumGoroutine()

Nginx的Location配置语法

location的作用是将访问的链接定位到资源上,进而修改资源的一些属性(如设置图片的缓存)或者是确定图片的位置,可能是本地的资源,也有可能是proxy_pass代理的后端服务。

基础语法

1
2
3
location [=|~|~*|^~] patt {

}
  • = 严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。
  • ~ 为区分大小写匹配(可用正则表达式)。
  • ~* 为不区分大小写匹配(可用正则表达式)。
  • ^~ 如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式。
  • 如果没有上述四种符号,则默认为=

flex布局语法

做前端的同学应该了解,最开始页面的布局就是table,在table中填各种内容就好了
后来发展成div+css的模型,各种fix,float什么的
由于移动端设备的兴起,flex模型逐渐进入人们的视野

以下代码就可以定义一个class=”box”的div成一个flex容器

1
2
3
.box{
display: flex;
}

在css世界中,html中有两种元素,一种是块级元素,一种是内联元素。块级元素负责布局,内联元素负责内容。

毕业季回忆,牵挂

今天看到有人在发丁烈云校长的毕业演讲,突然回忆起我当年毕业时候的校长发言,算是一种回忆吧。

牵 挂

李培根

亲爱的09届毕业生同学们,你们好!

四年前,我迎来了你们中的大多数人。今天,在你们毕业之际,在你们即将踏上新的征途的前夕,我想对你们说两个字,那就是“牵挂”。

grpc快速入门

为什么要用RPC?

RPC = Remote Produce Call

  1. 一个大的系统需要拆分成若干小系统。
  2. 代码解耦,调用方不用关心实现细节。
  3. 运维隔离,微服务的前奏,对小系统升级不影响整体的系统。

常用的RPC方案?

  • thirft # 源自facebook
  • grpc # 源自google
  • dubbo # 源自taobao
  • tars # 源自tencent