この記事の内容
今業務で触っているアプリに色々不具合が出てきたのですが、土台になっているDocker(←他の人が設定)がよくわかリませんでした...そこで、ソースコードを読み解きながら改善の方法を探りました。本記事はその時に調べた内容のメモです。
なお、筆者のレベル感はCIツールのyamlは記事を参照しながらギリギリ構築でき、dockerは基礎書籍を1回読んだ程度です。
yamlの読み方
まず、yamlがなかなか読めませんでした...。新しく覚えたものはこちらに記しますが、それ以外は拙著ですがこちらをご覧ください。
&(アンパサンド)
アンカーというらしいです。&
でマークをつけて、*
で後で参照できます。
こんな感じで出てきました。
app: &app
# 色々な設定が続く
webpack:
<<: *app
上記の設定では、webpack
のビルドが始まる前に、app
の諸々の設定を読み込んでいます。
<<
読み方わかりませんでした...^^;
連想配列をマージする時にこの書き方をするらしいです。
app: &app
# 色々な設定が続く
webpack:
<<: *app
上記の例では、app
内の諸々の設定を webpack
下にマージしていますね。
▼参考記事
コマンドの読み方
docker-compose.yml
内に書かれていた、様々なコマンドの意味も調べました。
↓こちらの公式ドキュメント(?)の力も大きいです。
また、Docker
コマンドを丁寧にまとめてくださっている人もいました。これを見れば他の記事本とんどいらないんじゃないかと思います。
build
build: .
Dockerfile のあるディレクトリのパスを指定します。ここでは、カレントディレクトリにDockerfile
があるので、値に.
(ドット)を使用しています。
depends_on
コンテナの作成順序を決めます。例えばこのように書かれていたら
app:
# 諸々の設定
depends_on:
- webpack
- db
app
の諸々の設定はwebpack
やdb
の後に実行されます。
env_file
外部ファイルに書かれた環境変数をコンテナ内に取り込みます。
env_file: .env
例えば、↑上記の設定では.env
の中に書かれている環境変数をコンテナ内に取り込みます。
environment
コンテナ内で使用する環境変数を設定します。
environment:
- LANG=C.UTF-8
例えば、↑上記の設定では環境変数LANG
にUTF-8
を設定します。
image
使用するdockerイメージです。ローカルになければdockerhubからイメージがpullされます。
image: postgres:9.6
↑上記の例では、postgres:9.6
のイメージが使用されています。
stdin_open: true
tty: true
2つまとめて紹介します。
stdin_open: true
tty: true
stdin_open
とは標準入出力とエラー出力をコンテナに結びつける設定です。
tty
とは、擬似端末(キーボードによる入力)をコンテナに結びつける設定です。
ソースはこちら。キリの良いところでまた振り返ろうと思います。
volumes
これは、先の引用記事によると
パスをボリュームとしてマウントします。オプションとしてホスト側のパスを指定(ホスト:コンテナ)したり、アクセスモードを指定します(ホスト:コンテナ:ro)。
ということのようです。例えば
volumes:
- .:/usr/src/app:cached
だと、イメージ内の.
(カレントディレクトリ)に、Dockerの/usr/src/app
を紐づけます。そして:cached
はオプションです。
と書かれていて、公式ドキュメントの記載もなんだかお手上げだったので、後日ゆっくり理解することにします。
working_dir
特定のサービスの作業用ディレクトリを指定します。例えば
app:
working_dir: /usr/src/app
とあったら、app
が動作するディレクトリは/usr/src/app
になります。
...以上でdocker-compose.yml
内のわからない表現は制覇です!
これで、設定ファイルが読めます!やったー!!
で、結局不具合は直ったの?
...直りませんでした
読み解いた後、さらに記述に関する知識が必要だったので。。。。
引き続きデバッグを頑張ろうと思います!!