はじめに
どうも、初めまして。エンジニア 2 年目となる ryuu1row です!
開発でコンテナを使ってはいるが、ざっくりとだけ理解していて言語化できなかったりしますよね。
現に、自分はその状態に陥っていました。
なので、自分なりに docker をレベル1からレベル2になるくらいの程度で理解を深めるために、まとめました!
対象読者
- コンテナ技術をなんとなく使っているが、勉強したことのない方
- docker について知りたい方
ゴール
- docker について、少し理解する。
- 一歩成長する程度
コンテナ
コンテナとは
まず、コンテナ技術とは、1つの共有された OS 上で複数の独立したアプリケーションの実行環境を作成する技術です。より詳しく言えば、アプリケーションの動作に必要な OS の基本環境(カーネル)を docker engine のようなコンテナエンジンを通して、コンテナ同士が共有できるようにすることで CPU やメモリなどのハードウェアのリソースと分離して仮想的な環境を作り出せることです。
メリット
コンテナ技術のメリットはいくつかあります。
仮想化マシン技術(VM)と比べ、
- ゲスト OS をホスト OS 上で立ち上げる必要がないため、コンテナの方が実行環境が軽く、使用容量も少ない
- 管理対象がホスト OS に向くので管理がしやすい
- コンテナ単位でアプリケーション実行ができるため、ポータビリティが高い
Docker
docker images
- コンテナの設計図のようなもの
- images が build されてコンテナが立ち上がる
- Tag 付けすることができる(image の version など管理出来たりする)
- layer 構造になっている。
- 一度作成された image は編集不可能(read only)
volume, bind mount, tmpfs
- volume
- 動的データを扱いたいときに使用 → バックエンドだと DB
- ホストマシン上に自動生成される指定ディレクトリ(/var/lib/docker/volume)をコンテナにマウント
- bind mount
- 同様に volume でなくマウント元ディレクトリを指定することもできる(bind mount)
- bind mount して開発すると自動生成されるものも git や docker 管理対象になるため、.gitignore, .dockerignore をうまく使いましょう!
- tmpfs
- ホストのメモリ領域もマウントすることができる
network
-
複数コンテナ間での通信が可能
-
Docker ではデフォルトで存在するネットワークを管理
-
Bridge ネットワーク(コンテナ間の通信)
-
Host ネットワーク(host driver 使用、ポートバインド)
-
None ネットワーク(ネットワーク・インターフェースをなくす)
-
独自ネットワーク(コンテナ名によって新しくネットワーク作成可能、docker deamon が組み込み DNS を機能し、名前と IP を紐づけてくれるっぽい)
-
自分自身うまく使えていない機能の一つ
docker compose
- コンテナ間の関係や環境変数などを定義できる
- Docker CLI をつかってポチポチネットワークやボリュームを定義することもで桐生が、これを使えば一発で環境構築できる優れもの
- 使い方を学べば小規模な開発であるならばパパッと開発環境の構築可能
最後に
最後まで読んでいただきありがとうございます。
今回、本当に軽くまとめてみました。
自分もわかっていない部分があるので、ご指摘、アドバイス等ある方はコメントお願いします!
参考文献