Dockerを更に使いこなすため、Dockerコンテナ内のディレクトリ構造を分析してみた。(Treeコマンドが使えないようで、使えるように設定するのも手間なので、すべてマニュアルでディレクトリをのぞきながら階層を記録した。)
Dockerを使いこなすためには、どのディレクトリをバインドマウントさせるか?どのディレクトリをボリュームマウントさせるか?またどのディレクトリがパスが通っていてシェルスクリプト(.sh)を置くのに最適か、など、ローカル側のOSだけではなく、コンテナ側のディレクトリ構造の絵姿についてもある程度の理解が重要になってくる。
なお、分析に当たってはLinuxのFHS(Filesystem Hierarchy Standard)の理解がとても重要になってくるが、このFHSについては他に良記事が沢山あるためそちらを参照願いたい。
下記ディレクトリは見やすくするためにアルファベット順にはしておりません。また、GolangとPosrgreSQLは通常別々のコンテナにインストールされることが多いかと思いますが、紙面の都合上、マージして記載しています。
root@89ff808980e1:
├─bin
├─dev
├─go # --------------------------> Golangをインストールした場合に生成されるディレクトリ
| ├─bin
| | └─sqlc (:file)
| ├─pkg
| | ├─mod
| | └─sumdb
| | └─sum.golang.org
| | └─latest
| └─src # ----------------------> バインドマウント
├─lib
├─media
├─opt
├─root
├─sbin
├─sys
├─usr
| ├─bin
| ├─games
| ├─include
| ├─lib
| ├─libexec
| ├─local
| | ├─bin # ------------------> シェルを置くのに最適なディレクトリ(パスが通っている)
| | ├─etc
| | ├─games
| | ├─go
| | ├─include
| | ├─lib
| | ├─man
| | ├─sbin
| | ├─share
| | └─src
| ├─games
| ├─include
| ├─lib
| ├─libexec
| ├─local
| ├─sbin
| ├─share
| └─src
├─boot
├─home
├─lib64
├─mnt
├─proc
├─run
├─srv
├─tmp
├─docker-entrypoint-initdb.d ---> 公式postgresqlをイメージに使用した場合に生成されるディレクトリ(バインドマウント)
├─etc
| └─postgresql ----------------> 公式postgresqlをイメージに使用した場合に生成されるディレクトリ(バインドマウント)
| └─postgresql.conf
└─var
└─lib
└─postgresql -----------> 公式postgresqlをイメージに使用した場合に生成されるディレクトリ
└─data ---------------> ボリュームマウント(ここにDBのバイナリが格納されている)
これまではREADME.mdにメモがてら書き溜めていた情報を整理抽出し初投稿しました。
投稿するにあたって普段、様々な技術者さんからアドバイスをいただいており、支えてくださってる方々には感謝の念にたえません。
また、もし間違いなどがありましたらご指摘いただけますと幸いです。