「Dockerって名前はよく聴くけど、何をするものかよくわからない」
「仮想マシンとどう違うの?なんで現場でよく使われているの?」
「SEを目指しているけど、Dockerは覚えておくべき?」
そんな痕問を持っていませんか?
Dockerは現代のシステム開発・運用においてほぼ必須のスキルになっています。この記事を読めば、Dockerが何のためのツールなのか、コンテナとは何か、仮想マシンとの違い、そして実際の使い方まで、初心者でも理解できるように解説します。
Dockerとは?一言で説明すると
Docker(ドッカー)とは、アプリケーションとその実行環境をひとまとめにして、どこでも同じように動かせるようにするツールです。
たとえば、あなたが自分のパソコンで「Pythonのバージョン3.11、ライブラリAとライブラリBをインストールした環境でWebアプリを動かしている」とします。このアプリを別のパソコンや本番サーバーに移したとき、「環境が違うから動かない」という問題がよく起きます。
Dockerを使うと、アプリの実行に必要な環境ごとパッケージして持ち運びできます。「自分のPCで動いたからサーバーでも動く」という状態を実現できるのがDockerの最大の価値です。
コンテナとは何か
Dockerが作るこの「パッケージ」をコンテナと呼びます。コンテナの中には次のものがまとめて入っています。
- アプリのコード
- 必要なライブラリやパッケージ
- OS(の一部)の設定
- 環境変数や設定ファイル
コンテナという名前は、貨物輸送の「コンテナ」から来ています。貨物コンテナが中身(荷物)を守りながら船でも列車でもトラックでも運べるように、Dockerのコンテナも中のアプリを守りながら開発 PCでも本番サーバーでもクラウドでも同じように動かせます。
仮想マシン(VM)との違い
「仮想化」と聆いて、仮想マシン(VM)を思い浮かべる人も多いでしょう。DockerのコンテナとVMは似ているようで大きく異なります。
仕組みの違い
| 比較項目 | 仮想マシン(VM) | Dockerコンテナ |
|---|---|---|
| OS | ゲストOSを丸ごと持つ | ホストOSのカーネルを共有 |
| 起動時間 | 数分かかることも | 数秒で起動 |
| サイズ | 数GB〜数十GB | 数MB〜数発MB |
| メモリ使用量 | 多い(OSごと動かすため) | 少ない(OSを共有するため) |
| 分離レベル | 強い(完全な独立環境) | やや低い(カーネル共有) |
| 用途 | 異なるOSを動かしたい場合など | アプリの実行環境の統一 |
VMはパソコンの中にもう1台パソコンを丸ごと作るようなイメージです。それに対してDockerは、OSの核心部分(カーネル)をホストと共有しながら、アプリの実行空間だけを分離する仕組みです。そのため、軽くて速いのが特徴です。
どちらを使うべきか
現在の開発現場では、Dockerコンテナが圧倒的に多く使われています。ただし「Windowsのアプリをmacで動かしたい」など、OSそのものを切り替える必要がある場面ではVMが適しています。両者は競合ではなく、用途に応じて使い分けるものです。
Dockerの基本概念:イメージとコンテナ
Dockerを使う上で必ず理解しておくべき概念が2つあります。イメージとコンテナです。
Dockerイメージとは
Dockerイメージは、コンテナの「設計図」または「テンプレート」です。どんなOSを使い、どんなライブラリをインストールし、どんな設定をするかが記録されています。
料理に例えると、イメージは「レシピ」です。レシピ(イメージ)をもとに、実際の料理(コンテナ)を何個でも作れます。
イメージはDocker Hubというサービスで公開・共有されており、Python・MySQL・Nginx・Redisなど、よく使われるソフトウェアのイメージはすでに公開されています。自分でゼロから作らなくても、公開イメージをベースにカスタマイズできます。
Dockerコンテナとは
Dockerコンテナは、イメージを実際に動かした状態です。1つのイメージから複数のコンテナを同時に起動できます。
料理の例で続けると、レシピ(イメージ)から実際に作った料理(コンテナ)です。同じレシピで同じ料理を10皿作れるように、1つのイメージから10個のコンテナを起動して同時に動かせます(これがスケールアウトの考え方です)。
Dockerfileとは
Dockerfileは、Dockerイメージを作るための設定ファイルです。テキスト形式で書かれており、「どのベースイメージを使うか」「どのコマンドを実行するか」「どのファイルをコピーするか」などを記述します。
# Dockerfileの例(PythonのWebアプリ用)
FROM python:3.11-slim # ベースイメージを指定
WORKDIR /app # 作業ディレクトリを設定
COPY requirements.txt . # 依存関係ファイルをコピー
RUN pip install -r requirements.txt # ライブラリをインストール
COPY . . # アプリのコードをコピー
CMD ["python", "app.py"] # コンテナ起動時に実行するコマンド
このDockerfileをもとにdocker buildコマンドを実行すると、イメージが作成されます。
Dockerの基本コマンド
Dockerを使う上でよく使うコマンドを覚えておきましょう。難しく見えますが、パターンを掴むと自然に身につきます。
イメージの操作
# Docker Hubからイメージを取得する
docker pull python:3.11-slim
# ローカルにあるイメージの一覧を表示する
docker images
# Dockerfileからイメージをビルドする(カレントディレクトリのDockerfileを使用)
docker build -t myapp:1.0 .
# イメージを削除する
docker rmi myapp:1.0
コンテナの操作
# コンテナを起動する(-d でバックグラウンド実行)
docker run -d -p 8080:80 --name mycontainer myapp:1.0
# 起動中のコンテナ一覧を表示する
docker ps
# 全コンテナを表示する(停止中も含む)
docker ps -a
# コンテナを停止する
docker stop mycontainer
# コンテナを削除する
docker rm mycontainer
# コンテナの中に入って操作する
docker exec -it mycontainer bash
-p 8080:80のオプションは「ホストのポート8080をコンテナのポート80につなぐ」という意味です。これによってブラウザからlocalhost:8080でコンテナ内のWebサーバーにアクセスできます。
Docker Composeとは
実際のWebアプリ開発では、複数のコンテナを連携させることが多いです。たとえば「Webサーバー(Nginx)+アプリサーバー(Python)+データベース(MySQL)」といった3つのコンテナを同時に起動して連携させる、といった構成です。
このような複数コンテナの管理を簡単にするのがDocker Composeです。docker-compose.ymlというファイルに複数のコンテナの設定をまとめて書き、docker compose upの1コマンドで全コンテナを一括起動できます。
# docker-compose.yml の例
version: '3'
services:
web:
build: .
ports:
- "8000:8000"
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: mydb
このファイルを用意してdocker compose upを実行すると、WebサーバーとMySQLが自動で起動し、互いに通信できる状態になります。
なぜDockerが現場で使われるのか
Dockerが現代のシステム開発に欠かせない理由を理解しておきましょう。
「自分のPCでは動く」問題を解消する
SEがよく経験する悩みが「自分のPCでは動くのに、テスト環境・本番環境では動かない」という問題です。Dockerを使えば開発環境・テスト環境・本番環境をすべて同じコンテナイメージで動かせるため、この問題が大幅に減ります。
環境構築の手間を大幅に削減する
新しいメンバーがチームに参加したとき、従来は「このソフトをインストールして、このバージョンのライブラリを入れて…」という環境構築に半日〜1日かかることがありました。Dockerがあればdocker compose upの1コマンドで開発環境が立ち上がります。
マイクロサービスとの相性が良い
最近のシステムは「ユーザー管理サービス」「注文管理サービス」「通知サービス」など、機能ごとに独立したプログラム(マイクロサービス)に分割して開発・運用する形が増えています。Dockerのコンテナはこのマイクロサービスと非常に相性が良く、各サービスを独立したコンテナとして管理できます。
クラウドとの連携が容易
AWS・Google Cloud・Azureなどの主要クラウドは、Dockerコンテナをそのまま動かすサービスを提供しています(AWS ECS、Google Cloud Run、Azure Container Instancesなど)。コンテナイメージを作っておけば、クラウドへのデプロイが非常にスムーズになります。
Dockerのインストールと最初の一歩
Docker Desktopのインストール
Windows・Macの場合はDocker Desktopをインストールするのが最も簡単です。
- docker.com にアクセスし、「Docker Desktop」をダウンロード
- インストーラーを実行してインストール(Windowsの場合はWSL2が必要。案内に従って設定)
- インストール後、Docker Desktopを起動(タスクトレイにクジラのアイコンが表示される)
- ターミナル(コマンドプロンプトやPowerShell)で確認:
docker --version
最初のコンテナを動かしてみる
インストールが完了したら、まずHello Worldを動かしてみましょう。
docker run hello-world
このコマンドを実行すると、Docker HubかHello Worldイメージが自動でダウンロードされ、コンテナが起動して「Hello from Docker!」というメッセージが表示されます。これがDockerの最初の一歩です。
次のステップとして、Nginxのコンテナを起動してブラウザで確認してみましょう。
# Nginxのコンテナをポート8080で起動
docker run -d -p 8080:80 nginx
# ブラウザで http://localhost:8080 を開くとNginxの初期画面が表示される
Nginxをインストールしていないのに、docker runの1行でWebサーバーが起動した体験は、Dockerの便利さを実感する最初の瞬間になるはずです。
SEを目指す人がDockerで押さえておくべきポイント
SEを目指している段階では、Dockerのすべてを深く理解する必要はありません。まず押さえておくべきポイントを整理します。
「Dockerをなぜ使うのか」を説明できるようにする
面接やチーム内での会話で「Dockerって何のために使うんですか?」と聞かれたとき、「環境の統一と持ち運びのため」という本質を自分の言葉で説明できることが重要です。仕組みの細部より、目的の理解を優先しましょう。
基本コマンドを実際に手を動かして覚える
docker run・docker ps・docker stop・docker buildの4つは最低限使えるようにしておきましょう。実際にDockerをインストールして手を動かすのが最短の習得方法です。
Docker Composeまで觸れると現場で即戦力になれる
多くの開発現場では、すでにdocker-compose.ymlが用意されています。docker compose upで環境を立ち上げ、docker compose downで停止する操作ができると、チームへの参加がスムーズになります。
KubernetesはDockerを理解してから
Dockerを多数のサーバーで管理するためのツールにKubernetes(クーバネティス / k8s)があります。求人でよく見かけますが、Dockerを理解してから学ぶものです。まずDockerをしっかり身につけることを優先してください。
まとめ:Dockerはモダン開発の共通言語
この記事のポイントをまとめます。
- Dockerはアプリと実行環境をまとめて持ち運ぶツール:「どこでも同じように動く」を実現する
- コンテナはVMより軽くて速い:OSカーネルを共有するため、起動が速くリソース消費が少ない
- イメージ(設計図)からコンテナ(実体)を作る:1つのイメージから複数コンテナを起動できる
- Docker Composeで複数コンテナを一括管理できる:実際の開発現場ではほぼ必須の知識
- まず手を動かすことが最短の習得方法:Docker Desktopをインストールして
docker run hello-worldから始めよう
DockerはSEとして働く上でほぼ必須の知識になっています。難しそうに見えますが、概念を理解して実際に手を動かせば、1〜2週間で基本は習得できます。まずDocker Desktopをインストールして、今日から觸り始めてみてください。
関連記事もあわせてどうぞ。