業務で「docker-compose up
で立ち上げて」とか言っていますが本当のところあまり理解できていません…。
バックエンドの方が用意してくださった開発環境がDockerを利用してできているので言われるがままやってきましたが、そろそろ本当に恥ずかしいな…と思ったので基礎ぐらいは理解しておきたいと思います。
Dockerってなに?
Docker社によると「コンテナを使ってアプリケーションを構築、共有、実行する」と説明があります。
アプリケーションに必要なものをパッケージにして誰でも同じ環境を構築できるイメージでしょうか。
仮想化について
コンテナ技術も仮想化技術の一種です。
仮想化についてはいろいろ記事を読みましたが1台の物理サーバー上に用途などに応じて分割や統合する技術。
仮想化が普及していない時代はウェブサーバー、メールサーバー、ファイルサーバーなど用途ごとにサーバーが必要になって増え、それに伴って費用や管理が大変になる状態だったのが1つのサーバー上で同じことが可能になったのが仮想化の技術だそうです。
ニフクラさんの記事がわかりやすいと思いました。
比較に出てくる仮装マシンとコンテナについて
仮装マシン(以後Vertual Machine:略VM)はPCの中にもう一台PCがあるイメージが近いでしょうか…。
Macの中でVMによってWindowsを動かすということをした記憶があります。
VMはOSやアプリケーション、それを動かすのに必要なライブラリなどが含まれるものです。
対してコンテナはOSを共有し、その上にアプリケーションを実行する環境があるのでVMとことなりOSやアプリケーションを実行するためのライブラリが共通なためVMを使うよりも軽量なのが特徴です。
どうやって使うの?
Dockerfileを使用してコンテナイメージを作成します。
コンテナイメージは、コンテナを作成するための指示書で、Dockerfileにはコンテナイメージを作成するためのスクリプトが記述されたファイルです。
docker build
コマンドを実行すると処理が実行されます。
コンテナを起動するにはdocker run up
を実行します。
Docker Composeについて
複数のコンテナを起動する場合に使われるComposeというものがあります。
その場合docker compose up
のコマンドを実行することで全体を起動し、実行します。
設定はdocker-compose.yml
に定義するそうです。
docker run up
を実行して一つずつ立ち上げることも可能だけど、コンテナに依存関係(起動の順番)があった場合にymlに立ち上げの順番や設定を記述できるので複数コンテナの場合はComposeを利用するのが良さそうです。
エラーになったときのデバッグコマンド
もしこれからDockerを使うことになって、何かわからないけど環境が立ち上がってないぞ…ってなったときに実行するコマンドです。
docker ps
コマンドを実行すると下記のような表示がターミナルに表示されます。
引用: https://matsuand.github.io/docs.docker.jp.onthefly/engine/reference/commandline/ps/
もしコンテナが立ち上がっていない場合は「STATUS」の項目にEXITと表記されるはずです。
となればerrorの詳細を確認するステップに移ります。
optionも指定することが可能なので利用する場合は確認してください。
docker logs
コンテナを立ち上げた時から現在のログが出ます。
開発中にエラーが発生して画面が表示されなくなった場合はlogsにエラー内容が表示されるはずです。
docker ps
と同様にoptionが設定できるので適切なoptionを付与してください。
開発中でエラーがでたならずっとログを出し続けるdocker logs -f
なんかが良いかもしれません。
まとめ
理解が間違っていたらぜひコメントをいただけると大変嬉しいです!
今後自分で環境を立てることは業務ではないかもしれませんが、自分が何をしているのかを理解して問題が発生した時に修正カ所がわかることで業務効率は上がると思っています。
Dockerに限らず自分が業務で扱っているものに関してはわかりやすく人に説明できるエンジニアであり続けたいなと思います。