用 Docker + GitBook 写书

准备 GitBook 环境

安装 Docker

$ echo deb http://get.docker.io/ubuntu docker main \
    | sudo tee /etc/apt/sources.list.d/docker.list
$ sudo apt-key adv --keyserver keyserver.ubuntu.com \
    --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
$ sudo apt-get update
$ sudo apt-get install -y lxc-docker

安装 GitBook 环境

$ sudo docker search gitbook
NAME  DESCRIPTION   STARS     OFFICIAL   AUTOMATED
tobegit3hub/gitbook-server 2             [OK]
$ sudo docker pull tobegit3hub/gitbook-server

完善 GitBook 环境

$ sudo docker images | grep gitbook
tobegit3hub/gitbook-server   latest d171079650c8
$ sudo docker run -i -t \
tobegit3hub/gitbook-server /bin/bash
$ apt-get install git
$ apt-get install fonts-arphic-gbsn00lp

用 GitBook 写书

基础准备

GitBook 核心文件

GitBook 输出格式

GitBook 在线预览

Starting server …

Serving book on http://localhost:4000

杂项

SyntaxError:…/book.json:Unexpected token o

GitBook 图书实例

下载和编译图书

$ git clone \
https://github.com/tobegit3hub/understand_linux_process.git
$ cd understand_linux_process
$ gitbook build
$ gitbook pdf

在线预览图书

$ ifconfig eth0 | grep "inet addr"
inet addr:172.17.0.31 ...
$ gitbook serve ./
Starting server ...
Serving book on http://localhost:4000

从 Docker 拷贝出 pdf

$ readlink -f book.pdf
/gitbook/understand_linux_process/book.pdf
$ sudo docker ps -a
CONTAINER ID   IMAGE              COMMAND
cf5925e tobegit3hub/gitbook-server "/bin/bash"
$ sudo docker cp \
cf5925e:/gitbook/understand_linux_process/book.pdf 

从 主机 拷入 Docker

$ fullid=`sudo docker inspect -f '{{.Id}}' cf5925e`
$ gitbook=/var/lib/docker/aufs/mnt/$fullid/gitbook/
$ ls $gitbook
understand_linux_process
$ cp book.pdf $gitbook/book-from-host.pdf

直接挂载卷共享

$ fullid=`sudo docker inspect -f '{{.Id}}' cf5925e`
$ gitbook=/var/lib/docker/aufs/mnt/$fullid/gitbook/
$ ls $gitbook
understand_linux_process
$ cp book.pdf $gitbook/book-from-host.pdf

新建 GitBook 环境

备份/导出/导入容器

$ sudo docker commit cf5925e tinylab/gitbook
$ sudo docker images | grep tinylab/gitbook
tinylab/gitbook latest 2106b9f7f675
$ sudo docker save tinylab/gitbook > gitbook.tar
$ sudo docker load < gitbook.tar

其他操作

新建 GitBook Dockerfile

# Dockerfile
FROM ubuntu:14.04
MAINTAINER Falcon wuzhangjin@gmail.com
RUN sed -i -e "s/archive.ubuntu.com/mirrors.163.com/g" \
    /etc/apt/sources.list
RUN apt-get -y update
RUN apt-get install -y nodejs npm git && \
    npm install gitbook -g
RUN apt-get install -y calibre
RUN apt-get install -y fonts-arphic-gbsn00lp
RUN mkdir /gitbook
WORKDIR /gitbook
EXPOSE 4000
CMD ["gitbook", "serve", "/gitbook"]

新建 GitBook Dockerfile(续)

Dockerfile

# Dockerfile
FROM ubuntu:14.04
MAINTAINER Falcon wuzhangjin@gmail.com
RUN sed -i -e "s/archive.ubuntu.com/mirrors.163.com/g" \
    /etc/apt/sources.list
RUN apt-get -y update
RUN apt-get install -y curl git && cd / && \
    git clone https://github.com/creationix/nvm.git nvm && \
    echo ". /nvm/nvm.sh" > ~/.bashrc && . ~/.bashrc && \
    nvm install 0.12.2 && nvm use 0.12.2 && \
    npm install gitbook -g
RUN apt-get install -y calibre
RUN apt-get install -y fonts-arphic-gbsn00lp
RUN mkdir /gitbook
WORKDIR /gitbook
EXPOSE 4000
CMD ["gitbook", "serve", "/gitbook"]

基于 Dockerfile 构建映像

$ sudo docker build -t tinylab/gitbook ./

-c, –cpu-shares=0 CPU shares (relative weight)

–cpuset-cpus= CPUs in which to allow execution (0-3, 0,1)

-m, –memory= Memory limit

免 sudo 使用 docker

把普通用户加入 docker 用户组

sudo groupadd docker

sudo gpasswd -a ${USER} docker

sudo service docker restart

原因

$ sudo ls -l /var/run/docker.sock srw-rw—- 1 root docker 0 May 1 21:35 /var/run/docker.sock

参考资料