Archive: 2016

Docker exec和attach的区别

exec 可以开启多个终端实例, exec -i /bin/bash,由此可见exec其实是在运行中的容器中执行一个命令,比如/bin/bash 来达到交互的目的。 The docker exec command runs a new command in a running container attach 开启一个和正在运行的进程交互的终端,如果该进程结束,原docker contai

如何进入正在执行的 docker container

当一个container起来之后,我们有时候希望能进入container内部去看看,比如查查日志,执行些操作等。目前有几种方式可以实现: 1. docker attach这个是官方提供的一种方法。 测试,首先启动一个container:12$ docker run -i -t ubuntu bashroot@4556f5ad6067:/# 不要退出,打开另一个终端:123456$ docker p

Docker 基本命令

首先,让我们通过下面的命令来检查Docker的安装是否正确:1~$ docker info 如果没有找到这条命令,则表示Docker安装错误。 到这一步Docker里还没有镜像或是容器。所以,让我们通过使用命令预先构建的镜像来创建来一个:1~$ docker pull ubuntu 下一步我们将运行一个“Hello World”的例子,我们暂且叫它“Hello Docker”吧。12~$ dock

存储密码

作为一个Web应用开发者,在选择密码存储方案时, 容易掉入哪些陷阱, 以及如何避免这些陷阱? 普通方案目前用的最多的密码存储方案是将明文密码做单向哈希后存储,单向哈希算法有一个特征:无法通过哈希后的摘要(digest)恢复原始数据,这也是“单向”二字的来源。常用的单向哈希算法包括SHA-256, SHA-1, MD5等。Go语言对这三种加密算法的实现如下所示:1234567891011121314

Go-Json

JSON(Javascript Object Notation)是一种轻量级的数据交换语言,以文字为基础,具有自我描述性且易于让人阅读。尽管JSON是Javascript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。JSON与XML最大的不同在于XML是一个完整的标记语言,而JSON不是。JSON由于比XML更小、更快,更易解析,以及浏览器的内建快速解析支持,

Go-Vim-IDE

install vim with lua support1> brew install vim --with-lua --override-system-vim 确定lua安装成功,中间可能会出现”/usr/local/lib is not writable”错误,可以通过如下命令解决:1> sudo chown -R $(whoami) /usr/local/lib/ 或者使用sud

Go基于Sublime的开发环境搭建

作为一个Go语言新手,趁手的开发工具是必须的 :) 本文简单记录一下自己搭建Go开发环境的过程 安装sublime text2/3配置Package Control安装gosublime包 通过Package Control安装 手动安装安装gocode用于实现代码自动提示12go get github.com/nsf/gocodego install github.com/nsf/gocode

Go性能优化技巧

字符串(string)和字节数组(slice, [ ]byte)转换时需付出 “沉重” 代价。在对性能有要求或者操作频繁的地方使用如下形式:123456789101112import ( "strings" "unsafe")func str2bytes(s string) []byte { x:= (*[2]uintprt)(unsafe.Pointer(&s)) h:= [3

Goroutine的调度器

在了解Go的运行时的scheduler之前,需要先了解为什么需要它,因为我们可能会想,OS内核不是已经有一个线程scheduler了嘛?熟悉POSIX API的人都知道,POSIX的方案在很大程度上是对Unix process进场模型的一个逻辑描述和扩展,两者有很多相似的地方。 Thread有自己的信号掩码,CPU affinity等。但是很多特征对于Go程序来说都是累赘。 尤其是context上

golang中的包

golang的package和其他语言的组织方式完全不同,刚开始接触时,很不适应。 go的package不局限于一个文件,可以由多个文件组成。 组成一个package的多个文件,编译后实际上和一个文件类似,组成包的不同文件相互之间可以直接引用变量和函数,不论是否导出 因此,组成包的多个文件中不能有相同的全局变量和函数(这里有一个例外就是包的初始化函数:init函数,下面还有讨论) go不要求pa