LoginSignup
5
4

More than 3 years have passed since last update.

Rust製ドキュメントツールmdbookのコンテナ

Last updated at Posted at 2019-05-19

動機

  • markdownでドキュメントを書く時に、ある程度の量になった場合、章立てを見ながらファイル参照したくなる。
  • このようなときに記述しやすくて、軽くて、パッケージを入れれば数式や図の記述もできる mdBook というものがあることを知った。
  • コンテナとして用意して使おうとしたが、オプションの指定でちょっとだけ困ったので、メモとして残しておこうと思う

環境

  • Ubuntu 18.04
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.2 LTS"
$
  • Docker-ce 19.03.0
$ sudo docker --version
Docker version 19.03.0-beta4, build e4666ebe81
$
$ dpkg -l | grep docker-ce
ii  docker-ce                             5:19.03.0~1.4.beta4-0~ubuntu-bionic         amd64        Docker: the open-source application container engine
ii  docker-ce-cli                         5:19.03.0~1.4.beta4-0~ubuntu-bionic         amd64        Docker CLI: the open-source application container engine
$
  • ファイル構成

tree コマンドの結果は、以下のとおり。treeコマンドがなかったら「sudo apt install tree」しておく。

tree1.png

各ファイルの中身

  • Dockerfile

mdbookを alpine で使う場合、musl用の*.tar.gzが用意されている。素晴らしい。
「自分でコンパイル」を覚悟していたのでこれはうれしい。

# Dockerfile
FROM alpine:3.9

# proxy

# resource
ARG mdbook_dir=/home/mdbook
ARG mdbook_tgz=mdbook-v0.2.1-i686-unknown-linux-musl.tar.gz
ARG mdbook_url=https://github.com/rust-lang-nursery/mdBook/releases/download/v0.2.1/${mdbook_tgz}

# build
RUN apk update && \
    apk --no-cache add curl && \
    apk --no-cache add make sudo tar bash git unzip && \
    rm -rf /var/cache/apk/*

WORKDIR ${mdbook_dir}
RUN curl -L ${mdbook_url} -o ${mdbook_tgz} && \
    tar xf ${mdbook_tgz} && \
    chmod +x ./mdbook && \
    mv ./mdbook /usr/local/bin/mdbook && \
    mdbook init --theme && \
    rm ${mdbook_tgz}

COPY book.toml .
COPY src/ src/

EXPOSE 3000

CMD ["mdbook", "serve", "-d", "/home/mdbook/book"]

  • Makefile

コンテナ起動時のポイントは、dockerコマンドの--hostnameオプションで指定したホスト名とmdbookコマンドの-nで指定したホスト名をそろえること。dockerコマンドの-pで指定したコンテナ側ポート番号とmdbookコマンドの-pで指定したポート番号が同じこと。

# Makefile
src_dir=/home/user1/work/mdbook/src
name := mdbook-alpine
tag := $(name):1.0
port := 3300

build:
        sudo docker build -f ./Dockerfile . -t $(tag)

run:
        sudo docker run -it --rm -d --name $(name) \
                -p $(port):3000 --hostname="mdbook" \
                -v $(src_dir):/home/mdbook/src $(tag) \
                mdbook serve -d /home/mdbook/book -p 3000 -n mdbook

rm:
        sudo docker rm $(name) -f

ps:
        sudo docker ps -a

img:
        sudo docker images

  • book.toml

タイトル、著者名や、mathjax, mermaidなど併用するツールの設定を好みに応じここに記載する。

[book]
authors = ["Yuki Niikura"]
multilingual = false
src = "src"
title = "Sample mdbook"

[output.html]
mathjax-support = true
  • src/SUMMARY.md

サンプルのため、章立ては適当です。


# Summary

- [Chapter 1](./chapter_1.md)
    - [Section_1](./section_1.md)
        - [Subsection_1](./subsection_1.md)
    - [Section_2](./section_2.md)

  • chapter_1.md 他3ファイル

サンプルのため、中身は適当です

$ cat chapter_1.md
# Chapter 1
resources
- [mdBook document](https://rust-lang-nursery.github.io/mdBook/index.html)
- [mermaid](https://github.com/badboy/mdbook-mermaid)
$
$ cat section_1.md
# Section_1
This is Section 1.
$
$ cat section_2.md
# Section_2
This is section 2.
$
$ cat subsection_1.md
# Subsection_1
This is sub section 1.
$

利用方法

  • コンテナのビルド、実行
$ make build
$ make run
  • ブラウザからの参照

コンテナのホストに、実行時に指定した3300番でアクセスし、ドキュメントが見れることを確認する。

mdbook-example.png

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4