はじめに
現在、Dockerというサービスについて勉強しています。
Udemyでかめさんという方の「米国AI開発者がゼロから教えるDocker講座」という講座を受講しました。
とてもわかりやすい講座でしたが、動画教材のみでした。テキストを見返した方がわかりやすいと思いましたので、自分なりのとてもざっくりしたまとめを作成しようと思います。
Dockerとは
Linuxで動く仮想環境。コンテナ型の仮想化を行うことで、ハイパーバイザ型の仮想化と比べると軽量で、環境の持ち運びが可能になる。
後述するDocker fileやDocker imageを活用することで、サーバなど自分のローカルとホストが変わっても、同じ環境を作ることができる。
Dockerコンテナ
- 仮想化環境そのもの。
- Docker imageをもとに作成。(逆にDocker imageの更新も可能)
- 同時に複数作成することが可能。
- Docker imageによって起動するOSやインストールするアプリケーション、オプションが変わる。
- 例えばUbuntuにAnacondaをインストールして、Jupyter Notebookを実行する。など
Docker image
- Dockerコンテナを作るための元になるもの。
- Docker Hubにも保存されており、そこから取得したDocker imageからコンテナを作ることも可能。
- 複数のレイヤーから構成されており、レイヤーの数はDocker fileの内容で変化する。レイヤーを利用することでキャッシュができ、余計なリソースの消費を軽減する。
Docker file
- .txtファイルであるDocker imageの設計図。記載する書式はDockerfile リファレンスに詳しく書かれている。
- Docker fileを書き換えてビルドすることでDocker imageおよびDockerコンテナの中身が変わる。
- Docker Hubから取得できるDocker imageを元に記載することも可能で、自分に必要なアプリケーションのみダウンロードしたり、設定をいじったりすることが可能。
つまり…
- Docker Hubに目的に応じて不足ないDocker imageがあるなら、それを利用してコンテナを作成。
- 不足がある場合や、細やかなオプション設定が必要な場合はDocker fileを作成し、そこからDocker imageを立ち上げ、コンテナを作る。(これができると自由度が上がるため、Docker Fileの記法を知ることは超重要!)
- 関係性は下図参照
↑この図はPlantUMLで作成しました。
とりあえず今回はここまでです。次回の内容はDockerコマンドについて。
んー、まとめてみて改めてDocker自体の理解がなかなか難しいなあと感じますね。
コメント