Docker Composeの使い方
mdbook-ja-templateではコマンド実行のためにDocker Composeを使用しています。
mdbook-ja-templateのdocker-compose.yml
の内容は以下のとおりです。
version: '3.9'
x-service:
&default-service
build: docker
image: mdbook
init: true
volumes: [".:/book:rw"]
network_mode: "host"
user: "${UID}:${GID}"
services:
mdbook:
<<: *default-service
entrypoint: ["mdbook"]
command: ["serve"]
mdbook-mermaid:
<<: *default-service
entrypoint: ["mdbook-mermaid"]
mdbook-linkcheck:
<<: *default-service
entrypoint: ["mdbook-linkcheck"]
markdownlint:
<<: *default-service
entrypoint: ["markdownlint"]
textlint:
<<: *default-service
entrypoint: ["textlint"]
exec:
<<: *default-service
entrypoint: []
コンテナ内のコマンドを直接実行する
コンテナ内のコマンドを直接実行する場合は、Docker Composeを使用してください。
UID, GIDの設定
Docker Composeの起動時は現在操作しているユーザのユーザIDとグループIDを環境変数として与える必要があります。 コンテナ内のプロセスが生成するファイルの所有者をrootではなく、現在のユーザにするためです。
コンテナ内でmdbook help
コマンドを実行する場合は、以下のようにDocker Composeを実行してください。
UID
, GID
は環境変数ではなくシェルの変数であるため、Docker Composeプロセスへと通知するために環境変数として明に設定する必要があります。
env UID=${UID} GID=${GID} docker compose run --rm mdbook help
.env
ファイルを用意することで、コマンドラインでUID
/GID
を設定することを省略できます。
以下コマンドを実行することで.env
ファイルが生成されます。
すでに.env
ファイルが存在する場合、内容は上書きされてしまうので注意してください。
make setup-docker-compose
# => .envが生成される
docker compose run --rm mdbook help
# => UID, GIDの設定は暗黙的に行われる
コマンドの実行
以下の形式でコマンドを実行できます。
docker compose run --rm <コマンド名> <引数>
コマンド名には以下を指定できます。
mdbook
: mdbookコマンドを実行するmdbook-mermaid
: mdbook-mermaidコマンドを実行するmdbook-linkcheck
: mdbook-linkcheckコマンドを実行するmarkdownlint
: markdownlintコマンドを実行するtextlint
: textlintコマンドを実行するexec
: 引数で指定されたコマンドを実行する
コンテナ内でbashの会話型セッションを開始する場合のコマンド例を以下に示します。
docker compose run --rm exec bash