仮想インフラ環境を簡単に作成することができるDockerについて勉強中です。Dockerについて、「まずどういうものか知りたい」「深い説明はいらない」という方向けに簡単に説明します。(つーか これが限界)
Dockerとは
概要
コンテナの作成、稼働、削除などの管理を行うためのプラットフォームです。WebサーバやDBなど必要なコンテナを組み合わせることで容易に仮想インフラ環境を構築できます。
Dockerの良いところ
インフラ構築の簡便化、品質向上
- Dockerfileという設計図に従い自動で環境構築をしてくれる。
- 構築中に人の手が介在しないため、誤りが混入することなく安定したインフラ構築が可能となる。
再利用可能
- 作成した環境(イメージ)をそのまま再利用し別のインフラ環境を作成できる。
- 作成した環境(イメージ)を修正することで、少ない手間で新しい環境を定義できる。
ホストOS環境を汚さない
- Dockerコンテナはメモリ上で動作する。VMWareなどの仮想環境と異なりストレージ上にOS領域を確保する必要がない。停止すれば消えるため、気軽に試すことが可能。
Dockerを使う際に注意する点
コンテナ内の情報は揮発性
- Dockerコンテナはメモリ上で稼働するため、コンテナを終了すると内部情報が消えてしまう。(Dockerイメージから起動するため、前回稼働中の情報は持っていない)
ホストOSとフォルダ共有することで情報を残すことも可能
主な登場人物と関連
関連図
登場人物の説明
Dockerfile
環境構築を行うコードファイル。設計図。
Dockerfileを基にDockerイメージを生成するため、だれが作業しても同じイメージを生成できる。
Dockerイメージ
OSやアプリケーションのバイナリおよび実行コマンドをまとめた、コンテナのテンプレート。このファイルをメモリ上に展開、実行することでコンテナとなる。
DockerfileからDockerイメージが生成される。一度生成したイメージファイルは再利用することができるため、毎回Dockerfileをビルドする必要はない。
Dockerコンテナ
アプリケーション(プロセス)が動く箱のようなもの。
Dockerイメージからコンテナ(実体)が生成される。各コンテナは独立して動作する。一つのコンテナにつき一つのアプリケーション(プロセス)とするのが原則。
Docker Hub
Dockerイメージが公開されているクラウド。
コンテナ起動時、指定したイメージがローカル(または指定場所)にない場合は自動的にDocker Hubから探してダウンロードされる。
関連図上に記載していないが、Dockerイメージを生成する際にDocker Hubから取得してベースイメージとさせることも可能。
コンテナ間とホストOSの情報連携
各コンテナとホストOS間で以下の連携が可能です。
- コンテナ⇔コンテナ間(通信)
- コンテナ⇔ホストOS間(通信)
- コンテナ⇔ホストOS間(フォルダ共有)
①コンテナ⇔コンテナ間(通信)
インフラ環境に属するコンテナを一つの仮想ネットワークにまとめ、ネットワーク内のコンテナ間で相互に通信させることが可能です。(docker-compose)
②コンテナ⇔ホストOS間(通信)
ポートフォワーディングによりホストOSの特定ポートへのアクセスをコンテナに流すことが可能です。これによりコンテナで提供しているサービスを外部に公開することが可能です。
③コンテナ⇔ホストOS間(フォルダ共有)
コンテナとホストOSのフォルダを紐づけ、フォルダの中身を共有することが可能です。(コンテナ、ホストOSそれぞれの修正が相互に反映されます)
フォルダ共有することにより以下が可能となります。
- コンテナ内部の情報を保存(ログや状態など)
- ホストOS側の共有フォルダ内でHTMLやソフトを開発することにより、開発した結果をそのままコンテナに反映する。
まとめ
Dockerについて学習したことをアウトプットしてみました。Dockerとはどういったものか。を簡単に知りたい方の参考になれば幸いです。
まだまだ勉強中の身ですので、不備不足等ありましたらご指摘いただけますと幸いです。