「会社でDockerを使っているけど、そもそもDockerってなに?」
「転職のポートフォリオでDocker使いたいけど、どんなメリットがあるの?」
などといった悩みを持っている方もいるのではないでしょうか。
私自身エンジニアになってからDockerを扱わない日はないというほど、毎日Dockerに触れています。
しかし私もみなさんと同じように当初は「Dockerってなに?」「何がいいの?」といった疑問を持っていました。
この記事では、Dockerに関してまだイメージがつかない方やポートフォリオで使用したい!といった方に向けてわかりやすく解説させてもらいます。
毎日業務でDockerを扱っている僕が紹介するよ!!
Dockerの基礎だけでなく、docker composeが果たす役割や、その裏側が理解できるようになるでしょう。
Dockerの基礎を知りたい!という方は、ぜひ読んでみてください!
・Dockerとはなにか
・Dockerを活用するメリットとは
・Dockerの基礎的なコマンドの役割
【ジャンルが豊富で学びたい講座がきっとみつかる】
習得したいスキルが明確で年収アップのために学習している方!
- ジャンルが豊富で学びたい講座がきっとみつかる
- お手頃な価格帯
- 学びやすい多彩な機能
オンライン完結で手軽に学べるプラットフォームです!
目次
Dockerとは
Dockerとは、コンテナ型仮想環境を作成、実行、管理するためのプロットフォームのことです。
例えるならば、「あるコンピュータ上で他のコンピュータの機能を模倣して利用するようなもの」と考えればわかりやすいのではないでしょうか。
上記の画像で説明します。
インストラクチャーとは、PCやサーバなどのハードウェアの層になります。
ホストOSとは、物理的なPCやサーバー上にインストールされたOSのことです。
PCの環境でいうとWindowsやMac OS、サーバーでいうとWindows ServerやLinuxなどが一般的なホストOSです。
ここまでは、従来のホスト型仮想化と同じ構造になります。(ホスト型仮想化に関しては、Dockerが普及する前に利用していた仮想化の認識で問題ありません)
ホストOSの上に位置するDocker EngineがDockerを学ぶ上で重要になってくるコンテナ型仮想化の技術になります。
Docekr Engineとは、コンテナの作成、起動、停止、削除などを行う部分のことです。
Dockerを利用するユーザーはdockerコマンドを利用し、Docker Engineに指示を出します。
後述するDocker Desktopをインストールし起動すれば、Docker Engineが自動的に立ち上がるので、起動方法などを学ぶ必用はありません。
このDocker Engineを利用し起動できるコンテナとは、ホストOSのコア部分であるカーネルを利用してアプリケーションが実行されます。
後ほど詳しく解説しますが、コンテナを作成する際の元になるイメージとしてCentOSやubuntuなどのLinuxのイメージも提供されています。
しかし、あくまで動作するのはホストOSのカーネルであり、Linuxが持っているコマンドやライブラリはコンテナ内に含まれているという構造です。
ウマ娘やモンストなどのスマホゲームでフレンド機能のイメージです。
フレンドになると、自分のもっていないキャラクターを自分の環境で使用することができます。
このように、あくまでもホストOSのカーネルで、Linuxの持っているライブラリやコマンドを実行するということです。
コンテナの特徴
自分のコンピュータやサーバー上に、コンテナという仮想環境を作りだすことで、様々なアプリケーションを実行することができます。
例えば、Rubyを利用したアプリケーションを実行したいときは、Rubyの環境がインストールされたコンテナを起動すれば、利用することができます。
このように、実行したい環境に合わせて、様々なアプリケーションを利用することができるのが特徴です。
またDockerfileを共有することで、異なる環境(サーバ)で簡単に同じ仮想環境を再現することができます。
つまり同じチームメンバー間や、委任契約を結んだエンジニア間で環境構築を容易に行うことが可能ということです。
Dockerはいつからあるの?
Dockerが登場したのは、2013年の3月であり瞬く間に普及していきました。
2014年にgoogleが毎週20億のコンテナを起動していたことも話題となり、コンテナがIT業界のトレンドになった年になりました。
(参考サイト: https://www.sbbit.jp/article/cont1/28019)
Dockerを利用するメリット
Dockerを利用するメリットはいくつかありますが、以下の4つを紹介します。
プログラムの実行環境を素早く立ち上げることができる
起動するアプリケーションの容量にもよりますが、Dockerのコンテナは高速で起動させることができます。
そのため開発環境の立ち上げも数秒から数十秒で行うことができます。
再現性のある環境を用意できる
開発者の間では、「ある人のPCでは動作するが、他のPCでは動作しない」といったことはよくあります。
〇〇さんのmysqlのバージョンは5.7以上だから動作するけどXXさんのバージョンは5.6だから起動しない・・といったイメージでOKです!
しかしながらDockerでは、環境が異なっていても動作を行いやすいです。
開発者がそれぞれ自分に必要なパッケージやライブラリをインストールして環境を形成すると、パッケージのずれやPC環境の違いにより差がでてしまいます。
この差が起動してない原因になることがあります。
しかしDockerのコンテナ型仮想化で環境を統一させることができれば、起動しないといった問題を起きにくくすることが可能になります。
これはPCだけでなく、PC上で開発したアプリケーションをサーバーで動かす際も同様になります。
設定ファイルを共有することで同じ環境を作れる
Dockerでは設定ファイルを共有することで、プロジェクトメンバー間で同じ環境を作り出すことが可能です。
Dockerでは定義したファイルを元にコンテナ型仮想環境を立ち上げるため、設定ファイルを共有することで他のPCやサーバーで同じ環境が可能になります。
受託企業などプロジェクトが移り変わることの多い企業にとっては、git上に公開されているファイルを読み込むだけで環境を作り出すことができるため非常に便利です。
PCの環境を汚さずに済む
PCの環境を汚さずに済むというのは、Dockerでは仮想環境内に様々なパッケージをインストールするため、PCに直にインストールをする必要がありません。
逆に直にパッケージをインストールする際は、バージョン管理などを行わないといけません。
また新しいプロジェクトメンバーに加わった際は、そのプロジェクトで利用させれているパッケージをインストールしたりバージョン管理などを必要とする場合もあります。
プロジェクトを多く経験すると、PCの環境が管理しにくくなるでしょう。
その点Dockerは隔離された環境でのインストールなので、コンテナが別れていれば、他の環境を影響することはありません。
また、共有ファイルで何がインストールされているのか把握することも可能になります。
Docker Desktopは何ができるの?
Docekr Desktopとは、Mac、Windowsにインストールできるアプリケーションのことです。
ローカル環境で起動させたコンテナをひと目で把握することができるため、エンジニアにとっては必須のアプリケーションになっています。
Docker Desktopは無料なの?
Dockerは以前まで無料で提供されておりましたが、2021年9月に有料化になりました。
ただし個人利用や(従業員数250人未満かつ年間売上高1000万ドル未満(訳注:1ドル110円換算で11億円)、非商用のオープンソースプロジェクト、教育機関では継続して無料で利用できるという条件がつきました。
よって、個人レベルでDocker Desktopを扱いたいという方は気にしなくても問題ありません。
Docker 難しいポイントを解説
Dockerの概要を理解できている方でも、各種コマンドを実行した際に「何をやっているのかわからない」という方は多いのではないでしょうか。
私自身、
- Dockerイメージとコンテナって何が違うの?
- docker-compose buildやupってなにをしているの?
などと疑問を持ちながら利用していました。
これらの疑問を解消することで、現在Dockerを扱っている方だけでなく、これからDockerについて学ぶ方も、起動した際に裏では何が起こっているのかを把握することができます。
「わからないまま何となく実行していた」を抜け出すために覚えておくべき用語やコマンドを例を用いながら紹介します!
Docker Hubとは
Docker HubとはDockerイメージを保存するために提供しているクラウド上のレジストリ・サービスです。
各企業や他のユーザーが作ったイメージも公開されており、自分の環境にダウンロードすることでコンテナを起動させることが可能です。
DVDやCDが陳列されているTSUTAYAの棚をイメージしてみてください。
たくさんのDVDやCDが提供されているようにDocker Hubも様々なイメージデータが保存されています。
Dockerイメージとは
DockerイメージはDockerコンテナを作成するための雛形となるもので、Docker Hubから入手することが可能です。
一言で表すなら、Dockerイメージはコンテナを起動させるものです。
設定ファイル、アプリケーション、ライブラリなどのアプリケーション実行に必要な変数・メタデータ・コマンドを含みます。
Docker Hubによって、mysqlやnginxのイメージなどが共有されています。
TSUTAYAで陳列されているDVDやCDそのものです。
様々なDVDやCDが並んでいるようにイメージも多くの種類があります。
Dockerコンテナとは
DockerコンテナとはDockerイメージを元に作成されるコンテナ型仮想環境を指します。
現時点ではDockerイメージを元にDockerコンテナを作成しているんだなと理解しましょう。
このコンテナを起動することで、あらかじめイメージにセットアップしたアプリケーションの機能を提供することができます。
TSUTAYAで借りてきたDVDやCDを自身のPCにダウンロードするイメージです。(絶対にダメです笑)
コンテナはイメージから自分の環境を作り出すことができます。そのため海賊版のDVDに英語字幕をつけたり、日本語字幕をつけたり自由に扱うことができます。
つまりイメージというDVDからコンテナという海賊版データを作成するイメージです。
DockerイメージとDockerコンテナの違いについて
DockerイメージとDockerコンテナを紹介しましたが、2つの違いは具体的に何でしょうか。
この違いを理解するためにDockerコンテナが起動する流れを①から③の順に紹介します。
①Dockerイメージを作成するためのDockerfileを構成する
Dockerfileは、Dockerイメージを作成するための設計書になります。
Dockerfileがあることで、Dockerイメージを作成することが可能です。
②Dockerイメージをテンプレートとして取得
Dockerfileという設計書を元にコンテナを起動させる読み込み用のテンプレートとして取得します。
具体的なコマンドとしてはdocker buildを使用することでDockerイメージを作成することが可能です。
buildした段階では、まだコンテナは起動する前の状態です。
③作成したDockerイメージを使用してコンテナを起動
Dockerイメージをbuildしたあとは、docker runコマンドで起動させることができます。
起動することでコンテナが立ち上がります。
例えるならば、インストールしたスマホゲームを起動するイメージでよいでしょう。
ただし、docker runコマンドはコンテナを作成+起動するコマンドです。
不要に使用し続けるとコンテナを無駄に作成し続けてしまいます。
作成済みのコンテナを起動するだけならdocker startでも問題ありません。
Docker Composeとは
Docker Composeとは、マルチコンテナのDockerアプリケーションを定義して実行するためのツールです。
よく利用される用途としては、開発環境や自動テストの実行環境を立ち上げる際に利用しています。
使い方としては、webサーバー、DBサーバー、キャシュサーバーなどの定義をymlファイルに記述します。
このymlファイル(通称docker-compose.yml)を元にアプリケーション実行に必要なコンテナをまとめて起動することができます。
簡単に表すと、アプリケーションに必要な複数のコンテナをまとめ合わせたものです。
実際の現場では、1つのコンテナのみ立ち上げるということは少なく、データベースではmysql、フロントエンドではnode、バックエンドではRubyなどのバージョン管理を行っているよ!
Docker Composeの頻出コマンドを理解する
実際の現場で利用するコマンドは、どのような役割を果たしているのでしょうか。
buildやupの違いを正確に把握し、裏で何が起こっているのかを理解することは成長に繋がります。
ここでぜひ理解を深めましょう。
docker-compose build
docker-compose buildでは、イメージを構築するためのコマンドです。
この時点ではコンテナは作成されていません。
なお、一度buildするとキャッシュが作成されます。このキャッシュがあると2回目以降buildする際、速やかに処理が実行されます。
「最初にbuildしたときよりも早いな」と感じるのは、キャッシュのおかげなんだね!
docker-compose up
docker-compose upは、buildした際のキャッシュがある場合、イメージの構築とコンテナの構築から起動までを行います。
ただし最初にコンテナを立ち上げる際は、キャッシュが存在しないためdocker-compose buildを実行しdocker-compose upでコンテナを起動させます。
docker-compose down
docker-compose downは、コンテナとネットワークを停止し、削除を行います。
再度作成する際は、docker-compose upを実行すればコンテナを構築・起動できます。
Dockerのおすすめ勉強法
Dockerを学ぶには実際にターミナルで操作し実践形式で学ぶのが一番です。
Udemyでは、動画コンテンツで学習を進めることができます。
また買い切りのコンテンツになるので、自分の好きなタイミングで学び、復習することができます。
「本業を行いつつポートフォリオにDockerを組み込みたい方」や、「会社でDockerを利用しているけどよくわからない方」におすすめの学習方法です。
Udemyおすすめ講座
ゼロからはじめる Dockerによるアプリケーション実行環境構築
こちらの講座では、Dockerの基礎から実践形式まで、幅広くでDockerを学ぶことできます。
未経験からエンジニアを目指している方や、駆け出しエンジニアの「Dockerってなに?」といった基礎的なことから、ネットワークに関する用語まで学べます。
人気のあるRuby on Rails の開発環境の構築方法も学べるので、Rubyを扱う方におすすめです。
米国AI開発者がゼロから教えるDocker講座
こちらの講座では、
- Linuxの基礎についても学びたい
- DockerやDocker composeの基本的な使い方を学びたい
- ポートフォリオでDockerを使ってCICDパイプライン構築を行いたい
といった方におすすめの講座です。基礎から応用まで幅広いツールを用いながら学ぶことができます。
エンジニアは、点と点が架け橋になり知識が集約していくので、OSの知識から学べるのは勉強になるでしょう。
上述したDockerfileの記載方法も学べるので、Dockerを使ってみたいという方におすすめです。
Dockerとは? まとめ
今回の記事ではDockerの概要やメリットだけでなく、初心者がわかりずらいコンテナ・イメージ・Docker Composeの概念に関して紹介しました。
現在のプロジェクトでは、Dockerを使用しないことがないほど普及しております。
おそらく未経験からエンジニアになる方も必ず利用することになるでしょう。
その際、Dockerにどんなメリットがあり、各種コマンドが裏で何をしているのか理解することは、エンジニアとしての技術を大きく成長させます。
ポートフォリオでDockerを取り入れる方や、会社で使っているけどなんとなく使っていた。
という方は、ぜひ上述を参考にし役立ててください。