Docker安装Gitbook

Gitbook介绍

官方简介:

Modern documentation format and toolchain using Git and Markdown.

一个开源易用的使用Markdown格式的编排书本程序。


Docker介绍

Docker 是一个开源的应用容器引擎。可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

基本概念

镜像

可以理解为一个打包好的的一整套程序,一“解压”出来就能整套系统上线了。

容器

可以理解为镜像的实例,即把“镜像”解压出来成为一个真正可以上线的系统文件。

DockerFile介绍

一系列的Docker指令集,可以类比成Linux的Bash命令集


构建思路

  1. 把gitbook的所有文章和文章目录文件放置在程序根目录下的docs文件夹下
  2. 同时那gitbook的配置文件与插件设置预设好,每次build docker都能自动化构建好
  3. 达到的效果是,我在本地只需要管好docs里的文章,每次需要上线展示,就直接docker build一次,放到线上docker run就能浏览了。

构建过程

直接编写Dockerfie文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
FROM node
MAINTAINER Copriwolf <root@or2.in>

RUN mkdir -p /gitbook/docs
WORKDIR /gitbook

# 针对国内版本可以提高加载速度
RUN npm config set registry=http://registry.npm.taobao.org

RUN npm install -g gitbook-cli && gitbook -V

COPY ./book.json /gitbook/

# 针对内存1g及其以下,直接gitbook install会导致内存不足
RUN npm install nodejieba
RUN npm install gitbook-plugin-search-jieba

RUN gitbook install
COPY ./docs/ /gitbook/docs/

EXPOSE 4000
CMD ["gitbook","serve"]

下面一行一行来解释一下。

0 : 我们用dockerfile文件构建的是一个镜像,构建过程可以理解为,我们新建了一个容器,在容器里面运行各种操作,最后运行完就把这个容器以镜像的模式保存起来。
1 : 我们直接使用Node官方提供的镜像,从node起步,避免虚拟机式使用带来的依赖性烦恼
2 : 用来说明脚本编写者
4 : RUN命令就如同你在linux的命令行界面下运行一条bash命令,在docker的容器内创建目录
5 : 制定容器内的/gitbook目录为我们dockerfile接下来运行脚本的目录
10: 安装gitbook-cli,同时用gitbook -V查看一下gitbook的版本,这个命令同时也会把gitbook安装上(gitbook & gitbook-cli不是同一个程序噢)
12: 把宿主机里当前目录的book.json(gitbook配置属性的文件)复制到docker构建的容器中。
14-16: 这2个安装其实是提前安装了2个gitbook的插件,因为实际操作发现如果直接gitbook install安装,内存1g及其以下的主机会撑不住导致进程被killed,然后导致整个容器构建失败。
18: gitbook安装book.json中配置需要安装的插件
19: 把宿主机下的存储文章列表的文件夹复制到容器中
21: 开放容器的4000端口,用于与外界环境接驳
22: CMD命令是用于设置docker容器run时开启时运行的命令,一个dockerfile只能有一个cmd命令,多了就以最后的一条为准,这里的命令意思是在启动这个容器时自动运行gitbook serve,意思就是上线这个服务。


运行

构建镜像

在宿主机上,在项目根运行docker build . -t 'docker2gitbook',并等待构建完成。

运行镜像

在宿主机上,直接运行docker run -d -p 4000:4000 docker2gitbook

-d : 后台运行
-p xxx:yyy : 端口映射,把docker容器的yyy端口映射到宿主机的xxx端口。实际用户能访问的是宿主机的端口噢。

检测

当你在宿主机的4000端口能够正常访问到gitbook项目主页,说明你已经成功运行了。

源码

我已经放到了Github里了,欢迎去看看。
直达通道

感谢一个名叫大桥下的蜗牛的docker高手指导