Mac OS X 下安装使用 Docker (新)

两年前的一篇 Mac OS X 下安装使用 Docker 安装时还是用的 boot2docker, 如今进化到了在 Mac OS X 下用 Docker Toolbox, 而且命令也由 boot2docker 换成了 docker-machine. 当然由于是非 Linux 系统, 所以 Mac OS X 仍然需要借助于 VirtualBox 中的 Linux 虚拟机作为桥梁, Docker Toolbox 创建的虚拟机名是 default (boot2docker 创建的虚拟机名是 boot2docker-vm) 就是这一桥梁, 我们称之为 DOCKER_HOST. 文中的 default 虚拟机指的就是这个 DOCKER_HOST.

现在来看下安装步骤及体验, 因为我系统中已安装好了 VirtualBox, 所以这一步骤等会就省略了.

一. 安装 docker 和  docker-machine

官方的指南是通过下载  DockerToolbox 来安装 docker, docker-machine 和其他辅助工具. 但如果你偏于极客, 并不习惯于图形界面来安装的话, 那么安装 docker 和 docker-machine 就只要下面两个指令

如果你已选择了使用上面的两条命令来安装 docker, docker-machine 的话, 那么请跳到下一步.

如果你热爱图形界面来安装应用的话, 可以到页面 https://www.docker.com/products/docker-toolbox 中下载 Mac 的版本的 DockerToolbox-1.10.3.pkg, 当前版本是 1.10.3

Docker Toolbox Installer   Docker Toolbox includings 阅读全文 >>

Mac OS X 下不能 brew update 的问题

我在 Mac OS X 下执行 brew update 出错

➜   brew update
error: Your local changes to the following files would be overwritten by merge:
    Library/Formula/abcde.rb
    Library/Formula/acpica.rb
    ............
    Library/Formula/pypy.rb
    Library/For
error: The following untracked working tree files would be overwritten by merge:
    Library/Aliases/actor-framework
    Library/Formula/aescrypt-packetizer.rb
    ............
    Library/Formula/stlink.rb
    Library/Formula/with-readline.rb
Please move or remove them before you can merge.
Aborting
Error: Failure while executing: git pull -q origin refs/heads/master:refs/remotes/origin/master 阅读全文 >>

fish 2.2.0 (July 12, 2015) 支持 vi 模式

随着 Mac 下终端的使用日益增多,系统默认的 bash 已经满足不了需求了,于是有了更为强劲的 fishzsh,以及它们各自的强心剂 Oh-My-FishOh-My-Zsh. 我的选择是 Fish 和 Oh-My-Fish。

到目前为止,最新的 fish 2.2.0 于 2015 年 7 月 12 日发布,Release notes 如下 http://fishshell.com/release_notes.html,其中显著改变有:

  • Abbreviations: the new abbr command allows for interactively-expanded abbreviations, allowing quick access to frequently-used commands (#731).
  • Vi mode: run fish_vi_mode to switch fish into the key bindings and prompt familiar to users of the Vi editor (#65).
  • New inline and interactive pager, which will be familiar to users of zsh (#291).
  • Underlying architectural changes: the fishd universal variable server has been removed as it was a source of many bugs and security problems. Notably, old fish sessions will not be able to communicate universal variable changes with new fish sessions. For best results, restart all running instances of fish.
  • The web-based configuration tool has been redesigned, featuring a prompt theme chooser and other improvements.
  • New German, Brazilian Portuguese, and Chinese translations.

我对第二点比较感兴趣,即增加了 vi 模式,在 fish 下运行 fish_vi_mode 命令,或者在 ~/.config/fish/config.fish 中加上 fish_vi_mode 便自动进入 vi 模式。 阅读全文 >>

Linux 输入输出重定向, &>file, 2>&1, 1>&2 等

我们无论是在写批处理还是 Linux 的 Shell 都常用到 >, >> 或 <,这是输入输出重定向。特别是 Linux 的 Shell 常见到  2>&1 这样的写法,这是在干什么呢?这里就来了解下 Linux 下的输入输出重定向的一些来龙去脉。

在 Linux 下几乎一切都号称是文件,标准输入、输出也不例外,它们是叫做 fd (File Descriptor) 文件描述符。这里我们关注三个东西

名称 代码 操作符 Java中表示 Linux 下文件描述符(Debian 为例)
标准输入(stdin) 0 < 或 << System.in /dev/stdin -> /proc/self/fd/0 -> /dev/pts/0
标准输出(stdout) 1 >, >>, 1> 或 1>> System.out /dev/stdout -> /proc/self/fd/1 -> /dev/pts/0
标准错误输出(stderr) 2 2> 或 2>> System.err /dev/stderr -> /proc/self/fd/2 -> /dev/pts/0

从以上表格我们可以理解 0, 1 和 2 分别是什么东西了,它们的输入源或输出目的地默认都是屏幕。

下面不作系统解释输入, 输出重定向的完整使用,只说明一些常见的例子: 阅读全文 >>

Bash 的常用语法,控制结构

最近玩弄 Jenkins 较多,构建服务器基本是 Mac OS 和 Linux,虽说有许多现成插件可用,但不敢不说 Execute Shell 这个东西都是即开即用,方便而灵活的。因此不断的要和 Shell 打交道,真正通用的的 Shell 自然是 Bash,在 Mac OS 下可发现自带了 zsh, ksh 和 tcsh,考虑到 Linux 还是 Bash 吧。

本人工作时用的是 Fish Shell,目前相当的脚本语言都可用来写 Shell 脚本,如 PHP, Ruby, Python, Perl,NodeJs 等,只是 Bash 的地位总难被替代,借句话说 Bash 的是拿来 “用” 的,而像 Ruby, Python 等做 Shell 是拿来 “编” 的,再就是 Bash 与 Linux 命令的亲缘性更强。

我也只会在实在用 Bash 太难于表达的时候才用其他脚本语言,如处理日期的运算,因 Mac OS 的 date 和 Linux 的 date 命令差异较大,不得已会选择有较强类型的 Ruby 等。

既然 Bash 要作为一个日常语言,那不妨作个备忘录,记录下那些常用的语法,控制结构。

1. if 条件语句 阅读全文 >>

Vi 寄存器操作,及使用系统剪贴板

使用 Vi 不得不提它强大的寄存器功能,一般操作系统只支持单例的剪贴板操作,而 Vi 借助于寄存器,相当于有几十个剪贴板可以使用。Vi 中针对内容的操作会记入到寄存器中,包括复制,粘贴,删除,以及只读的寄存器和与系统剪贴板交换内容的寄存器。本文最初目的是怎么与系统剪贴板交换内容。

在 Vi 中使用 :reg (:registers 或 :dis/:display) 命令显示寄存器中的内容

vi-registers

主要寄存器

阅读全文 >>

Vi Buffer 的基本操作

在 vi 中打开过多个文件时,每个文件都是存放在各自的 buffer  中,可以用命令 ls (buffers 或 files,三个命令中拣你最喜欢的一个即可,ls 输入方便,buffers/files 更表意) 显示所有的 buffer。显示出来的结果如下:

vi-list-buffers

可以看到

每个 Buffer  的编号,分别是 1, 4, 5, 6
% 表示的是当前窗口中的 Buffer
+ 表该 Buffer  中的内容有修改
Buffer 中的文件名称 阅读全文 >>

Mac OS X 下安装使用 Docker

前注: 欢迎进到本页, 本篇写时较早, 而 Mac OS X 下 Docker 早不建议用 boot2docker 了, 取而代之的是 docker-machine. 请点击链接 Mac OS X 下安装使用 Docker (新) 查看最新安装过程与体验

云主机可以选择操作系统镜像快速创建主机,这比虚拟机更便捷了,我们本地也可以这么做了,因为有了 Docker 这个东西。它依赖于 LXC(Linux Container),能从网络上获得配置好的 Linux 镜像,非常容易在隔离的系统中运行自己的应用。也因为它的底层核心是个 LXC,所以在 Mac OS X 下需要在 VirtualBox 中跑一个精小的 LXC(这里是一个 Tiny Core Linux,完全在内存中运行,个头只约 24MB,启动时间小于 5 秒的 boot2docker) 虚拟机,构建在 VirtualBox 中。以后的通信过程就是 docker --> boot2docker --> container,端口或磁盘映射也是遵照这一关系。

理解了上面的关系,开始说说 Docker 安装过程

1. 安装 VirtualBox, 不多讲, 因要在它当中创建一个 boot2docker-vm 虚拟机

2. 安装 boot2docker

brew install boot2docker

你也可以手工安装 阅读全文 >>

Apache 配置 SSL(HTTPS) 并整合 Tomcat

我们在 Tomcat 中可以开启 SSL,用 HTTPS 来访问,见前一篇 快速启用 Tomcat 的 HTTPS 协议访问,不过更接近实际的应用是 Tomcat 只担当 Servlet 容器,HTTPS 协议部份,甚至是静态页面是交给 Apache 的处理,Apache 与 Tomcat 之间有一个通道。当然前端用 F5 那类负载均衡设备就另当别论了。

这里实践一下怎么开启 Apache 的 HTTPS,并与 Tomcat 进行整合的操作。平台是 Mac OS X, Apache2, Tomat8,其他平台或不同版本的应用软件配置类似。

第一步: 生成自签署证书

安全加密的东西都得证书,我们需要用到 openssl,没有就先安装它,命令是:

openssl req -new -x509 -days 365 -nodes -out server.crt -keyout server.key

上面命令可以指定生成 server.crt 和 server.key 文件的目录,默认产生在当前目录下,假设这两个文件生成在 /etc/apache2 目录下。 阅读全文 >>

Debian 6 上安装 Nginx+PHP+MySQL

正在使用亚马逊的 VPS,一年的小心翼翼的免费期,选择的是 Debian 6 32 位的系统,因搭建 WordPress 试图在上面安装 Nginx+PHP 的环境。看着在 Nginx 环境下多是使用 php-fpm,而不是 php-cgi,前者与后者的区别是在孤立的 php-cgi 之上又多了一个调度层。

一开始打算一步步纯手工打造,但在执行 apt-get install php-fpm 时总有不可逾越的依赖症,所以转而寻求更傻瓜的一键包安装方式。试过 LNMP,包太大,东西太过于齐全,把人太当傻瓜,虽然如此,我在用它安装时也有些慢,因为它也是采取的编译安装方式,针对本机应该有很好的优化。没装完我就中断了,下次有时间可以再试下。

正好在这期间看到了 Dvid Pennington 制作的 lowendscript lnmp 一键安装脚本,很省事,连安装  WordPress 也考虑到了,这里有介绍,比较详细 lowendscript:最省资源lnmp一键包。我只记录下我自己的安装过程,以备忘。 阅读全文 >>