初めてDockerを触る新人エンジニアへ
「Dockerって何?」と思いながらDockerを触り始める人は多いと思います。
結論から言うと、Dockerとは、どこでも同じ環境でアプリを動かせる仕組みです。
例えば、
- 自分のPCでは動く
- 他人のPCでは動かない
といった問題を防ぐことができます。
そのため、環境構築の手間を減らし、開発をスムーズにしてくれます。
この記事では、Dockerの基本を初めてDockerを触る新人エンジニアへ向けてわかりやすく解説します。
気軽にDockerに触れていきましょう!
この記事が新人エンジニアのDocker学習の第一歩のお役に立てば幸いです。
Dockerとは何か
簡単に結論を説明すると、Dockerとはアプリケーションを同じ環境で動かすための仕組みです。
もう少し正確に説明すると、Dockerとは、Linuxカーネルの機能を利用して、アプリケーションを隔離された実行環境(コンテナ)として動かすためのソフトウェアであり、コンテナ型仮想化を利用するための管理ソフトウェアです。
コンテナ型仮想化とは、ゲストOSを起動せずにホストOSの上に動作しているDocker Engine(Dockerを動かしている本体のソフトウェア)から、コンテナと呼ばれるアプリケーションとその依存関係をまとめた軽量な実行環境を作成し、その中でアプリケーションを動作させます。
つまりコンテナ型仮想化で行っていることは、プロセス(実行中のプログラム)をコンテナという箱を使用して隔離し、独立して動いているように扱う技術です。
少し難しいと思うので、Dockerについてこんなイメージを持てればOKです。
- Dockerとはコンテナという名前の箱を管理するアプリ
- 複数のコンテナ(箱)を持つことができる
- コンテナ(箱)の中にプログラムを入れることができる
- コンテナ(箱)の中には、動作に必要なものがすべて入っている
このイメージを持ちながら記事を読み進めていくと理解できるようになってきます。
Dockerで使用される技術
ここからは、Dockerを理解するために少しだけ技術的な話をします。
ここは少し難しいので、はじめはイメージをつかむ程度で大丈夫です。
カーネルとは
カーネルとは、OSの中核となるソフトウェアです。
カーネルがハードウェアとのやり取りを請け負ってくれるため、Word、Excel、DockerなどはメモリやCPUのことを意識せず動かすことができます。
仮想化とは
仮想化とは、コンピュータを構成する様々な資源(CPU、メモリ、ストレージ、OSなど)を物理的な構成とは独立に論理的な単位に編成し直すことです。仮想化技術を利用することで、複数の資源を統合して一つに見せかけたり、一つの資源を分割して複数に見せかけたりすることができます。
Dockerが使用する仮想化技術はコンテナ型仮想化ですが、仮想化の方式は様々あります。
例えば、
・ホスト型
・コンテナ型
などが存在します。
ホスト型仮想化とコンテナ型仮想化の違い
仮想化技術は複数ありますが、よくコンテナ型仮想化と比較されるのがホスト型仮想化です。ここでコンテナ型仮想化とホスト型仮想化の違いについて触れていきます。
コンテナ型仮想化とホスト型仮想化(仮想マシン)の違いはどのレベルで仮想化を行うか、です。
簡潔に記載すると、
ホスト型仮想化(仮想マシン):OSの上でさらに別のOSを動かす仮想化
コンテナ型仮想化:同じOS(カーネル)を共有しながら、アプリケーションを分離する仮想化
です。
イラストを見ていただけるとわかりやすいですが、
ホスト型仮想化(仮想マシン)はハイパーバイザ(アプリ的な感じ)の上にさらにOSを動かしています。
一方でコンテナ型仮想化はOSの上にプロセスごとに分かれた箱を複数載せて動かしています。
仮想化をする際にOSを動かす必要があるかどうかが大きな違いになります。
Dockerはホスト型仮想化(仮想マシン)とは異なり、OSを丸ごと持たないため、動作が軽く、高速に起動できます。また、その軽さから1台のパソコンで多数プロセスを起動できたりと柔軟性の高い利用をすることができます。
また、使用するイメージが同じであれば環境をコマンド1つで再現できる、という使いやすさもDockerの特徴です。
大雑把にまとめると、Dockerを使って開発を行うことで開発を楽に行うことができると捉えることができます。
Dockerの構成要素
Dockerはコンテナ、コンテナイメージから構成されます。
コンテナ
コンテナイメージ
コンテナを作り、配り、動かす方法
コンテナを動かすためには、まずコンテナを作成する必要があります。
その流れを追って説明します。
コンテナの作成
- Build(作る):「コンテナイメージの作成」のこと
- コンテナの材料
- Dockerfile:コンテナの作成手順書
- コンテキスト:コンテナに格納したりビルド時に使用するファイル群
コンテナの配布
- Ship(配る):「レジストリを用いたコンテナの配布」のこと
- 「レジストリ」と呼ばれるイメージ配布用のサーバを通じて他のホストと共有できる
コンテナの実行
終わりに
ここまでDockerの基本について解説してきました。
最初は少しとっつきにくく感じるかもしれませんが、Dockerは環境構築をシンプルにし、開発をスムーズにしてくれるツールです。
開発環境と本番環境の差異を無くしたい場合や、チームで同じ環境を使いたい場合に特に効果を発揮します。
少しずつで大丈夫なので、実際に触ってみることが理解への近道です。
この記事が、Dockerを学び始めるきっかけになれば嬉しいです。
おすすめ記事
Dockerについてさらに理解を深めたい方は以下の記事も参考にしてみてください。
おすすめ書籍
体系的に学びたい方には、書籍での学習もおすすめです。



