Dockerとは?初心者が最初に理解すべき基本概念
Dockerとは、アプリケーションを「コンテナ」という独立した環境にまとめて動かすためのプラットフォームです。2013年にDocker社(旧dotCloud社)がオープンソースとして公開して以来、世界中のエンジニアに支持されています。
このDockerチュートリアルでは、初心者の方でも迷わず学習を進められるよう、基礎概念から実践的な使い方までを一つひとつ丁寧に解説していきます。
まずは、Dockerを理解するうえで欠かせないキーワードを整理しましょう。
コンテナとは何か
コンテナとは、アプリケーションとその実行に必要なライブラリや設定ファイルをひとまとめにパッケージした軽量な仮想環境です。従来の仮想マシン(VM)とは異なり、OSカーネルをホストマシンと共有するため、起動が非常に高速で、リソースの消費も最小限に抑えられます。
たとえば、仮想マシンの起動に数分かかることがあるのに対し、Dockerコンテナはわずか数秒で立ち上がります。この軽量さがDockerの大きな魅力です。
Dockerイメージとコンテナの違い
Dockerを学び始めると、「イメージ」と「コンテナ」の違いに戸惑う方が多いです。簡単に説明すると、以下のような関係になります。
| 用語 | 役割 | たとえ |
|---|---|---|
| Dockerイメージ | コンテナの設計図(テンプレート) | 料理のレシピ |
| Dockerコンテナ | イメージから作成された実行環境 | レシピから作った料理 |
イメージは読み取り専用のテンプレートで、コンテナはそのイメージをもとに作成された実行可能なインスタンスです。1つのイメージから複数のコンテナを作成できます。
Dockerが注目される理由
Dockerがここまで普及した背景には、以下のようなメリットがあります。
- 環境の再現性:「自分のPCでは動くのに本番では動かない」という問題を解消
- 軽量・高速:仮想マシンに比べてリソース消費が少なく、起動も速い
- ポータビリティ:どの環境でも同じコンテナが動作する
- チーム開発の効率化:全員が同一の開発環境を即座に構築できる
- CI/CDとの親和性:自動テストやデプロイのパイプラインに組み込みやすい
2024年のStack Overflow Developer Surveyでも、Dockerは開発者に最も人気のあるツールの一つとしてランクインしています。実務で使われる機会が非常に多いため、早い段階で習得しておくことをおすすめします。
Docker環境のインストール手順【Windows・Mac・Linux対応】
このDockerチュートリアルの最初のステップは、ご自身のPCにDockerをインストールすることです。OSごとに手順が異なるため、それぞれ解説します。
Windows へのインストール
Windows 10/11 Pro以上のエディションをお使いの場合は、Docker Desktopが最適です。
- Docker公式サイトからDocker Desktop for Windowsをダウンロード
- インストーラーを実行し、画面の指示に従ってインストール
- WSL 2(Windows Subsystem for Linux 2)バックエンドの有効化を求められた場合は有効にする
- PCを再起動
- Docker Desktopを起動し、タスクバーにDockerアイコンが表示されれば完了
Windows HomeエディションでもWSL 2を有効にすればDocker Desktopを利用できます。
Mac へのインストール
macOSの場合もDocker Desktopを使用します。
- Docker公式サイトからDocker Desktop for Macをダウンロード(Apple Silicon用とIntel用があるため注意)
- .dmgファイルを開き、DockerアイコンをApplicationsフォルダにドラッグ
- Docker Desktopを起動
- メニューバーにDockerアイコンが表示されれば完了
Linux へのインストール
Linuxの場合はDocker Engineをコマンドラインからインストールします。Ubuntu 22.04の例を示します。
sudo apt updatesudo apt install -y docker.iosudo systemctl start dockersudo systemctl enable dockersudo usermod -aG docker $USER
最後のコマンドでdockerグループにユーザーを追加すると、sudoなしでDockerコマンドを実行できるようになります。一度ログアウトして再ログインすると反映されます。
インストール確認
どのOSでも、以下のコマンドでインストールが正常に完了したか確認できます。
docker --version
バージョン情報が表示されれば成功です。さらに、以下のコマンドでHello Worldコンテナを動かしてみましょう。
docker run hello-world
「Hello from Docker!」というメッセージが表示されれば、Dockerの環境構築は完了です。
Dockerの基本コマンドをハンズオンで学ぶ
Docker環境が整ったら、実際にコマンドを使ってコンテナを操作していきましょう。このセクションでは、実務で頻繁に使うDockerコマンドをハンズオン形式で紹介します。
イメージの取得(docker pull)
Docker Hubという公式のレジストリから、イメージをダウンロードします。
docker pull nginx
このコマンドで、Webサーバーとして有名なNginxのイメージを取得できます。Docker Hubには、公式イメージだけでなくコミュニティが作成した数十万ものイメージが公開されています。
コンテナの起動(docker run)
取得したイメージからコンテナを起動します。
docker run -d -p 8080:80 --name my-nginx nginx
各オプションの意味は以下のとおりです。
| オプション | 意味 |
|---|---|
| -d | バックグラウンドで実行(デタッチモード) |
| -p 8080:80 | ホストの8080番ポートをコンテナの80番ポートに接続 |
| –name my-nginx | コンテナに「my-nginx」という名前を付ける |
ブラウザで http://localhost:8080 にアクセスすると、Nginxのデフォルトページが表示されるはずです。たったこれだけでWebサーバーが立ち上がるのはDockerの醍醐味です。
コンテナの一覧確認(docker ps)
docker ps で実行中のコンテナ一覧を確認できます。停止中のコンテナも含めて表示するには docker ps -a を使います。
コンテナの停止・削除
docker stop my-nginx(コンテナを停止)docker rm my-nginx(コンテナを削除)
不要になったコンテナは削除してディスク容量を節約しましょう。
イメージの一覧・削除
docker images(イメージ一覧を表示)docker rmi nginx(Nginxイメージを削除)
コンテナ内でコマンドを実行(docker exec)
実行中のコンテナに入って操作したい場合は、以下のようにします。
docker exec -it my-nginx /bin/bash
これでコンテナ内のシェルにログインできます。ファイルの確認や設定変更などのデバッグに非常に便利です。
よく使うDockerコマンド一覧
| コマンド | 用途 |
|---|---|
| docker pull | イメージのダウンロード |
| docker run | コンテナの作成・起動 |
| docker ps | 実行中コンテナの一覧 |
| docker stop | コンテナの停止 |
| docker rm | コンテナの削除 |
| docker images | イメージ一覧の表示 |
| docker rmi | イメージの削除 |
| docker exec | コンテナ内でコマンド実行 |
| docker logs | コンテナのログ確認 |
| docker build | Dockerfileからイメージをビルド |
まずはこれらのコマンドを繰り返し使って、手に馴染ませていくことが上達の近道です。
Dockerfileの書き方|オリジナルイメージを作成しよう
Dockerチュートリアルの次のステップは、自分だけのDockerイメージを作成することです。Dockerfileとは、イメージを構築するための手順を記述したテキストファイルです。
Dockerfileの基本構文
シンプルなPythonアプリケーション用のDockerfileを例に解説します。
FROM python:3.12-slimWORKDIR /appCOPY requirements.txt .RUN pip install --no-cache-dir -r requirements.txtCOPY . .EXPOSE 5000CMD ["python", "app.py"]
各命令の意味は以下のとおりです。
| 命令 | 意味 |
|---|---|
| FROM | ベースとなるイメージを指定 |
| WORKDIR | コンテナ内の作業ディレクトリを設定 |
| COPY | ホストのファイルをコンテナにコピー |
| RUN | ビルド時にコマンドを実行 |
| EXPOSE | コンテナが使用するポートを宣言 |
| CMD | コンテナ起動時に実行するコマンド |
イメージのビルド
Dockerfileが置かれたディレクトリで以下のコマンドを実行します。
docker build -t my-python-app .
-t オプションでイメージに名前(タグ)を付けます。末尾の . はDockerfileがカレントディレクトリにあることを示します。
ビルドしたイメージからコンテナを起動
docker run -d -p 5000:5000 my-python-app
これでオリジナルのPythonアプリケーションがコンテナとして動作します。
Dockerfile作成のベストプラクティス
実務でDockerfileを書く際は、以下のポイントを意識すると品質が向上します。
- 軽量なベースイメージを選ぶ:
-slimや-alpineタグのイメージを使うとサイズを大幅に削減できる - レイヤーキャッシュを活用する:変更頻度の低いファイル(requirements.txtなど)を先にCOPYすることで、ビルド時間を短縮
- 不要なファイルを除外する:
.dockerignoreファイルを作成し、node_modulesや.gitフォルダなどを除外 - RUN命令をまとめる:複数のRUNを
&&でつなげてレイヤー数を減らす - rootユーザーを避ける:セキュリティ対策として、USER命令で一般ユーザーに切り替える
これらの最適化テクニックを身につけると、プロジェクトの品質が大きく向上します。
Docker Composeで複数コンテナを管理する方法
実際のWeb開発では、アプリケーション・データベース・キャッシュサーバーなど複数のコンテナを連携させることが一般的です。Docker Composeを使えば、これらを一括で管理できます。
Docker Composeとは
Docker Composeは、複数のコンテナで構成されるアプリケーションを定義・管理するためのツールです。YAML形式の設定ファイル(docker-compose.yml)に構成を記述し、1つのコマンドで全コンテナを操作できます。
docker-compose.ymlの記述例
PHPのWebアプリケーションとMySQLデータベースを連携させる構成を例に解説します。
version: '3.8'services: web: build: . ports: - "8080:80" volumes: - ./src:/var/www/html depends_on: - db db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_DATABASE: myapp volumes: - db-data:/var/lib/mysqlvolumes: db-data:
主要な設定項目の解説
| 項目 | 役割 |
|---|---|
| services | 各コンテナ(サービス)を定義するセクション |
| build | Dockerfileからイメージをビルド |
| image | 既存のイメージを使用 |
| ports | ポートマッピング |
| volumes | データの永続化やファイル共有 |
| depends_on | コンテナの起動順序を制御 |
| environment | 環境変数の設定 |
Docker Composeの基本コマンド
以下のコマンドを覚えておけば、日常の開発は問題なくこなせます。
| コマンド | 用途 |
|---|---|
| docker compose up -d | 全サービスをバックグラウンドで起動 |
| docker compose down | 全サービスを停止・削除 |
| docker compose logs | 全サービスのログを確認 |
| docker compose ps | サービスの稼働状況を確認 |
| docker compose exec web bash | 特定のサービスにシェルでアクセス |
| docker compose build | イメージを再ビルド |
Docker Composeを使いこなせると、チーム開発の効率が飛躍的に向上します。新しいメンバーが参加しても、docker compose up -d 一発で開発環境が整うため、環境構築で悩む時間がなくなります。
実務で役立つDocker活用シーン5選
Dockerチュートリアルの知識を実務でどう活かすか、具体的な活用シーンを紹介します。株式会社アイティークロスでも、SESとして参画する様々なプロジェクトでDockerが活用されています。
1. ローカル開発環境の統一
チームメンバー全員が同じ開発環境を共有することは、品質向上に直結します。DockerfileとDocker Composeをリポジトリに含めておけば、OS・言語バージョン・ミドルウェアの差異による不具合を根本から解決できます。
実際に、大手自動車メーカーのシステム開発プロジェクトでは、数十人規模のチームがDockerで環境を統一することで、環境起因のバグを80%以上削減した事例もあります。
2. CI/CDパイプラインへの組み込み
GitHub ActionsやJenkinsなどのCI/CDツールとDockerを組み合わせると、コードのプッシュから自動テスト、ビルド、デプロイまでを自動化できます。テスト環境もコンテナで再現するため、テスト結果の信頼性が向上します。
3. マイクロサービスアーキテクチャ
マイクロサービスとは、大きなアプリケーションを小さな独立したサービスに分割する設計手法です。各サービスを個別のコンテナとして運用することで、それぞれ独立したデプロイやスケーリングが可能になります。
金融機関や官公庁のシステムでも、モノリスからマイクロサービスへの移行プロジェクトが増えています。Docker・Kubernetes(コンテナオーケストレーションツール)のスキルを持つエンジニアの需要は今後さらに高まるでしょう。
4. データベースのテスト環境構築
MySQL・PostgreSQL・MongoDBなどのデータベースをコンテナとして瞬時に立ち上げ、テストが終わったら破棄するという使い方もよくあります。本番データを汚す心配がなく、何度でもクリーンな状態から再テストできます。
5. レガシーシステムのモダナイゼーション
古いバージョンの言語やフレームワークで動作するレガシーシステムの保守にもDockerは活躍します。ホストOSに依存せず、古い環境をコンテナ内で再現できるため、環境構築の手間が大幅に削減されます。
特に製造業の業務システムでは、10年以上前に構築されたシステムを保守するケースも少なくありません。こうした場面でDockerの知識は大きな武器になります。
Dockerを学ぶうえでよくあるつまずきポイントと解決策
Dockerチュートリアルを進めるなかで、初心者がつまずきやすいポイントとその解決策をまとめました。
つまずき1:権限エラー(Permission denied)
Linuxでdockerコマンドを実行した際に「permission denied」が出る場合があります。これは現在のユーザーがdockerグループに入っていないことが原因です。
sudo usermod -aG docker $USER を実行し、再ログインすれば解決します。
つまずき2:ポートの競合
「port is already allocated」というエラーは、指定したポートが既に使用されていることを意味します。別のポート番号を指定するか、競合しているプロセスを停止してください。
つまずき3:コンテナが即座に終了する
コンテナを起動しても即座に停止してしまう場合は、フォアグラウンドで動作するプロセスが存在しないことが原因であることが多いです。CMDやENTRYPOINTの設定を確認しましょう。docker logs コンテナ名 でエラーログを確認することも有効です。
つまずき4:ディスク容量の不足
使い続けるとDockerイメージやコンテナ、ボリュームが蓄積されてディスクを圧迫します。以下のコマンドで不要なリソースを一括削除できます。
docker system prune -a
ただし、このコマンドは使用していないすべてのイメージやコンテナを削除するため、実行前に必要なものがないか確認してください。
つまずき5:ホストとコンテナ間のファイル共有がうまくいかない
ボリュームマウントの設定ミスが原因であることがほとんどです。パスの指定が正しいか、ホスト側のディレクトリが存在するかを確認してください。Docker Desktopの場合は、Settings > Resources > File sharingで共有するフォルダを追加する必要がある場合もあります。
Dockerスキルを活かしたキャリアアップの道筋
Dockerをはじめとするコンテナ技術は、現在のIT業界で必須スキルの一つになっています。ここでは、Dockerスキルを活かしたキャリアの方向性をご紹介します。
需要の高いスキルセット
Dockerを起点として、以下の技術を組み合わせて習得すると、エンジニアとしての市場価値が大きく向上します。
- Kubernetes(K8s):コンテナのオーケストレーションツール。大規模なシステムの運用に不可欠
- AWS ECS / Fargate:AWSでのコンテナ運用サービス。クラウドインフラのスキルと組み合わせると強力
- Terraform / Ansible:インフラのコード化(IaC)ツール。Dockerと合わせてDevOpsの基盤を構築
- GitHub Actions / Jenkins:CI/CDパイプラインの構築。Dockerと組み合わせて自動デプロイを実現
SES業界でのDocker活用
SES(システムエンジニアリングサービス)の現場でも、Dockerのスキルは高く評価されています。株式会社アイティークロスでは、Java、PHP、Python、JavaScript、AWSなど幅広い技術スタックを扱うプロジェクトに参画しており、Dockerはそれらの開発基盤として頻繁に利用されています。
未経験からIT業界に転職する方でも、Dockerの基本操作を習得しておくことで、現場での即戦力として評価されやすくなります。実際に、アイティークロスでは異業種からの転職者が5割以上を占めており、充実した研修制度のもとでDockerをはじめとする実務スキルを身につけるエンジニアが多くいます。
名古屋エリアでIT転職を検討されている方は、こうしたコンテナ技術のスキルを武器にすることで、大手自動車メーカーや金融機関、官公庁など多様な案件へのアサイン機会が広がります。年間休日125日、残業月平均12.3時間という働きやすい環境のなかでスキルアップを目指せるのも大きな魅力です。
学習のロードマップ
Docker初心者の方には、以下の順序で学習を進めることをおすすめします。
- Dockerの基本概念とコマンド操作(本記事の内容)
- Dockerfileによるカスタムイメージ作成
- Docker Composeで複数コンテナの管理
- AWSやGCPでのコンテナデプロイ
- Kubernetesの基礎
- CI/CDパイプラインへの組み込み
一つひとつステップを踏むことで、着実にスキルを積み上げていけます。Linuxの基礎知識やネットワークの基本も並行して学ぶと理解が深まります。関連記事として、Linuxコマンドの基礎やAWSの入門記事もぜひご参照ください。
まとめ
この記事では、Dockerチュートリアルとして初心者が押さえるべき基礎から実践的な活用法までを解説しました。最後に、重要なポイントを振り返りましょう。
- Dockerはアプリケーションをコンテナという軽量な仮想環境で動かすプラットフォーム
- Dockerイメージは設計図、コンテナはその実行環境という関係
- docker run、docker ps、docker stopなどの基本コマンドを最初に習得すべき
- Dockerfileを書くことで、プロジェクト固有の環境をコード化できる
- Docker Composeで複数コンテナを一括管理し、チーム開発を効率化
- 実務ではCI/CD、マイクロサービス、テスト環境構築など幅広く活用されている
- DockerからKubernetes、AWSへとスキルを広げることでキャリアアップにつながる
Dockerは一度身につけると、あらゆるプロジェクトで活かせる汎用的なスキルです。まずは本記事のチュートリアルに沿って手を動かし、コンテナ操作の感覚をつかんでいただければ幸いです。
よくある質問(FAQ)
Dockerとは何ですか?初心者にもわかるように教えてください。
Dockerとは、アプリケーションを「コンテナ」という独立した軽量な環境にまとめて動かすためのプラットフォームです。従来の仮想マシンと異なりOSカーネルを共有するため、起動が数秒と高速で、リソース消費も少ないのが特徴です。開発環境の統一やデプロイの効率化に広く使われています。
DockerとVirtualBoxなどの仮想マシンは何が違いますか?
仮想マシンはゲストOS全体をエミュレートするため、起動に数分かかりリソース消費も大きくなります。一方、DockerコンテナはホストOSのカーネルを共有し、アプリケーションとその依存関係のみをパッケージするため、起動が数秒で完了しメモリやCPUの消費も最小限です。軽量で高速な点がDockerの最大の利点です。
Dockerの学習にプログラミング経験は必要ですか?
プログラミング経験がなくてもDockerの基本操作は学べます。ただし、Linuxのコマンドライン操作に最低限慣れておくと学習がスムーズに進みます。また、実務でDockerを活用するにはWebアプリケーションやデータベースの基礎知識があるとより理解が深まります。
Docker Composeはどのような場面で使いますか?
Docker Composeは、複数のコンテナを組み合わせてアプリケーションを構成する場面で使います。たとえば、Webサーバー(Nginx)、アプリケーション(Python/PHP)、データベース(MySQL)の3つのコンテナを連携させる場合、docker-compose.ymlファイルに構成を記述し、docker compose upコマンド一つで全てを起動・管理できます。
Dockerのスキルはエンジニア転職に有利ですか?
はい、非常に有利です。2024年現在、Dockerは開発現場の標準ツールとなっており、求人票でもDockerの経験を求めるケースが増えています。特にDevOps、クラウドインフラ、バックエンド開発の分野ではDockerスキルが必須に近い状況です。さらにKubernetesやAWSのコンテナサービスへとスキルを広げることで、市場価値が大幅に向上します。
WindowsのHome EditionでもDockerは使えますか?
はい、使えます。以前はWindows Pro以上が必要でしたが、現在はWSL 2(Windows Subsystem for Linux 2)を有効にすることで、Windows Home EditionでもDocker Desktopを利用できます。WSL 2はWindowsの設定から有効化できますので、公式ドキュメントの手順に従ってセットアップしてください。
Dockerの次に学ぶべき技術は何ですか?
Dockerの基本を習得した後は、Kubernetes(K8s)を学ぶことをおすすめします。Kubernetesは大規模なコンテナの運用管理を行うオーケストレーションツールで、実務での需要が非常に高いです。並行して、AWS ECS/FargateなどのクラウドコンテナサービスやCI/CDツール(GitHub Actions、Jenkins)も学ぶと、DevOpsエンジニアとしてのキャリアが広がります。
コメント