はじめに
CYBIRD Advent Calendar 2024の3日目担当の@tomoko_ishizakaです。
2日目は@chikako_ikedaさんの「Android15の録画検出機能を試した話」でした。
3日目のこの記事では、Dockerについてまとめてみました。
概要
『Docker』について、コンテナ・仮想化、そんなフワッとしたイメージを持っている方は多いと思います。
ただ私自身、Dockerを使ってたくさん作業してきたはずなのに、いまいち掴み切れていないなと感じていました。
そこで一度全体像を抑えておこうと思い、調べたことをまとめました。
結論:Dockerとは
Dockerとは、
『コンテナと呼ばれる仮想動作環境を使って、環境構築を楽にしてくれるツール』
です。
※環境構築 = MySQLやLaravelなどの色々なソフトを用意し、適切なバージョンに設定したり、その他開発に必要なものを揃えること
とはいえ、コンテナや仮想という言葉はまだわかりにくいため、イメージ図付きで整理してみました。
仮想動作環境...って何?
仮想でない環境(物理環境)の場合は、コンピュータのOSに直接必要なアプリを入れて、開発しますが、『同じ環境を別の人のコンピュータにも用意したい!』という場合に非常に面倒です。
そこで、VMware や Virtualbox のような仮想化ソフトを使うことで、コンピュータの中に
まるでもう1台コンピュータがあるかのように振る舞わせて、管理を楽にすることができます。
(自分のコンピュータ自体にアプリを入れないので、複数バージョンのアプリで散らからずに済みます。また、他の人に共有するときもマシンをエクスポートしたファイルを共有すれば同じ環境を簡単に再現できます。)
ただし、OSごと仮想マシンを作るため、重くなるというデメリットがあります。
そこを解消したのがDockerです。
Dockerは、OSはホストマシン(手元にある物理的なコンピュータ)のものを使い、アプリやその依存関係などの情報をコンテナとして動かしているため、軽く動かせます。
(厳密にはOSっぽいものはコンテナに含まれているものの、ホストマシンのカーネルを使っているから軽いらしいです。)
具体的にはどうやって仮想環境を作っているの?
仮想マシンの設定などは、Dockerfileというもので指定します。
また、設定項目のうち少しわかりづらいものの詳細を以下にまとめました。
FROM:コンテナの親イメージを指定。なお、Dockerfileは必ずFROMから始まる必要がある。公開リポジトリから自由に指定できる。
ENV:環境変数を指定。このDockerfileは例のため使っていないが、以降このファイル内でNODE_ENVという変数が使えるようになる。
WORKDIR:作業ディレクトリの指定。以降のRUNなどはここで指定した場所で実行される。
EXPOSE:リッスンするポートを指定。この指定だけでは実際にはポートは開かれないので、docker run時に指定が必要。このポートは、コンテナ側のポートなので、ここを3000指定にして、ホスト側は3001で接続するように(docker runコマンドなどで)設定すると、3001にアクセスすればコンテナの3000に届くようになる。
※なお、EXPOSE設定については、ネットワークの設定はこの他にも色々あるので必ずしもこの設定が守られるわけではないようです。
おわりに
今回は、DockerやDockerfileをメインに調べてみました。
コンテナ同士のネットワーク設定やポート管理など、まだ理解しきれていない部分が多々あるので、今後も機会があればまとめていきたいと思います。
明日のCYBIRD Advent Calendar 2024 4日目は、@kyukkyu81さんの「テキスト生成AIに極小コードでひたすら励まし癒してもらう(無料でな)」です。
お楽しみに!