前言

最近花了点时间重整博客,由于受不了wordpress的日益臃肿,决定迁移到时下很火的hexo,hexo基于node.js,所以首先需要搭建node环境,折腾起来略麻烦,实在不想在公司机器和自己的笔电上来回装,于是打算寻个一劳永逸的方法,偶然想到docker ,所以就有了下面的尝试……

开始尝试

安装docker

懒人安装法

apt-get install update && apt-get install -y docker.io
装完之后会自动启动docker服务,此方法安装的docker版本略低,所以并不推荐。

略高大的安装法

大部分Linux发行版均可以通过下面的命令安装: curl -sSL https://get.daocloud.io/docker | sh
为了下载docker镜像的速度能快些,建议配置好daocloud 加速。

获取镜像

本来的命令是docker pull ubuntu:14.04,如果配置了daocloud加速的话,会是这样dao pull ubuntu:14.04

运行容器

docker run -t -i ubuntu:14.04 /bin/bash 记住容器的id,比如0b2616b0e5a8

更换容器sources.list

修改repo指向阿里云ubuntu镜像 sed -i ‘s/us.archive.ubuntu.com/mirrors.aliyun.com/g’ /etc/apt/sources.list

容器中添加hexo相关应用

  • apt-get update
    apt-get install -y git-core nodejs npm
  • 软链接nodejs到node ln -s /usr/bin/nodejs /usr/bin/node
  • 安装hexo,也许你需要阿里cnpm的拯救,传送门:淘宝NPM镜像 cnpm install -g hexo
  • 添加一个非root用户
    adduser hexo剩下的按照提示做即可
  • 完成后exit退出,此时容器已经改变,用docker commit命令提交更新后的副本 sudo docker commit -m "Added hexo" -a "Docker hexo" 0b2616b0e5a8 hexo:v1

用Dockerfile来创建镜像

dockerfile内容大概是这样子:

#
# Hexo Dockerfile
#

# Pull base image.
FROM hexo:v1
MAINTAINER ferstar <zhangjianfei3@gmail.com>

ENV HOME /home/hexo

# Mount a Host Directory as a Data Volume for hexo
VOLUME /blog

# Expose ports.
EXPOSE 4000

WORKDIR /blog

USER hexo  

根据dockerfile创建镜像 docker build -t hexo:v2 .

测试容器hexo是否安装成功

docker run --rm -v "$PWD:/blog" -p 4000:4000 hexo:v2 hexo -v 结果显示如下,说明安装成功

hexo: 3.1.1
os: Linux 3.19.0-28-generic linux x64
http_parser: 1.0
node: 0.10.25
v8: 3.14.5.9
ares: 1.10.0
uv: 0.10.23
zlib: 1.2.8
modules: 11
openssl: 1.0.1f

导出镜像到本地

docker save -o hexo_v2.tar hexo:v2

部署镜像到新系统

此时新系统只需要安装docker,然后将上一步生成的镜像导入docker中 docker load < hexo_v2.tar

在新系统中部署hexo博客

新建博客目录,如~/blog

mkdir ~/blog
cd blog

原本的初始化命令hexo init变成了如下的命令 docker run --rm -v "$PWD:/blog" -p 4000:4000 hexo:v2 hexo init npm install变成如下的命令 docker run --rm -v "$PWD:/blog" -p 4000:4000 hexo:v2 cnpm install 至此,新的hexo blog即成功建立,当然为了简化命令,你可以把上述命令加入到bash或者zsh alias里面,如

docker-hexo="docker run --rm -v "$PWD:/blog" -p 4000:4000 hexo:v2"
hexo="docker-hexo hexo"

重新打开终端后hexo命令就和原来一样用了,npm命令则变成了docker-hexo cnpm 安装插件的命令变成这样 docker-hexo cnpm install plugin_name --save 至于平时写作发布指令跟原来别无二致

后记

生成的docker镜像还是太大,417MB,过程也略繁琐,需要进一步选择轻量级的迁移方案。

参考文章

  1. ubuntu 修改repo直接成阿里云
  2. 在OSX下使用docker构建hexo环境
  3. Docker —— 从入门到实践
  4. Docker Container for Hexo