前言
最近花了点时间重整博客,由于受不了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,过程也略繁琐,需要进一步选择轻量级的迁移方案。