Dockerとは?コンテナの仕組みと仮想マシンとの違い

Dockerとは?コンテナの仕組みと仮想マシンとの違い

Dockerは、アプリケーションを「コンテナ」という小さな箱に入れて、どこでも同じように動かせるようにするソフトウェアです。開発の現場だけでなく、クラウドやAIの基盤など、今のインフラの多くで使われています。

ここでは、Dockerとは何かを、コンテナの仕組みと仮想マシンとの違いから解説します。基本の用語やよく使うコマンドに加えて、インフラの現場での使われ方と学び方もまとめました。

SUMMARY
この記事で分かること
  • Dockerとは何か、コンテナと仮想マシンの違い
  • イメージ・コンテナ・Dockerfileなどの基本の用語と、よく使うコマンド
  • インフラの現場でのDockerの使われ方と、学び方

Dockerとは?

コンテナを作って動かすソフトウェア

Dockerは、Docker社が開発した、コンテナを作り、動かし、配るためのソフトウェアです。2013年に公開されてから、コンテナの技術を広めるきっかけになりました。

コンテナとは、アプリケーションと、その動作に必要なライブラリや設定をひとまとめにした実行環境のことです。コンテナに入れておけば、開発者のパソコンでも、テストのサーバーでも、本番のクラウドでも、同じように動かせます。

コンテナと仮想マシンの違い

コンテナとよく比べられるのが、VirtualBoxやVMwareなどで作る仮想マシンです。

項目コンテナ仮想マシン
仕組みホストのOSのカーネルを共有し、アプリの実行環境だけを分ける仮想のハードウェアの上で、OSを丸ごと動かす
起動の速さ数秒以内数十秒〜数分
大きさ数十MB〜数百MBが多い数GB以上が多い
1台のサーバーで動かせる数多い少ない
分離の強さ仮想マシンより弱い強い

コンテナは、OSを丸ごと持たないため、軽くて速く、たくさん動かせるのが特長です。一方で、ホストのカーネルを共有するため、分離の強さは仮想マシンにおよびません。

仮想マシンの仕組みは、[Linuxのインストール方法]で紹介しています。

Dockerを使うメリット

メリット内容
環境の違いで動かない問題を防げる「自分のパソコンでは動いたのに、サーバーでは動かない」を防げる
環境をすぐに作れるコマンド1つで、データベースやWebサーバーの環境を立ち上げられる
同じ環境を何度でも作れる設定を書いたファイルから、同じコンテナを何度でも作り直せる
サーバーを効率よく使える1台のサーバーで、たくさんのコンテナを動かせる

インフラエンジニアにとっては、手順書を見ながら1台ずつ構築していた作業を、ファイルとコマンドで再現できるようになるのが大きな変化です。

Dockerの仕組みと基本の用語

4つの基本の用語

用語意味たとえると
イメージコンテナのもとになる、アプリと環境をまとめたテンプレート設計図
コンテナイメージから作って、実際に動かしている実行環境設計図から作った実物
Dockerfileイメージの作り方を書いたテキストのファイル設計図の作り方の手順書
レジストリイメージを保存して、共有する場所(Docker Hubなど)設計図の置き場所

1つのイメージから、同じ中身のコンテナをいくつでも作れるのがポイントです。

Dockerが動く流れ

Dockerは、次の流れで使います。

流れやること主なコマンド
1. イメージを作るDockerfileをもとに、イメージを作るdocker build
2. イメージを共有するレジストリにイメージを送るdocker push
3. イメージを取り寄せる別のサーバーで、レジストリからイメージを取り寄せるdocker pull
4. コンテナを動かすイメージからコンテナを作って動かすdocker run

自分でイメージを作らなくても、Docker Hubなどで公開されている公式のイメージを取り寄せて、すぐに動かすこともできます。

よく使うコマンド

コマンドできること
docker runイメージからコンテナを作って動かす
docker ps動いているコンテナの一覧を表示する
docker images手元にあるイメージの一覧を表示する
docker stop動いているコンテナを止める
docker logsコンテナのログを表示する
docker exec動いているコンテナの中でコマンドを実行する

たとえば、docker run -d -p 8080:80 nginx と入力すると、Webサーバーのnginxのコンテナが立ち上がり、ブラウザで表示できるようになります。Linuxのコマンドに慣れていると、Dockerのコマンドもすぐに使いこなせます。

Linuxのコマンドは、[Linuxのコマンドとは]で紹介しています。

複数のコンテナをまとめて動かすDocker Compose

実際のシステムは、Webサーバー、アプリ、データベースなど、複数のコンテナを組み合わせて動かすことがほとんどです。Docker Composeを使うと、複数のコンテナの構成を1つのファイル(compose.yaml)に書き、docker compose up のコマンド1つでまとめて立ち上げられます。

インフラの現場でのDockerの使われ方

開発から本番まで、同じ環境で動かす

場面使われ方
開発開発者のパソコンに、本番と同じ構成の環境をすぐに用意する
テストと公開(CI/CD)コードの変更のたびにイメージを作り、自動でテストして本番に反映する
本番の運用コンテナの数を増やしたり減らしたりして、負荷に合わせて動かす
AIの基盤学習や推論の環境をコンテナにまとめ、GPUのサーバーで動かす

AIの基盤でのコンテナの使われ方は[AIインフラとは]で、開発者が使いやすい基盤づくりは[プラットフォームエンジニアリングとは]で紹介しています。

本番ではKubernetesと組み合わせる

本番の環境では、たくさんのサーバーの上で、たくさんのコンテナを動かします。どのサーバーでどのコンテナを動かすか、止まったコンテナをどう立ち上げ直すかを、自動で管理する必要があります。

このコンテナの管理(オーケストレーション)を担うのがKubernetesです。Dockerはコンテナを作って動かす道具、Kubernetesはたくさんのコンテナをまとめて管理する仕組み、と考えると分かりやすくなります。

インフラエンジニアに求められること

コンテナは、Linuxのカーネルの機能(プロセスを分ける名前空間や、資源を制限するcgroupsなど)を使って動いています。そのため、Linuxやネットワークの知識がある人ほど、コンテナの仕組みを深く理解できます。

求められる力内容
Linuxの知識コンテナが動く土台の仕組みと、トラブルの原因を探る力
ネットワークの知識コンテナどうしや外部との通信の設計
自動化の知識イメージの作成や公開を、CI/CDで自動にする力
セキュリティの知識イメージの脆弱性の確認や、権限を絞った動かし方

コンテナの技術は、LinuCレベル3のプラットフォームスペシャリストの出題範囲にも入っています。

詳しくは、[LinuCレベル3とは]で紹介しています。

Dockerの学び方

ステップやること
1. Linuxの基本を押さえる基本のコマンドとファイルの操作に慣れておく
2. Dockerを入れて動かす公式のイメージを取り寄せて、nginxなどのコンテナを動かしてみる
3. Dockerfileを書く簡単なアプリを、自分でイメージにしてみる
4. Docker Composeで組み合わせるWebサーバーとデータベースを組み合わせて動かしてみる

まずは公式のイメージを動かして、止めて、消してみるところから始めると、コンテナの手軽さを実感できます。

Linuxそのものについては、[Linuxとは]で解説しています。

Dockerでよくある疑問

DockerとKubernetesは何が違う?

Dockerは、コンテナを作って動かすための道具です。Kubernetesは、たくさんのサーバーの上で、たくさんのコンテナをまとめて管理する仕組みです。小さな環境ならDockerだけで十分ですが、本番の大きなシステムではKubernetesと組み合わせて使うのが一般的です。

Dockerは無料で使える?

Docker本体(Docker Engine)は、オープンソースで無料で使えます。WindowsやMacで使うDocker Desktopは、一定の規模以上の企業での利用に有料のプランが必要です。

条件は変わることがあるため、Docker公式サイトで確認してください。

WindowsやMacでも使える?

使えます。WindowsやMacでは、Docker Desktopを入れると、裏側で小さなLinuxの環境を動かして、その上でコンテナを動かします。コンテナの中身は、基本的にLinuxです。

コンテナがあれば、仮想マシンはいらなくなる?

いらなくなるわけではありません。OSを丸ごと分けたい場合や、強い分離が必要な場合は、今も仮想マシンが使われています。実際には、仮想マシンやクラウドのサーバーの上でコンテナを動かす形が多く、2つは組み合わせて使われています。

Dockerを学ぶのに、Linuxの知識は必要?

あったほうが確実に学びやすくなります。コンテナの中身はLinuxで、コマンドの操作もLinuxとよく似ています。Linuxの基本のコマンドを押さえてからDockerに進むと、つまずきにくくなります。

まとめ

Dockerは、アプリケーションをコンテナにまとめて、どこでも同じように動かせるようにするソフトウェアです。この記事のポイントは次のとおりです。

  • Dockerとは
    コンテナを作り、動かし、配るためのソフトウェア。環境の違いで動かない問題を防げる。
  • 仮想マシンとの違い
    コンテナはホストのカーネルを共有するため、軽くて速く、たくさん動かせる。
  • 基本の用語
    イメージ(設計図)からコンテナ(実物)を作る。作り方はDockerfileに書き、レジストリで共有する。
  • 現場での使われ方
    開発からCI/CD、本番、AIの基盤まで使われ、本番ではKubernetesと組み合わせる
  • 学び方
    Linuxの基本を押さえ、公式のイメージを動かし、Dockerfileとcomposeへ進む

Dockerは、これからのインフラエンジニアにとって欠かせない技術の1つです。まずは自分のパソコンにDockerを入れて、公式のイメージのコンテナを動かすところから始めてみましょう。

記事の企画・執筆

IT基盤(インフラ)エンジニアのための求人・情報サイト「テックドック」の編集部です。ネットワーク・サーバー・クラウド・セキュリティなど、IT基盤の仕事・技術・資格・キャリアに役立つ情報を、実務に即した視点で発信しています。