【Docker】Dockerでよく分からんかったとこ

プログラミング

ご無沙汰しています。

6月頭にブログやるぞお!と意気込んだはいいものの、はや7月も最終日…

月1回くらいは更新しておきたいんで、駆け込み更新してみます。

ここ1.2ヶ月の間なかなかしっくり来なかったDockerについて、最近ようやく少し分かったような気がするのでまとめてみます。

Dockerとは

省略。笑

下記Qiitaの一連の記事がとても分かりやすかったのでおすすめです。

【図解】Dockerの全体像を理解する -前編-
【図解】Dockerの全体像を理解する -中編-
【図解】Dockerの全体像を理解する -後編-

これ見て「Docker完全に理解した」なんて一瞬思ったものの

実際に触ってみたらよく分からんポイントが結構あったので、(いるか分からんけど)同じようなポイントでモヤモヤしている方の参考になれば、とここに書き残します。

(あるいは過去を振り返りたい未来の自分へ)

ホストOSとカーネルを共有する?

実際にDockerは、ホストOSのカーネルを共有する
-Wikipediaより

まず引っかかったのが、色んなところで目にする「コンテナがホストOSとカーネルを共有する」ってこと。

ホストOSって(自分の場合)MacOS???

Windowsユーザーとどうコンテナを共有するの…??

Docker分からん…

-> そもそもの構造の理解が間違っていました。

MacOSはLinuxじゃないのでDockerは起動出来ません。
なのでDocker for Macというアプリケーションをインストールした時に、
準仮想化技術を使ってシンプル高速なLinuxを裏で仮想マシンとして動かして、その仮想マシン内でDockerを利用しています。
-teratailより

DockerはLinuxのコンテナ技術を応用したものなので、そもそもLinux上じゃないと動かない!

なのでDocker for Macの裏側で仮想Linuxを立ち上げている!!

…つまり上で言っている「ホストOS」ってのはMacOSやらWindowsやらのことを言っているのではなく、Docker for Mac や Docker for Windows (厳密には hyperkit や hyper-v ) で立ち上げた仮想Linuxのことを言っていたのでした!!(スッキリ!!)

あれ、このイメージ、OSなに??

次に引っかかったのはDocker Hubで共有されてる各種イメージを見た時。

仮想Linuxを立ち上げてその上に各種コンテナを載せていくのは分かった。

ほんでDocker HubからPHPとかPostgreSQLとかApacheとかのイメージ引っ張って来て簡単に使えるのも分かったけど…

これコンテナの中のOSって何なの?

なんかそれぞれapt-getとかapk addとか、違うディストリビューションっぽいコマンド打ってるけど、大丈夫なの??

Docker HubでDockerfileのコマンド見れば分かるかな、って思ったけど、これナニ???

postgresqlのイメージ

-> まずコマンド、見るべき場所が違いました。

Dockerfileはここ!

Dockerfile

ほんでGitHubに飛んで覗いてみたら…

Debian

バッチリDebianって書いてあった!

他のサービスは違うディストリビューションだけど大丈夫なんか…??って疑問も…

実はLinuxは共通仕様としてマシン語で書かれている実行ファイルのフォーマットが同じ形式です。
違うディストリビューションでも動作し、適切な依存ライブラリを渡してやれば動作します。
-teratailより

だそうです!!(まだフワッとしか分かってない)

その他引っかかったとこ

コンテナ間でのファイル共有ってどうやんの??

Dockerのことをよく知らずにLaradockから入ってしまったもんだから、workspaceに入ればWEBサーバーのログも見れるしDBもいじれるしファイルも触れるのが当たり前だと思ってた。

でもいざ自分でDockerfileとかdocker-compose.yml書いてみよう思ったらどうすればいいか全く分からん…

-> ローカルの1ディレクトリにそれぞれのコンテナからマウントする。

これだけ。

何故か1コンテナ1ボリューム、みたいな考え方をしていたため、この発想がなかなか出てこなかった…(お粗末)

1コンテナ1プロセス??

「コンテナ設計は1コンテナ1プロセスが理想」らしい。

WEB、アプリケーション、データベースサーバーをそれぞれ別コンテナで分けて、通信させるのはなんとなくイメージつくけど…

gitとかcomposerとかnode.jsとかどうしたら…

-> あくまで理想論。厳密に1コンテナ1プロセスは無謀。(TechRacho参照)

正直そんなに引っかかったわけじゃないけど、コンテナ設計するに当たってどこまでコンテナ分割したらいいんだろ…?としばらく悩んでたのでピックアップ。

まとめ

初めてDockerに触れた時は、「なんだかお手軽で簡単そうじゃん!」なんて思ったけど、結局Apache + PHP-FPM + PostgreSQL + workspace (composer, node.js, git, postgresql-client...)の4つのコンテナ構成作るのに1ヶ月近くかかってしまったりと、なかなか自分のモノにできなかったなあ。

Dockerの教材漁ってたけど、結局Dockerって言うよりはネットワーク周りとかLinuxの知識が全然足りてなかった気がする。

この1.2ヶ月、Dockerにめちゃめちゃ時間吸われたけど、まあその辺の知識も多少はついたと思うから良しとしよう…笑

以上、誰宛のなんのための記事か分からなくなったけど、誰かのお役に立てたら嬉しいです。

間違いとかあったらご連絡頂けるともっと嬉しいです。

また何か思いついたら随時更新してみようと思います。

コメント

タイトルとURLをコピーしました