「開発環境の構築に毎回何時間もかかる」「本番サーバーと開発環境で動作が違う」――中小企業のIT現場でこうした悩みを抱えている方は多いのではないでしょうか。LinuxとDockerを組み合わせることで、これらの課題を根本から解決できます。
本記事では、Linux環境でのDocker活用に焦点を当て、コンテナ技術の基本概念からインストール手順、実践的な使い方までを初心者にもわかりやすく解説します。Linuxの基本操作に不安がある方は、先にLinuxとは?をわかりやすく解説した入門記事をご覧ください。
なぜLinux×Dockerなのか?中小企業が注目すべき3つの理由
Dockerはさまざまなプラットフォームで動作しますが、Linux上でDockerを使うことには特別なメリットがあります。中小企業のIT担当者がこの組み合わせに注目すべき理由を3つ解説します。
理由1:Dockerのネイティブ環境がLinuxである
Dockerのコンテナ技術は、もともとLinuxカーネルの機能(名前空間やcgroups)を基盤としています。WindowsやmacOSでDockerを動かす場合、内部的にはLinux仮想マシンが動いています。つまり、Linux上でDockerを動かすのが最も自然で高パフォーマンスな使い方です。
余計な仮想化レイヤーがないため、コンテナの起動が速く、リソース消費も最小限に抑えられます。限られたサーバーリソースで運用する中小企業にとって、これは大きなメリットです。
理由2:サーバー運用コストを大幅に削減できる
従来の方式では、Webサーバー、データベース、アプリケーションサーバーをそれぞれ別のサーバー(または仮想マシン)で運用するのが一般的でした。Dockerを使えば、1台のLinuxサーバーに複数のサービスを安全に共存させることが可能です。
コンテナはプロセスレベルで隔離されるため、異なるサービスが互いに干渉するリスクも低く、ハードウェア費用やクラウドの月額コストを削減できます。
理由3:環境の再現性が格段に向上する
「開発環境では動くのに本番環境では動かない」という問題は、IT現場でよく発生します。Dockerを使えば、開発・ステージング・本番の各環境をまったく同じ状態で再現できます。これにより、デプロイ時のトラブルが大幅に減少し、少人数のIT部門でも安定した運用が実現します。
Dockerの基本的な概念についてさらに深く知りたい方は、Docker入門完全ガイドもあわせてご覧ください。
Dockerの基本概念をLinuxの視点から理解する
Dockerを正しく使いこなすためには、基本概念をしっかり理解することが重要です。ここではLinuxとの関係を意識しながら、主要な概念を解説します。
コンテナと仮想マシンの違い
仮想マシン(VM)は、ハードウェアをソフトウェアでエミュレートし、その上にゲストOSを丸ごとインストールします。一方、コンテナはホストOSのLinuxカーネルを共有し、アプリケーションの実行に必要な部分だけを隔離します。
| 比較項目 | 仮想マシン | コンテナ(Docker) |
|---|---|---|
| 起動時間 | 数分 | 数秒 |
| ディスク使用量 | 数GB〜数十GB | 数MB〜数百MB |
| リソース効率 | 低い(ゲストOS分のオーバーヘッド) | 高い(カーネル共有) |
| 隔離レベル | 強い(完全なOS分離) | プロセスレベル |
| ポータビリティ | VMイメージが大きい | 軽量で移動しやすい |
イメージ・コンテナ・レジストリの関係
Dockerの世界では、3つの重要な概念があります。
イメージ(Image)は、コンテナを作成するための設計図です。アプリケーションとその依存関係がすべて含まれた読み取り専用のテンプレートです。
コンテナ(Container)は、イメージから作成された実行中のインスタンスです。同じイメージから複数のコンテナを作成でき、それぞれ独立して動作します。
レジストリ(Registry)は、イメージを保存・配布する場所です。Docker Hubが最も有名な公開レジストリで、数万のイメージが公開されています。
Linuxカーネルの機能がDockerを支えている
Dockerの隔離機能は、Linuxカーネルの以下の機能に依存しています。
- Namespaces(名前空間):プロセス、ネットワーク、ファイルシステムなどをコンテナごとに隔離
- cgroups(コントロールグループ):CPU、メモリなどのリソース使用量をコンテナごとに制限
- Union File System:イメージのレイヤー構造を実現し、ディスク使用量を最適化
これらはLinuxの基盤技術であり、Linuxのプロセス管理の知識があると理解が深まります。
LinuxへのDockerインストール手順
ここでは、Ubuntu/Debian系およびCentOS/Rocky Linux系の両方のインストール手順を紹介します。UbuntuサーバーのセットアップやCentOS/Rocky Linuxガイドもあわせて参考にしてください。
Ubuntu/Debian系でのインストール
まず、古いバージョンのDockerが入っている場合は削除し、公式リポジトリからインストールします。
# 古いバージョンの削除
sudo apt remove docker docker-engine docker.io containerd runc
# 必要なパッケージのインストール
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
# Docker公式GPGキーの追加
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# リポジトリの追加
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Dockerのインストール
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
CentOS/Rocky Linux系でのインストール
# 古いバージョンの削除
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
# リポジトリの追加
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# Dockerのインストール
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Dockerの起動と自動起動設定
sudo systemctl start docker
sudo systemctl enable docker
一般ユーザーでDockerを実行する設定
デフォルトでは、Dockerコマンドにはroot権限が必要です。毎回sudoを付けるのは面倒なので、ユーザーをdockerグループに追加しましょう。
# dockerグループにユーザーを追加
sudo usermod -aG docker $USER
# グループ変更を反映(再ログインが必要)
newgrp docker
# 動作確認
docker run hello-world
ユーザーやグループの管理については、Linuxのユーザー・グループ管理を参照してください。
Dockerの基本コマンドを実践的に学ぶ
インストールが完了したら、基本的なDockerコマンドを実際に操作しながら学びましょう。Linuxコマンド一覧の知識がある方は、Docker特有のコマンド体系をスムーズに理解できるはずです。
イメージの取得と管理
# Docker Hubからイメージを取得
docker pull nginx:latest
# ローカルに保存されたイメージの一覧表示
docker images
# 不要なイメージの削除
docker rmi nginx:latest
# 使用していないイメージの一括削除
docker image prune -a
コンテナの起動・停止・削除
# コンテナをバックグラウンドで起動
docker run -d --name my-nginx -p 8080:80 nginx:latest
# 実行中のコンテナ一覧
docker ps
# すべてのコンテナ一覧(停止中も含む)
docker ps -a
# コンテナの停止
docker stop my-nginx
# コンテナの再開
docker start my-nginx
# コンテナの削除(停止後に実行)
docker rm my-nginx
コンテナの中に入る・ログを確認する
# コンテナ内でbashを起動して操作する
docker exec -it my-nginx /bin/bash
# コンテナのログを確認
docker logs my-nginx
# ログをリアルタイムで監視
docker logs -f my-nginx
# コンテナのリソース使用状況を確認
docker stats
コンテナ内の操作では、通常のLinuxコマンドが使えます。ただし、コンテナのイメージによってはコマンドが限定されている場合もあります。
Dockerfileの書き方とイメージのビルド
既存のイメージをそのまま使うだけでなく、自分のアプリケーションに合わせたカスタムイメージを作成することが実務では重要です。Dockerfileは、そのための設計書です。
Dockerfileの基本構文
# ベースイメージの指定
FROM node:18-alpine
# 作業ディレクトリの設定
WORKDIR /app
# 依存関係ファイルのコピー(キャッシュ活用のためアプリコードより先)
COPY package*.json ./
# 依存関係のインストール
RUN npm ci --only=production
# アプリケーションコードのコピー
COPY . .
# ポートの公開
EXPOSE 3000
# コンテナ起動時に実行するコマンド
CMD ["node", "server.js"]
効率的なDockerfileを書くためのポイント
Dockerfileの品質は、ビルド時間やイメージサイズに大きく影響します。以下のポイントを意識しましょう。
- 軽量なベースイメージを使う:alpineタグのイメージは通常版の数分の一のサイズです
- レイヤーキャッシュを活用する:変更頻度が低いもの(依存関係など)を先にCOPYする
- マルチステージビルドを活用する:ビルド環境と実行環境を分離し、最終イメージを小さくする
- .dockerignoreファイルを使う:node_modulesやログファイルなど不要なファイルを除外する
- RUN命令をまとめる:不要なレイヤーを増やさないために、関連するコマンドは&&で連結する
イメージのビルドと実行
# イメージのビルド
docker build -t my-app:1.0 .
# ビルドしたイメージの確認
docker images my-app
# コンテナとして実行
docker run -d --name my-app -p 3000:3000 my-app:1.0
Dockerの基本をさらに深めたい方は、Dockerとは?初心者向け解説もあわせてお読みください。
Docker Composeで複数コンテナを管理する
実際のアプリケーションでは、Webサーバー、アプリケーション、データベースなど複数のサービスが連携して動作します。Docker Composeを使えば、これらをまとめて管理できます。
docker-compose.ymlの基本
以下は、WordPressとMySQLを組み合わせた典型的な構成例です。
version: '3.8'
services:
wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress_password
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress_data:/var/www/html
depends_on:
- db
restart: always
db:
image: mysql:8.0
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress_password
MYSQL_ROOT_PASSWORD: root_password
volumes:
- db_data:/var/lib/mysql
restart: always
volumes:
wordpress_data:
db_data:
Docker Composeの基本操作
# すべてのサービスをバックグラウンドで起動
docker compose up -d
# サービスの状態確認
docker compose ps
# ログの確認
docker compose logs -f
# すべてのサービスを停止
docker compose down
# ボリュームも含めて完全に削除
docker compose down -v
中小企業の実務で役立つDocker活用パターン
Docker の基本操作を理解したところで、中小企業のIT現場で実際に使える活用パターンを紹介します。
パターン1:開発環境の統一
新しいメンバーが参加するたびに環境構築に時間を取られていませんか?docker-compose.ymlをリポジトリに含めておけば、docker compose upの一発で全員が同じ開発環境を手に入れることができます。
パターン2:既存サービスのコンテナ化
現在稼働中のWebアプリケーションをDockerコンテナに移行すれば、サーバー移行やスケールアウトが容易になります。まずは開発環境からコンテナ化を始め、徐々に本番環境に展開していくのが安全な進め方です。
パターン3:テスト環境の迅速な構築と破棄
新機能のテストやバグ修正の検証のたびに専用の環境が必要になることがあります。Dockerなら数秒で新しいテスト環境を作り、用が済んだら即座に破棄できます。
パターン4:社内ツールの簡単デプロイ
Gitea(Gitサーバー)、Redmine(プロジェクト管理)、Nextcloud(ファイル共有)など、多くのオープンソースツールが公式Dockerイメージを提供しています。これらを活用すれば、クラウドサービスの月額費用を抑えながら社内インフラを充実させることが可能です。
Linux×Dockerのセキュリティとトラブルシューティング
Dockerを安全に運用するためには、セキュリティの基本を押さえておく必要があります。LinuxのファイアウォールとセキュリティやLinuxサーバーのセキュリティ強化の知識と組み合わせることで、より堅牢な環境を構築できます。
セキュリティの基本対策
- 公式イメージを使用する:Docker Hubの「Official Image」バッジがあるイメージを優先的に使う
- イメージを最新に保つ:定期的にイメージを更新し、脆弱性パッチを適用する
- rootユーザーで実行しない:Dockerfile内でUSER命令を使い、非rootユーザーで実行する
- 不要なポートを公開しない:必要なポートだけをホストにマッピングする
- 機密情報をイメージに含めない:パスワードやAPIキーは環境変数やDocker Secretsで管理する
よくあるトラブルと対処法
「Permission denied」エラーが出る場合は、ユーザーがdockerグループに追加されているか確認しましょう。Linuxのファイルパーミッションの知識が役立ちます。
# dockerグループへの所属確認
groups $USER
# ボリュームマウント時のパーミッション問題を解決
docker run -v /host/path:/container/path:z my-image
ディスク容量が不足する場合は、不要なイメージやコンテナを削除します。Linuxのディスク管理の知識も参考になります。
# Dockerのディスク使用状況を確認
docker system df
# 不要なリソースを一括削除
docker system prune -a --volumes
コンテナがすぐに停止する場合は、ログを確認してエラー原因を特定します。
# 停止したコンテナのログ確認
docker logs my-container
# コンテナの詳細情報を確認
docker inspect my-container
まとめ:LinuxとDockerで効率的なIT運用を実現しよう
本記事では、Linux環境でDockerを活用するための基本知識と実践的な使い方を解説しました。ポイントをまとめます。
- DockerはLinuxカーネルの機能を基盤とした技術であり、Linux上で最も効率的に動作する
- コンテナは仮想マシンより軽量・高速で、中小企業のサーバー運用コスト削減に貢献する
- Dockerfileを活用すれば、カスタムイメージを効率的に作成できる
- Docker Composeで複数コンテナの管理が容易になる
- セキュリティ対策を忘れずに、公式イメージの使用と定期的な更新を心がける
まずは開発環境のDocker化から始めて、徐々に活用範囲を広げていくのがおすすめです。Linuxの基礎力をさらに高めたい方は、Linuxコマンド実践ガイドやシェルスクリプト入門も参考にしてください。
また、AIを活用した開発環境の構築に興味がある方は、Claude Codeセットアップガイドもぜひご覧ください。Docker上でAI開発ツールを動かすことで、さらに効率的な開発フローを構築できます。
関連記事
AWS CloudFrontでサイト高速化|CDN設定からキャッシュ戦略まで実践解説
AWS CloudWatchで監視・アラート設定|運用担当者のための実践ガイド
AWS CodePipelineでCI/CD構築|コード変更から本番デプロイまでの自動化
AWS Cost Explorerでコスト可視化|ムダを見つけて月額費用を削減する実践術
AWS ECS/Fargateでコンテナ運用|Docker→本番デプロイの実践ガイド
AWS IAMのベストプラクティス|最小権限の原則を実務で実装する方法
AWS RDSの実務ガイド|データベース構築・バックアップ・パフォーマンスチューニング
AWS S3の実務活用ガイド|バケット設計・アクセス制御・コスト最適化の実践