morimura-tech

dockerの基本的なメリットとその概念

2025-04-27

dockerとは

Dockerは、インフラ関係やDevOps界隈で注目されている技術の一つで、Docker社が開発している、コンテナ型の仮想環境を作成、配布、実行するためのプラットフォームです。

Dockerとは?(公式)

要するに、環境統一を誰でも簡単に行えるということ。

では、なぜ仮想環境を作るべきなのか?

追記

dockerの基本概念

Dockerやコンテナとは何なのでしょうか?

そうではなく、**「Linuxカーネル技術を使って、特別な状態のプロセスを実行できるようにするプラットフォーム」**がDockerです。この中でも、サーバ側で動作するDockerプログラムの総称を「Docker Engine」(ドッカーエンジン)と呼びます。そして、このDocker Engineを操作するのが、「docker」という名称のコマンドライン・ツールです。

まず「Docker」とは、特別な状態のLinuxプロセスを実行するためのプラットフォームです。特別な状態とは、プロセス実行時にLinuxカーネルの機能を使い、名前空間(namespace)を分離(isolate)します。

通常のプロセスを起動すると、プロセスが認識するPIDやホスト名、ファイルシステムなどはホスト上の情報と同じです。しかし、名前空間を分離した特別な状態であれば、自分自身のプロセスしか見えなくし、特定のファイルシステムしか見えないようにし、ネットワークも分離して直接ホスト上にポートを公開できなくします。また、cgroupによって、プロセスに対してCPUやメモリ等のリソース利用も制限できます。

このように、特別な状態のプロセスを「コンテナ」と呼び、このコンテナを実行する元になるファイルや関連情報(メタ情報)を、Dockerイメージと呼びます。そして、このDockerイメージは、Docker Hubなどのイメージ・レジストリ(保管庫の意味)を通して、コマンド1つで簡単に送受信できるようにします。

つまりDockerとは、Dockerイメージを送受信できる機能を持ち、Dockerイメージに含まれるファイルを使い、Dockerコンテナとしてプロセスを実行できるプラットフォームであるとも言えます。

たとえば、1つのホスト上で複数の Nginx ウェブサーバの起動を試みるとしましょう。通常であれば、1つのNginxがホスト側のポートを利用すると、2つめのNginxは起動できません。しかしDockerコンテナは、ネットワークも分離(isolate)した状態で起動します。

ホスト側にポートを開きたい(listenする)場合は、コンテナ起動時にポート公開の明示が必要です。そのため、ホスト側のポート重複がなければ、メモリ等のシステムリソースが利用可能な範囲で、ポート80を開いているつもりのNginxをいくつも起動できます。

そのため、1つのホスト上やノートPC上で、バージョンの異なる開発言語やフレームワークの環境を切り替えたり、テストしたり、動かしたりが素早くスムーズに行えるようになります。

以上がDockerやコンテナ、イメージに関する基本概念の説明になります。

「Linuxカーネル技術を使って、特別な状態のプロセスを実行できるようにするプラットフォーム」

というように例えばホスト側に繋がなければ,80番ポートのnginxを複数作っても問題ないということ。

仮想環境(docker)のメリット


環境が競合しない

  • 実用的な例:

    現在、あなたは2つのプロジェクトを開発しているとする。一つのプロジェクトではphp 7.4とmysql ver5.5、もう一つはphp 8.1とmysql ver 8.0.23。さらにphpのライブラリが競合すれば管理するのはかなりの労力が必要である。

    それを解決するのがdockerである。

    各プロジェクトにdockerコンテナを作ることによって、一行のコマンドですぐに開発環境の切り替えができる。

dockerコンテナ(一つのまとまった仮想環境)構築し、操作することでわざわざローカルの環境を切り替える必要がない。それに加え、ローカルの環境を崩さないためにも存在している。

dockerは軽い

docker(コンテナ型)とvirtualbox(ハイパーバイザ型)との比較

Dockerは、Linuxのコンテナ技術を使ったもので、よく仮想マシンと比較されます。VirtualBoxなどの仮想マシンでは、ホストマシン上でハイパーバイザを利用しゲストOSを動かし、その上でミドルウェアなどを動かします。それに対し、コンテナはホストマシンのカーネルを利用し、プロセスやユーザなどを隔離することで、あたかも別のマシンが動いているかのように動かすことができます。そのため、軽量で高速に起動、停止などが可能です。https://knowledge.sakura.ad.jp/13265/

なんて説明されても、分からん。

ということで、簡単にまとめてみた。

要するに、virtual boxはハードウェアを仮想化していて、dockerはハードウェアを操作するliunxカーネルも含めて仮想化している。dockerはdocker engineがいろいろして、os(linuxなど)を動いてる風にしているので早いということ。 対して、virtual boxなどはハードあるように見せかけて、その上でosがそのまま本当に動いている

osを動かすのに無駄なリソースを割かなくていいということ。

これによって、dockerは一からos立ち上げ、動かしているわけではないので、軽くて速いということである。

チームの開発環境統一が楽

チーム開発中、環境構築に手間取ったことはありませんか?

特に、macとwindowsが入り混じったチームは環境構築だけで一苦労です。

dockerではdocker imageをチームメンバーに配り、コンテナを立ち上げるだけで環境構築終了です。プラットフォーム間の非互換性を気にすることなく、開発ができる。

実行環境にそのままデプロイ(稼働させる)

dockerはもともとlinux kernel apiを利用して造られたコンテナなのでlinuxと相性がいい。そして、環境構築が楽だということは、本番環境の構築も例外ではない。

参照元

Docker入門(第一回)~Dockerとは何か、何が良いのか~ | さくらのナレッジ

Dockerとは(徹底解説)

【初心者向け・図解】Dockerとは?現役エンジニアがわかりやすく解説

Docker Compose入門 (1) ~アプリケーションをコンテナで簡単に扱うためのツール~ | さくらのナレッジ