データサイエンスやプログラミングで初心者がよく躓くのが、仮想環境の構築。仮想環境の構築には、様々な設定や依存関係を理解する必要があります。そんな時におすすめなのが「Docker」を使った「コンテナ型」と呼ばれる環境構築方法です。
Dockerの活用には様々なメリットがあり、今後もさらにDockerの需要が高まっていくことが予想されるでしょう。
そこで、本記事ではより効率的にDockerを使った環境構築を学習できるように、現役データサイエンティストでの実務経験があるかつ、AI・統計系の資格講師でもある筆者がDocker学習に最適なおすすめ参考書を紹介していきます。
監修者
經田 原弘
東京大学大学院新領域創成科学研究科複雑理工学専攻修了。大学時代は3次元の医療データの平滑化処理を研究テーマとし、大学院時代はJAXAと協業し、月探査機かぐやの衛星データから、月面上の水の存否について調査していた。新卒では株式会社リクルートにてレコメンドシステムの開発等に従事し、現在は製造業系スタートアップにてデータサイエンティストとして勤務。応用情報技術者試験・E資格合格者。
Dockerとは
参考書を紹介するにあたり、まずは「Dockerとはなにか」「引き合いとして出される『仮想化』とはどう違うのか」を整理していきましょう。
Dockerは、米国Docker社が提供するコンテナ型仮想環境実現ツールで、アプリケーションの開発・実行するための仮想環境を作ることができます。この構築環境のことをコンテナといいます。
アプリケーションとその必要な全ての依存関係(ライブラリ、環境変数、設定ファイルなど)をひとつのパッケージ(コンテナ)にまとめ上げることを指します。このパッケージ化により、アプリケーションはどんな環境でも一貫して動作します。
コンテナ型と仮想マシンとの違い?
Dockerのコンテナ型とよく比較されるのが仮想化(仮想化マシン)です。次にしっかりとDockerのメリットを理解するために、ここでは仮想化(仮想化マシン)と比較して、コンテナ型の特徴を確認してみます。
項目 | コンテナ化 | 仮想化 |
---|---|---|
リソース | 軽い (全てのコンテナがOSを共有するため、リソースの使用を抑えることができる) | 重い (各仮想マシンはそれぞれ全体のOSを必要とする) |
起動時間 | 短い (OSを共有しているため、コンテナの起動は非常に早い) | 長い (全体のOSを起動する必要があるため) |
共有のしやすさ | 共有しやすい (コンテナはアプリケーションとその依存関係を含むため、異なるマシン間で簡単に移動できます) | 共有しやすいとはいえない (仮想マシンは完全に独立しているため、移植性は高いものの、そのサイズが大きいため、移動が困難) |
管理のしやすさ | 管理しやすい (各コンテナはアプリケーションとその環境を一緒にパッケージ化しているため、管理が容易です。また、各コンテナは互いに隔離されています) | 管理しやすいとはいえない (全体のOSとアプリケーションをそれぞれ管理する必要がある) |
Docker(コンテナ型)と仮想化(仮想マシン)の違いを端的にいうなら、仮想化は「物理的なコンピュータを複数の仮想マシンに分ける」こと、そしてコンテナ化は「一つのOS上で独立したアプリケーションの環境を作り出す」こととなります。
リソース消費の少なさ・起動時間の短さに加え、コンテナにはアプリケーションとその動作に必要な全てが詰まっているため、自分のパソコンでも、友達のパソコンでも、学校のパソコンでも、同じように動作するようになります。
結果として、早く、簡単に環境構築ができるようになり、共有もしやすくなるため、IT・データサイエンス実務での開発に欠かせないツールとなっています。
参考書の選び方
Dockerを学べる本は非常に多く出版されています。自分に適した参考書を見つけるために、「選び方」を確認しておきましょう。まずは参考書を選ぶ際に必ずチェックしておきたい「3つのポイント」をご紹介します。
- 自分のレベルに適している
- Linux・ネットワークの知識も併せて学習できる
- 学びたい目的に合っているか
ポイント①:自分のレベルに適している
Dockerの学習本は数多くあり、超入門レベルから専門技術書レベルまでさまざまな本が売られています。
初学者向けと謳いながらも、高度なネットワークの知識を要したり、専門的な説明が多い本もあり、自身のレベルと参考書のレベルとマッチしているかをよく吟味する必要があります。
自身のDockerスキルを判断するヒントとして、編集部ではDockerスキルを3段階に分けた表を作成しました。
Dockerのレベルとスキルセット
段階 | 必要となるスキルセット |
---|---|
初級者 | - Dockerの基本的な理解(コンテナとは何か、なぜ重要かなど) - Dockerの基本的なコマンドの使用法(build, run, ps, stop, rmなど) - Dockerfileの基本的な書き方と理解 - イメージとコンテナの違いの理解 |
中級者 | - Dockerネットワーキングの理解 - Docker Composeを用いたマルチコンテナアプリケーションの管理 - Dockerボリュームを用いたデータの永続化 - ベストプラクティスの理解と適用(小さなイメージの作成、Multi-stage buildなど) |
上級者 | - Dockerを使ったCI/CDパイプラインの構築と適用 - Docker SwarmやKubernetesを使ったコンテナオーケストレーションの理解 - Dockerセキュリティの理解とベストプラクティスの適用 - 大規模なDocker環境の管理と最適化 |
ひとつひとつを正しい順番で段階的に学んでいくと学習効率がよくなることが期待できるでしょう。上記表のなかでピンとくる単語があれば、習熟レベルがどれくらいかのひとつの指標になります。
例えば、「CI/CDパイプラインの構築」が何かがわからないようであれば、まだ中級者ともいえます。一方、「Dockerの基本的なコマンドの使用法(build, run, ps, stop, rmなど)」がわかっていれば、もう中級者レベルの参考書に進んでも問題ないと捉えることができます。
ポイント②:Linux・ネットワークの知識も併せて学習できる
上記のレベル分けで中級レベル以上を目指す方はLinux・ネットワークの知識が必要になるでしょう。
Linuxの知識が必要な理由
DockerはLinuxカーネルの機能を活用してコンテナ化を実現しているので、Linuxの基本的な仕組みやコンポーネント(cgroups、namespacesなど)に関する知識があるとDockerの応用に役立ちます。
たとえば、リソースの制限と管理を行うLinuxカーネル機能であるcgroupsの活用に役立ちます。Linuxのcgroupsの仕組みを活用することで、Dockerコンテナのリソース管理やパフォーマンスチューニングができるようになります。
ネットワークの知識が必要な理由
Dockerコンテナはネットワーキングを介して相互に通信し、外部とのやり取りを行っています。
そのため、ネットワークの基礎知識(IPアドレス、ポートフォワーディング、ネットワークプロトコルなど)を理解することで、Dockerコンテナのネットワーク設定や接続の管理が容易になります。
たとえば、トラフィックの制御やルーティングの最適化、過剰使用の制限など、ネットワークの側面を正確に設定することができるようになります。
適切なネットワーク設定ができるようになると、応答性やスループットの向上、ネットワークの帯域幅やリソース使用量の最適化などができるので、ネットワークパフォーマンスの最適化やリソース効率化を実現できます。
このようにDockerの基礎であるLinux・ネットワークの知識も併せて学習すると、中級レベルの活用が容易に行えるようになるでしょう。
ポイント③:学びたい目的に合っているか
Dockerでできることを上述しましたが、Dockerを学習するといってもできることが幅広いため、Dockerの基礎知識を学習したいのか、コンテナ構築を学習したいのか、CI/CDパイプラインを学習したいのか、目的に合った参考書を選ぶことが重要です。
下記はDockerの参考書を目的別にピックアップし、すみわけを簡単に記載した表になります。
目的 | 本のタイトル |
---|---|
Dockerの基礎を網羅的に学習したい | 『仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん』 『たった1日で基本が身に付く!Docker/Kubernetes超入門』 |
コンテナ構築を学習したい | 『さわって学ぶクラウドインフラ docker基礎からのコンテナ構築』 『15Stepで習得 Dockerから入るKubernetes コンテナ開発からK8s本番運用まで』 |
アプリケーションを作る過程を学習したい | 『Docker/Kubernetes 実践コンテナ開発入門』 |
コンテナ構築の実務での応用を幅広く学習したい | 『Docker実践ガイド 第2版』 |
上記表を参考に学習の目的に応じた参考書を選ぶようにしましょう。紹介している参考書は下記で詳しく解説しています。
Docker学習のおすすめ参考書
ここからは上記の3段階のレベルに合わせて、編集部が厳選したDocker学習ができる良書を紹介していきます。
【初級レベル】仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん
Dockerとは何か、どのように動いているのかという基礎知識からコンテナに入れる方法やCompose、Kubernetesなどの初級レベルの知識を網羅的に学習できます。
※Amazonの商品ページより引用
また、上記の画像のように図やイラストが多用されているので、概念を視覚的にイメージしやすいように書かれているので、初学者に非常におすすめです。
実際、Amazonレビュー評価4.4/5(2023年7月現在)と非常に高く、Docker初学者が最初の1冊に学習する本として最適とのレビューが多くありました。
また、ハンズオン形式で、筆者の説明と一緒に手を動かしながら学習できるので、学習内容を即座に実行することができます。
【初級レベル】さわって学ぶクラウドインフラ docker基礎からのコンテナ構築
本書は自分でコンテナ環境を構築できるようになることを目標としており、自分で手を動かしながら学習を進めることができます。
Dockerのインストール方法、Webサーバーの起動方法といった基礎知識からはじまり、永続化、ネットワーク、コンテナイメージへと体系的に学ぶことができるので、初学者でも理解しやすく工夫されています。
さらに、複数のコンテナを使うことを想定し、中級レベルの知識であるDocker ComposeやKubernetesについても解説しているので、コンテナ構築に欠かせない知識を網羅的に学習できます。
実際、Amazonレビュー評価4.3/5(2023年7月現在)と非常に高く、本書だとつまずかず学習できたとのレビューも多くあり、おすすめです。
【初級レベル】たった1日で基本が身に付く!Docker/Kubernetes超入門
本書はDockerfileやComposeの設計などのDockerの基礎知識から、コンテナのデータ永続化やCI/CD、Kubernetesによる複数コンテナの自動管理といった中級レベルの知識までを学習できます。
ページ数も256ページとDockerの参考書のなかでは少なく、要点を抑えて、重要ポイントのみを解説しているので、効率的に学習を進めたい方におすすめです。
さらに、実際にコンテナを操作し、アプリの開発・デプロイできるようにサンプルファイルもついているので、実際に手を動かしながら知識を定着させることができます。
ただ、Amazonレビューを見てみると、「1日で学習できる量ではない」といったレビューが多いので、2〜3日~1週間程度の時間を確保し、余裕をみて勉強するとよいでしょう。
【中級レベル】Docker&仮想サーバー完全入門
240ページと比較的短いページ数でコンテナや仮想化の基本的な仕組みを学びながら、Docker Desktopを使って各種サーバーを構築するスキルを効率的に身に付けることができます。
ただ、その分、Dockerのインストール方法やdocker composeなどほかの参考書にはある基礎解説がないので、まずはDockerを動かせるようになりたいという方には非常におすすめです。
windowsだけでなく、ほかの参考書では少ないmaⅽでのインストール方法も解説しているのでmacを活用している方にもおすすめです。
2022年9月に出版しており、Docker参考書の中では比較的新しい情報を学習でき、学習内容をそのまま手元で実行できるので、バージョンの違いによるエラーや操作の違いは出にくいというメリットもあります。
【中級レベル】15Stepで習得 Dockerから入るKubernetes コンテナ開発からK8s本番運用まで
本書はKubernatesに必要な最低限のDocker知識を学習したうえで、実際にKubernatesを活用してコンテナ開発やK8s本番運用できるレベルの実践力を身に付けることができます。
Kubernatesの活用方法の解説に重きを置いているため、Docker中級レベル以上の方で、実際にKubernatesを活用してコンテナ開発などを行いたいという方に非常におすすめです。
各ステップの例題は自分のPCにダウンロードしたり、クラウド上で再現できるようになっており、学習内容をすぐに実行できるので、知識が定着しやすいといえるでしょう。
【上級レベル】Docker/Kubernetes 実践コンテナ開発入門
本書は話題のコンテナ技術、Docker/Kubernetesの基礎から実際にアプリケーションを作るまでを解説した実践に重きを置いている参考書です。
たとえば、コンテナの粒度の設計やマルチステージビルドなどDockerで開発する際の注意点を多く解説しているので、すでにDockerを使った開発経験のある方には非常に役立つでしょう。
さらに、Google Kubernetes EngineへのデプロイやAWS Fargateの活用などクラウドでの実践の解説もあるので、本書をすべてマスターすると上級レベルの知識が身に付くといえるでしょう。
【上級レベル】Docker実践ガイド 第2版
オーケストレーションやスケーリング、オーディオやwebカメラの設定など初級レベルからコンテナの資源管理、恒久ストレージ端末とコンテナとのディレクトリのマウント法といった中上級レベルまで幅広く実践スキルを身に付けることができます。
ただ、本書は非常に細かい部分の解説も多く、Dockerの基礎知識の解説は最小限に留めているため、Dockerの基礎知識を身に付けており、中級レベル以上を目指したい方にぴったりな参考書といえるでしょう。
たとえば、docker CE(community edition)とdockerEE(enterprise edition)の解説にかなりのページを割いているので、このレベルの違いを学習したい方には非常に有効的といえるでしょう。
まとめ
Dockerの参考書の選び方のポイントから、Docker学習のおすすめ参考書を紹介してきました。自分に合った参考書は見つかったでしょうか。
Dockerを活用できるようになるとチームで開発環境を統一できたり、セキュリティ向上できるようになり、さまざまなメリットがあります。本記事が学習を始めるきっかけになれば幸いです。
編集部ではプログラミングに関連する記事をほかにも公開しています。興味のある方はぜひこちらの記事もご覧ください。
コメント