Docker 快速上手:用 Docker + GitBook 写书

By Falcon of TinyLab.org

泰晓沙龙第二期 @ 2015/04/26

准备 GitBook 环境

安装 Docker

  • 以Ubuntu为例

    $ 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]
    
  • 安装镜像
    • ubuntu
    • npm + nodejs
    • gitbook + calibre(ebook-convert)
      $ sudo docker pull tobegit3hub/gitbook-server
      

完善 GitBook 环境

  • 启动 GitBook 环境

    $ sudo docker images | grep gitbook
    tobegit3hub/gitbook-server   latest d171079650c8
    $ sudo docker run -i -t tobegit3hub/gitbook-server /bin/bash
    
  • 安装 字体 和 Git
    $ apt-get install git
    $ apt-get install fonts-arphic-gbsn00lp
    

用 GitBook 写书

基础准备

GitBook 核心文件

  • GitBook 本身是一个 Git 仓库

    • .gitignore: 需要忽略的临时内容
  • 重要组件
    • README.md: 书籍简介
    • SUMMARY.md: 图书结构,文章索引
    • LANGS.md: 多国语言,每种一个目录
    • GLOSSARY.md: 词汇表
    • cover.jpg: 图书封面
    • cover_small.jpg: 小尺寸图书封面

GitBook 输出格式

  • 静态 HTML 页面

    • gitbook build ./ --output=./_book/
  • PDF
    • gitbook pdf

GitBook 在线预览

  • 启动服务

    • gitbook serve ./

Starting server …

Serving book on http://localhost:4000

  • 在线预览

    • 用浏览器打开: http://localhost:4000

杂项

SyntaxError:…/book.json:Unexpected token o

  • GitBook 调试

    • export DEBUG=true
  • GitBook 插件
    • Google Analytics
    • Disqus: Comments
    • Exercises

GitBook 图书实例

下载和编译图书

  • 下载

    $ git clone https://github.com/tobegit3hub/understand_linux_process.git
    
  • 编译
    $ cd understand_linux_process
    $ gitbook build
    $ gitbook pdf
    

在线预览图书

  • Docker 侧

    • 启动图书服务器

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

从 Docker 拷贝出 pdf

  • Docker 侧:确认 pdf 路径

    $ readlink -f book.pdf
    /gitbook/understand_linux_process/book.pdf
    
  • 主机侧:docker cp CONTAINER_ID:PATH HOSTPATH
    $ 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

  • 两个步骤

    • 获取容器挂载路径
    • 通过本地 cp 命令直接拷贝进去
      $ 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 目录到 Docker

    $ sudo docker run -i -t   -v /path/to/mybook/:/gitbook/   tinylab/gitbook /bin/bash
    

新建 GitBook 环境

备份/导出/导入容器

  • 保存容器为新镜像: commit

    $ sudo docker commit cf5925e tinylab/gitbook
    $ sudo docker images | grep tinylab/gitbook
    tinylab/gitbook latest 2106b9f7f675
    
  • 导出镜像文件: save/export
    $ sudo docker save tinylab/gitbook > gitbook.tar
    
  • 导入镜像文件到其他主机上: load/import
    $ sudo docker load < gitbook.tar
    

其他操作

  • 删除/杀掉容器

    • docker rm [-f] contaier_id
    • docker kill contaier_id
  • 停止容器
    • docker stop container_id
  • 启动容器
    • docker start container_id
  • 删除镜像
    • docker rmi image_id

新建 GitBook Dockerfile

# Dockerfile
FROM ubuntu:14.04
MAINTAINER Falcon [email protected]
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
FROM ubuntu:14.04
MAINTAINER Falcon [email protected]
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 ./
    
  • 更多参数: Cgroup

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

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

-m, –memory= Memory limit

参考资料


时间: 2024-09-30 03:42:55

Docker 快速上手:用 Docker + GitBook 写书的相关文章

Docker快速上手之部署SpringBoot项目

Docker是基于Go语言实现的云开源项目. Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装.分发.部署.运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”. Linux 容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的.将应用运行在 Docker 容器上面,而 Docker 容器在任何操作系统上都是一致的,这就实现了

Docker 快速上手系列(5): 网络基础配置和容期间通信

引子 一个web服务跑起来必不可少的两大功能模块:业务处理,数据服务,大型的web服务需要的组件更多,这往往需要多个容器,但是我们还需要这些容器之间可以进行网络通信,相互配合. Dokcer目前只支持宿主机与容器通信,容器与容器之间通信. 宿主机与容器的端口映射 在启动容器的时候,如果不指定对应参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的. 当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-p或-p参数来制定端口映射.当使用-p标记时,Docker会随机映射一个4900

Docker 快速上手系列(3): 仓库的概念及相关操作

Docker Hub 首先我们先区分下两个概念,一个是仓库,一个是注册服务器. Docker里仓库是集中存放镜像的地方,而注册服务器是放仓库的, 一个注册服务器可以存放多个仓库,例如: dl.dockerpool.com/ubuntu #注册服务器的地址是dl.dockerpool.com #仓库的名字是ubuntu 什么是Docker Hub,如果你用过Github,其实Docker Hub和Github 类似,前者是存放管理镜像的地方,后者是存放管理代码的地方.其实 现的方式是一样的. 可以

Docker 快速上手系列(2): 容器的概念及相关操作

什么是容器 简单的说,一个镜像想要跑起来需要一个载体,这个载体就是容器,前面的文章我们也提到了,容器加载镜像后会启动一个额外的可写文件层. 我们拿VM举例,VM虚拟的是整个操作系统,然后可以在里面跑引用,容器其实运行的是一个应用或是一组应用,并提供应用所必须的运行环境 创建一个容器 Docker启动一个容器是秒级别的,这也是比VM有有事的一点,所以这里允许用户随时创建,删除,启动,切换容器,这也是体现Docker"轻"的一点 #启动一个容器有两种情况 #第1种是基于镜像创建一个容器并启

Docker 快速上手系列(4): 数据卷,数据卷容器的概念及相关操作

引子 有些时候,我们的服务运行时必不可少的会产生一些日志,或是我们需要把容器内的数据进行备份,甚至多个容器之间进行数据共享,这必然涉及容器的数据管理操作. 容器中管理数据主要有两种方式: 数据卷 数据卷容器 数据卷是一个可供容器使用的特殊目录,它绕过文件系统,可以提供很多有用的特性: - 数据卷可以在容器之间共享和重用 - 对数据卷的修改会立马生效 - 对数据卷的更新,不会影响镜像 - 卷会一直存在,直到没有容器使用 #(类似linux下的挂载(mount)) 创建数据卷 在用Docker ru

利用Docker快速部署Oracle环境

工作中需要频繁使用Oracle环境,但是每次搭建起来比较消耗时间,本想通过虚拟机模板的方式来快速安装oracle vm,但是每次改ip等环境也很耗时,因此想到docker中有没有已经做好的images,这样就能快速获得Oracle环境. [email protected] rac1:docker search oracle INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/wnameless/oracle-xe

用Docker快速打造企业Paas云计算平台

用Docker快速打造企业Paas平台 课程特色 Docker就像一场森林大火重新创造了一个全新的云计算领域,Docker作为云计算分布式软件工程的革命正在深刻地改变传统分布式系统的开发.测试和部署.其影响的神速远胜于云计算第一代技术OpenStack等:Docker不仅是历史上最流行的开源项目之一,而且也从根本上改变了人们构 建应用程序的思维方式.它可以把程序及依赖的二进制文件.第三方库等封装在一起,运行在任何安装 Docker Daemon 的服务器上,它有望成为未来软件自动化部署的标准.

运维人员的解放----Docker快速部署

Docker是一个用了一种新颖方式实现的超轻量虚拟机,在实现的原理和应用上还是和VM有巨大差别,专业的叫法是应用容器(Application Container).(我个人还是喜欢称虚拟机) Docker应用容器相对于 VM 有以下几个优点: 启动速度快,容器通常在一秒内可以启动,而 VM 通常要更久 资源利用率高,一台普通PC 可以跑上千个容器,你跑上千个 VM 试试 性能开销小, VM 通常需要额外的 CPU 和内存来完成 OS 的功能,这一部分占据了额外的资源 因为VM 的 Hypervi

结合Docker快速搭建ELK日志收集分析平台

结合Docker快速搭建ELK日志收集分析平台 2017-03-27 09:39 阅读 172 评论 0 作者:马哥Linux运维-Eason ELK Stack ELK (Elasticsearch + Logstash + Kibana),是一个开源的日志收集平台,用于收集各种客户端日志文件在同一个平台上面做数据分析. Introduction Elasticsearch, 基于json分析搜索引擎Logstash, 动态数据收集管道Kibana, 可视化视图将elasticsearh所收集