Dockerとは何か:コンテナの基本概念
Dockerはアプリケーションとその実行環境を「コンテナ」という単位でパッケージ化するツールです。「自分のMacでは動くのに本番サーバーでは動かない」という問題を解消し、開発・ステージング・本番環境の差異をなくせます。コンテナはVMより軽量で起動が速く、1台のサーバーで多数のコンテナを効率よく動かせます。2025年現在、Dockerはバックエンドエンジニアの必須スキルとなっています。
従来の仮想マシン(VM)との比較:VMはOSごと仮想化するため起動に数分かかりますが、Dockerコンテナはプロセス起動と同等の数秒で立ち上がります。DockerHubには公式イメージが10万件以上公開されており、nginxやPostgreSQLなど主要ソフトウェアをワンコマンドで起動できます。
- 環境の再現性:Dockerfileによりどの環境でも同一の実行環境を再現、「動かない」問題を根絶
- 軽量・高速:VMと比べてメモリ使用量が70〜80%削減、起動時間は数秒
- DockerHub活用:10万件以上の公式・コミュニティイメージから即座に環境構築が可能
- CI/CDとの親和性:GitHub ActionsなどのCI/CDパイプラインでDockerを使うと環境依存の問題がゼロに
Docker基本コマンドと使い方
最初に覚えるDockerコマンドは「docker pull(イメージ取得)」「docker run(コンテナ起動)」「docker ps(コンテナ一覧)」「docker stop(停止)」「docker build(イメージビルド)」「docker-compose up(複数コンテナ起動)」の6つです。Dockerfileにアプリの実行手順を記述し、docker buildでイメージを作り、docker runで起動するのが基本フローです。実際にnginxやPostgreSQLコンテナを起動して感覚を掴みましょう。
Dockerfileの書き方のポイント:FROMで基底イメージを指定、COPYでソースコードをコピー、RUNで依存パッケージをインストール、CMDでコンテナ起動時のコマンドを定義します。マルチステージビルドを使うと本番イメージのサイズを大幅に削減できます(Node.jsアプリで1GB→100MB程度)。
- docker run:-p 8080:80でポートマッピング、-v でボリュームマウント、-e で環境変数を指定
- docker build:-t でイメージ名とタグを指定、--no-cacheでキャッシュ無効化ビルド
- マルチステージビルド:ビルド用とランタイム用を分けることで本番イメージを軽量化
docker-composeで複数サービスを管理する
実際のWebアプリ開発では「フロントエンド+バックエンドAPI+データベース」など複数のサービスを連携させる必要があります。docker-compose.ymlに各サービスの設定を記述すると、docker-compose upの1コマンドで全サービスを一括起動できます。ローカル開発環境のdocker-compose化は開発チームへのオンボーディングを大幅に短縮できるため、チーム開発での評価も高まります。
docker-compose.ymlの構成例:servicesセクションにapp(Node.js)・db(PostgreSQL)・cache(Redis)を定義し、networksで各サービスを接続します。volumesを使うとデータベースのデータをコンテナ削除後も永続化できます。.envファイルとの組み合わせで環境変数の管理も容易になります。
- サービス連携:複数コンテナをdependsで起動順序を制御し、networksで安全に通信
- データ永続化:named volumeでDBデータをコンテナライフサイクルから独立して管理
- オンボーディング短縮:docker-compose up一発で環境構築、新メンバーの環境セットアップが数分で完了
Kubernetesの役割とDockerとの違い
Dockerは単一サーバー上のコンテナ管理が得意ですが、数十〜数百台のサーバーにコンテナをスケールさせるには限界があります。Kubernetes(k8s)は複数サーバー上のコンテナを自動管理するオーケストレーションツールで、「自動スケーリング」「障害時の自動再起動」「ローリングデプロイ」「ロードバランシング」を実現します。大規模サービスの本番運用ではほぼ必須の技術です。
Kubernetesの採用状況:2025年時点で従業員1,000人以上のIT企業の約70%がKubernetesを本番運用で使用しています(CNCF調査)。エンジニアの採用面接でk8sの経験を問われるケースが急増しており、DevOps・SREポジションでは特に重視されます。
- 自動スケーリング(HPA):CPUやメモリ使用率に応じてPod数を自動調整、トラフィック急増に対応
- セルフヒーリング:クラッシュしたPodを自動再起動、ノード障害時は別ノードにPodを移動
- ローリングデプロイ:ダウンタイムなしでアプリを更新、問題発生時はロールバックも自動化
Kubernetes主要リソースの理解
Kubernetesを理解するためのキーコンセプトは「Pod(コンテナの最小単位)」「Deployment(Podの管理・スケーリング)」「Service(Podへのネットワークアクセス)」「Ingress(外部からのトラフィックルーティング)」「ConfigMap/Secret(設定・機密情報の管理)」です。minikubeを使うとローカルでKubernetes環境を構築でき、実際にkubectlコマンドを触りながら学習できます。
コンテナ技術のキャリアへの活かし方
Docker/Kubernetesのスキルはインフラエンジニア・SREへの転職やキャリアアップに直結します。AWSのECS/EKS、Google CloudのGKE、AzureのAKSなどクラウド各社のマネージドKubernetesサービスと組み合わせるとさらに価値が上がります。Docker/k8sの実践経験をGitHubで公開されたdocker-compose.ymlやHelmチャートで示せると採用評価が大きく向上します。