Dockerとは?初心者が最初に理解すべき基本概念
Dockerとは、アプリケーションの開発・配布・実行を効率化するコンテナ型の仮想化プラットフォームです。2013年にDocker社(旧dotCloud社)によって公開されました。現在ではGitHubの公開リポジトリの多くがDockerfileを含んでおり、開発現場のスタンダードとなっています。
「仮想化」と聞くと難しく感じるかもしれません。まずは身近な例で考えてみましょう。引っ越しのとき、荷物をダンボール箱にまとめると運びやすくなりますよね。Dockerも同じ発想です。アプリケーションの動作に必要なファイル・設定・ライブラリをひとつの「コンテナ」にまとめます。このコンテナをどのサーバーに持っていっても、同じ環境で動作するのが最大のメリットです。
コンテナと仮想マシン(VM)の違い
Dockerを理解するために、従来の仮想マシン(VM)との違いを押さえましょう。
| 比較項目 | Docker(コンテナ) | 仮想マシン(VM) |
|---|---|---|
| 起動時間 | 数秒 | 数分 |
| リソース消費 | 軽量(ホストOSのカーネルを共有) | 重い(ゲストOSが必要) |
| イメージサイズ | 数MB〜数百MB | 数GB〜数十GB |
| 隔離レベル | プロセスレベル | OSレベル |
| 代表的なツール | Docker、Podman | VMware、VirtualBox |
仮想マシンはOS全体を仮想化するのに対し、Dockerはホスト側のOS(カーネル)を共有します。そのため起動が速く、リソースの消費が少ないのが特徴です。開発環境の構築だけでなく、CI/CD(継続的インテグレーション/継続的デリバリー)やマイクロサービスの運用にも広く活用されています。
Dockerの基本用語を整理しよう
Docker入門で混乱しやすいのが用語です。最低限知っておくべき用語を整理します。
- イメージ(Image):コンテナの設計図にあたるもの。読み取り専用のテンプレートです。
- コンテナ(Container):イメージをもとに起動した実行環境。実際にアプリケーションが動く場所です。
- Dockerfile:イメージを作るための手順書。テキストファイルにコマンドを記述します。
- Docker Hub:イメージを共有するクラウドレジストリ。公式イメージを無料でダウンロードできます。
- Docker Compose:複数のコンテナをまとめて管理するツール。YAML形式の設定ファイルを使います。
- ボリューム(Volume):コンテナ内のデータを永続化するための仕組みです。
これらの用語は以降のセクションで繰り返し登場します。わからなくなったら、ここに戻って確認してみてください。
Dockerが必要とされる理由と3つのメリット
「なぜ今さらDockerを学ぶ必要があるの?」と感じる方もいるかもしれません。結論から言うと、Dockerスキルはエンジニアの市場価値を大きく高める技術です。
メリット1:環境構築の時間を大幅に削減
新しいプロジェクトに参加したとき、「環境構築だけで丸一日かかった」という経験はありませんか。Dockerを使えば、docker compose upコマンドひとつで開発環境が再現できます。PHPとMySQLの組み合わせ、JavaとOracle DBの組み合わせなど、複雑な構成でも数分で準備完了です。
株式会社アイティークロスが手がけるSESの現場でも、チームメンバーの環境差異によるトラブルは大きな課題でした。Dockerの導入によって「自分のPCでは動くのに本番で動かない」という問題が激減しています。
メリット2:チーム開発の効率が向上
Dockerfileやdocker-compose.ymlをGitで管理すれば、チーム全員が同一の環境で開発できます。OSがWindowsでもmacOSでもLinuxでも、コンテナ内の環境は同じです。新しくチームに加わったメンバーのオンボーディングも格段にスムーズになります。
メリット3:クラウド・本番環境への展開が容易
AWSのECS(Elastic Container Service)やEKS(Elastic Kubernetes Service)、Google CloudのCloud Runなど、主要なクラウドサービスがDockerコンテナに対応しています。開発環境で動いたコンテナをそのまま本番にデプロイできるため、環境差異による障害リスクが低減します。
2024年のStack Overflow Developer Surveyでは、プロフェッショナル開発者の約59%がDockerを使用していると回答しています。もはやDockerは「知っていると便利なツール」ではなく、「知らないと困るツール」になりつつあります。
Dockerのインストール方法【Windows・Mac・Linux対応】
Docker入門の第一歩は、自分のPCにDockerをインストールすることです。ここではOS別の手順をわかりやすく解説します。
Windows(Windows 10/11 Pro以上)の場合
- Docker Desktop公式サイト(https://www.docker.com/products/docker-desktop/)にアクセスします。
- 「Download for Windows」をクリックし、インストーラーをダウンロードします。
- ダウンロードしたDocker Desktop Installer.exeを実行します。
- インストールウィザードに従い、「Use WSL 2 instead of Hyper-V」にチェックを入れます。
- インストール完了後、PCを再起動します。
- Docker Desktopを起動し、タスクバーにクジラのアイコンが表示されれば成功です。
Windows Homeの場合は、事前にWSL 2(Windows Subsystem for Linux 2)のセットアップが必要です。PowerShellを管理者権限で開き、wsl –installコマンドを実行してください。
macOS(Intel / Apple Silicon)の場合
- Docker Desktop公式サイトにアクセスします。
- 自分のチップに合った「Download for Mac」を選択します(Intel Chip または Apple Chip)。
- ダウンロードした.dmgファイルを開き、Docker.appをApplicationsフォルダにドラッグします。
- Docker.appを起動し、システム権限の許可を行います。
- メニューバーにクジラアイコンが表示されれば完了です。
Linux(Ubuntu)の場合
Linuxでは、Docker Engineを直接インストールします。以下はUbuntu 22.04/24.04向けの手順です。
- 既存のDockerパッケージがあれば削除します。
sudo apt-get remove docker docker-engine docker.io containerd runc - 必要なパッケージをインストールします。
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg - Docker公式のGPGキーを追加します。
- リポジトリを設定し、Docker Engineをインストールします。
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin - インストール確認:docker –versionを実行し、バージョンが表示されれば成功です。
インストール後の動作確認
すべてのOSに共通する動作確認方法です。ターミナル(コマンドプロンプト)を開いて次のコマンドを入力してください。
docker run hello-world
「Hello from Docker!」というメッセージが表示されれば、Dockerは正しくインストールされています。このコマンドは、Docker Hubからhello-worldイメージをダウンロードし、コンテナを起動して結果を出力するものです。
Docker頻出コマンド一覧|これだけ覚えればOK
Dockerの操作はすべてコマンドラインで行います。入門段階では、以下のコマンドを覚えれば日常の操作に困りません。
イメージ関連のコマンド
| コマンド | 説明 | 使用例 |
|---|---|---|
| docker pull | Docker Hubからイメージを取得 | docker pull nginx:latest |
| docker images | ローカルのイメージ一覧を表示 | docker images |
| docker build | Dockerfileからイメージを作成 | docker build -t myapp:v1 . |
| docker rmi | イメージを削除 | docker rmi nginx:latest |
コンテナ関連のコマンド
| コマンド | 説明 | 使用例 |
|---|---|---|
| docker run | イメージからコンテナを起動 | docker run -d -p 8080:80 nginx |
| docker ps | 稼働中のコンテナ一覧を表示 | docker ps |
| docker ps -a | 全コンテナ(停止中含む)を表示 | docker ps -a |
| docker stop | コンテナを停止 | docker stop コンテナID |
| docker rm | コンテナを削除 | docker rm コンテナID |
| docker exec | 稼働中のコンテナでコマンドを実行 | docker exec -it コンテナID bash |
| docker logs | コンテナのログを表示 | docker logs コンテナID |
よく使うオプションの解説
docker runコマンドのオプションは種類が多く、最初は戸惑うかもしれません。特に重要なものを解説します。
- -d(detached):バックグラウンドでコンテナを起動します。ターミナルを占有しないので便利です。
- -p ホスト側ポート:コンテナ側ポート:ポートフォワーディングの設定です。-p 8080:80なら、ブラウザでlocalhost:8080にアクセスするとコンテナの80番ポートに転送されます。
- -v ホスト側パス:コンテナ側パス:ボリュームのマウント設定です。ローカルのファイルをコンテナ内で使えます。
- –name:コンテナに名前をつけます。IDではなく名前で管理できるので便利です。
- -it:対話モードでコンテナに接続します。コンテナ内でコマンド操作をしたいときに使います。
- –rm:コンテナ停止時に自動的に削除します。テスト用途に最適です。
まずはdocker run、docker ps、docker stop、docker rmの4つを繰り返し使って、操作に慣れましょう。
Dockerfileの書き方|オリジナルイメージを作ろう
Docker Hubの公式イメージをそのまま使うだけでは、実際の開発には対応しきれません。Dockerfileを書いて、プロジェクト専用のカスタムイメージを作成しましょう。
Dockerfileの基本構文
Dockerfileは、イメージの構築手順を記述したテキストファイルです。ファイル名は「Dockerfile」で、拡張子はありません。以下はPythonのWebアプリケーション(Flask)を動かすDockerfileの例です。
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install –no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
CMD [“python”, “app.py”]
各命令の意味を解説します。
- FROM:ベースとなるイメージを指定します。ここではPython 3.12のslim版(軽量版)を使用しています。
- WORKDIR:コンテナ内の作業ディレクトリを指定します。以降のコマンドはこのディレクトリで実行されます。
- COPY:ホスト側のファイルをコンテナ内にコピーします。最初にrequirements.txtだけをコピーし、次にプロジェクト全体をコピーしているのはキャッシュ効率を高めるためです。
- RUN:イメージ構築時に実行するコマンドです。ここではPythonの依存パッケージをインストールしています。
- EXPOSE:コンテナが使用するポートを宣言します。ドキュメント的な意味合いが強く、実際の公開には-pオプションが必要です。
- CMD:コンテナ起動時に実行されるデフォルトコマンドです。
Dockerfileのベストプラクティス
効率的なDockerfileを書くために、以下のポイントを意識しましょう。
- 軽量なベースイメージを選ぶ:Alpine版やslim版を使うとイメージサイズを抑えられます。例えばpython:3.12は約1GBですが、python:3.12-slimなら約150MBです。
- レイヤーを最小限にする:RUN命令を1行にまとめると、イメージのレイヤー数が減り、ビルドが高速化します。
- .dockerignoreファイルを活用する:node_modulesや.gitなど、不要なファイルをコンテナに含めないようにしましょう。
- マルチステージビルドを活用する:ビルド用と実行用のステージを分けることで、最終イメージから不要なビルドツールを除外できます。
- rootユーザーで実行しない:セキュリティのため、USER命令で一般ユーザーに切り替えましょう。
実際にイメージをビルドしてみよう
Dockerfileがあるディレクトリで、以下のコマンドを実行します。
docker build -t my-flask-app:v1 .
-tオプションでイメージにタグ(名前)をつけ、末尾のピリオド(.)でビルドコンテキスト(現在のディレクトリ)を指定しています。ビルドが完了したら、次のコマンドでコンテナを起動します。
docker run -d -p 5000:5000 –name flask-container my-flask-app:v1
ブラウザでhttp://localhost:5000にアクセスし、アプリケーションが表示されれば成功です。
Docker Compose入門|複数コンテナをまとめて管理
実際のWebアプリケーションでは、アプリ本体だけでなくデータベースやキャッシュサーバーなど複数のコンテナを連携させる必要があります。それぞれをdocker runコマンドで個別に起動するのは手間がかかります。そこで活躍するのがDocker Composeです。
docker-compose.ymlの基本構造
以下は、PHPアプリケーション(Laravel)+MySQL+Nginxの構成を定義したdocker-compose.ymlの例です。
version: ‘3.8’
services:
app:
build: ./docker/php
volumes:
– ./src:/var/www/html
depends_on:
– db
web:
image: nginx:latest
ports:
– “8080:80”
volumes:
– ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
– ./src:/var/www/html
depends_on:
– app
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: laravel
volumes:
– db-data:/var/lib/mysql
volumes:
db-data:
Docker Composeの主要コマンド
| コマンド | 説明 |
|---|---|
| docker compose up -d | すべてのサービスをバックグラウンドで起動 |
| docker compose down | すべてのサービスを停止・削除 |
| docker compose ps | 稼働中のサービス一覧を表示 |
| docker compose logs | 全サービスのログをまとめて確認 |
| docker compose build | イメージを再ビルド |
| docker compose exec app bash | 指定サービスのコンテナに入る |
Docker Composeを使いこなせるようになると、開発環境の構築が圧倒的に効率化されます。特にJavaとOracleを使う大規模な金融システムの開発や、PHPとMySQLを使うWebサービスの開発では、チーム全体の生産性向上に直結します。
株式会社アイティークロスのSES案件でも、Docker Composeを活用した環境構築を標準化しているプロジェクトが増えています。大手自動車メーカーの開発チームや官公庁のシステム案件でも、Dockerベースの開発フローが広く採用されています。
Docker入門者がつまずきやすいポイントと解決策
Docker入門者が実際に手を動かすと、さまざまなエラーやトラブルに遭遇します。ここでは現場でよくあるつまずきポイントと、その解決策をまとめます。
ポイント1:ポートの競合
「Ports are not available」というエラーが出る場合、指定したポートがすでに使われています。docker psで既存のコンテナを確認するか、別のポート番号を指定しましょう。たとえば-p 8081:80のように変更します。
ポイント2:権限エラー(Linux)
Linux環境で「permission denied」が表示される場合は、現在のユーザーがdockerグループに属していない可能性があります。以下のコマンドで追加しましょう。
sudo usermod -aG docker $USER
コマンド実行後、一度ログアウトして再ログインしてください。
ポイント3:コンテナのデータが消える
コンテナを削除すると、内部のデータも一緒に消えてしまいます。データを永続化したい場合はボリューム(Volume)を使用します。docker-compose.ymlのvolumesセクションで明示的に定義するのがベストプラクティスです。
ポイント4:イメージのビルドが遅い
Dockerfileの記述順序を工夫することで、ビルドキャッシュを効率的に活用できます。変更頻度が低いファイル(依存パッケージの定義ファイルなど)を先にCOPYし、変更頻度が高いソースコードは後からCOPYしましょう。
ポイント5:ディスク容量の圧迫
Dockerを長く使っていると、不要なイメージやコンテナがディスクを圧迫します。定期的にクリーンアップしましょう。
- docker system prune:停止中のコンテナ、未使用のネットワーク、ダングリングイメージを一括削除
- docker system prune -a:さらに使われていないイメージもすべて削除
- docker volume prune:未使用のボリュームを削除
これらのコマンドを覚えておくと、ディスク容量の管理がずっと楽になります。
ポイント6:ネットワークの仕組みがわからない
Docker Composeで定義したサービス同士は、サービス名で通信できます。たとえばappサービスからdbサービスに接続する場合、ホスト名に「db」を指定するだけでOKです。IPアドレスを調べる必要はありません。これはDockerが内部的にDNSを管理しているためです。
Dockerスキルを活かしたキャリアアップ戦略
Dockerの基礎を身につけたら、次はキャリアにどう活かすかを考えましょう。Dockerスキルは、インフラエンジニアだけでなく開発者やSREにとっても強力な武器になります。
Dockerから広がる技術領域
Dockerを起点に、以下の技術を段階的に学んでいくことをおすすめします。
- Docker(コンテナの基礎):まずは本記事の内容を実践して習得。
- CI/CD(GitHub Actions、GitLab CI):Dockerイメージを使った自動テスト・自動デプロイの仕組み。
- Kubernetes(コンテナオーケストレーション):複数のコンテナを本番環境で効率的に管理・運用する技術。
- AWS ECS / EKS:AWSでDockerコンテナを本番運用するためのサービス。
- Terraform / IaC(Infrastructure as Code):インフラ構成をコードで管理する技術。
このロードマップに沿って学習すれば、DevOpsエンジニアやSRE(Site Reliability Engineer)としてのキャリアパスが開けます。
Dockerスキルと市場価値
転職市場でDockerスキルの需要は年々高まっています。求人サイトで「Docker」をキーワードに検索すると、数千件以上の求人がヒットします。特に以下のポジションではDockerスキルが必須、またはあると有利とされています。
- バックエンドエンジニア(Java、PHP、Python)
- インフラエンジニア・クラウドエンジニア
- DevOpsエンジニア・SRE
- テクニカルリード・アーキテクト
株式会社アイティークロスでは、エンジニア一人ひとりの希望を100%ヒアリングし、スキルアップにつながる案件をマッチングしています。Dockerを使う開発案件も多数あり、大手自動車メーカーの基幹システムや製造業のDXプロジェクトなど、幅広い分野で経験を積むことが可能です。
未経験からIT業界に転職される方も5割以上いらっしゃいます。充実した研修制度を通じてDockerやAWSなどのモダンな技術を基礎から学べる環境が整っています。年間休日125日、残業月平均12.3時間というワークライフバランスのとれた環境で、腰を据えてスキルアップを目指せるのも魅力です。
まとめ:Docker入門のポイントを振り返ろう
この記事では、Docker入門者が知っておくべき知識を体系的に解説しました。最後に重要なポイントを振り返りましょう。
- Dockerはアプリケーションをコンテナにまとめて、どこでも同じ環境で動かせる技術です。
- 仮想マシンと比較して軽量・高速・省リソースが大きなメリットです。
- Docker Desktop(Windows・Mac)またはDocker Engine(Linux)をインストールして学習環境を構築しましょう。
- docker run、docker ps、docker stop、docker rmの4つの基本コマンドをまず覚えましょう。
- Dockerfileを書いてオリジナルのイメージを作成できるようになりましょう。
- Docker Composeを使えば、複数のコンテナを一括管理できます。
- つまずきポイントの解決策を知っておくことで、学習効率が格段に上がります。
- Dockerを起点にCI/CD、Kubernetes、AWSへとスキルを広げることで、市場価値の高いエンジニアを目指せます。
Docker入門はゴールではなく、エンジニアとしてのキャリアを広げるスタートラインです。まずは自分のPCにDockerをインストールし、コンテナを動かすところから始めてみてください。手を動かした経験が、必ず将来の糧になります。
よくある質問(FAQ)
Dockerとは何ですか?初心者にもわかりやすく教えてください。
Dockerとは、アプリケーションの動作に必要なファイルや設定をひとまとめにした「コンテナ」を作成・管理するためのプラットフォームです。コンテナを使えば、どのPCやサーバーでも同じ環境でアプリケーションを動かせます。引っ越しの荷物をダンボールにまとめるようなイメージで、環境の再現性と移植性を実現する技術です。
DockerはWindowsでも使えますか?
はい、Windowsでも使えます。Docker Desktop for Windowsをインストールすることで、Windows 10/11で利用可能です。Pro版以上であればHyper-V、Home版であればWSL 2(Windows Subsystem for Linux 2)を利用して動作します。Docker Desktop公式サイトから無料でダウンロードできます。
Dockerを学ぶのに必要な前提知識はありますか?
基本的なコマンドライン操作(ターミナルやコマンドプロンプトの使い方)ができれば、Docker入門は可能です。Linux の基礎知識があるとより理解が深まりますが、必須ではありません。プログラミング経験がなくても、公式チュートリアルや入門記事を参考に手を動かせば十分に学べます。
DockerとDocker Composeの違いは何ですか?
Dockerは単一のコンテナを管理するツールです。一方、Docker Composeは複数のコンテナをまとめて定義・管理するツールです。たとえばWebアプリケーション+データベース+キャッシュサーバーのように、複数のサービスを連携させる場合にDocker Composeを使います。docker-compose.yml(YAML形式の設定ファイル)にサービスの構成を記述し、docker compose upコマンドで一括起動できます。
Docker入門後、次に何を学ぶべきですか?
Dockerの基礎を身につけたら、CI/CD(GitHub ActionsやGitLab CI)を使った自動化、Kubernetesによるコンテナオーケストレーション、AWS ECS/EKSでのクラウド運用を段階的に学ぶのがおすすめです。これらのスキルを習得すると、DevOpsエンジニアやSRE(Site Reliability Engineer)としてのキャリアパスが広がり、市場価値が大幅に向上します。
Dockerのスキルがあると転職で有利になりますか?
はい、Dockerスキルは転職市場で高く評価されています。バックエンドエンジニア、インフラエンジニア、DevOpsエンジニアなど幅広い職種で求められるスキルです。2024年のStack Overflow調査では、プロフェッショナル開発者の約59%がDockerを使用していると回答しており、業界標準の技術と言えます。特にクラウドやマイクロサービスを扱うプロジェクトでは必須スキルとなっています。
Dockerは無料で使えますか?
個人利用や小規模チーム(従業員250名未満かつ年間売上1,000万ドル未満の企業)であれば、Docker Desktopは無料で使えます。大規模な企業で商用利用する場合は、Docker Business等の有料プランへの加入が必要です。なお、Linux上のDocker Engine自体はオープンソースであり、完全に無料で利用できます。
コメント