今日は、「Docker(ドッカー)」についてお話ししたいと思います。最近、開発環境を整えるためにDockerを使う方が増えてきましたが、まだまだ初心者の方も多いのではないでしょうか。
そこで、Dockerの基本的な使い方やコマンドについて、わかりやすく解説していきます。
Dockerとは?なぜ使うのか
Dockerは、コンテナー型仮想化技術を活用したプラットフォームであり、一貫した開発環境を構築するためのツールです。
伝統的な仮想化技術と異なり、DockerはホストOSのリソースを共有しつつ、独立したアプリケーション環境を提供します。
ドッカーはパソコンの中のパソコンだと思ってもよいでしょう。
パソコンの中に仮想環境を作って、その中にアプリやストレージを構築したのが、Dockerです。
コンテナ仮想化とは?
コンテナ仮想化とは、単一のホストOS上で複数の独立したアプリケーション実行環境(コンテナ)を動作させる技術です。これにより、開発者は「どの環境でも変わらない実行環境」を作り出すことができます。
ハイパーバイザ型仮想化との違い
従来の仮想化技術であるハイパーバイザ型仮想化(例:VirtualBoxやVMware)は、ホストOSの上にゲストOSをフルセットで起動させます。
一方、DockerはホストOSのリソースを直接利用し、アプリケーションとその依存関係を「コンテナ」で管理します。この違いにより、Dockerは以下のメリットを提供します。
- パフォーマンス向上:ホストOSのリソースを直接利用するため、軽量かつ高速に動作
- セットアップの容易さ:コンテナイメージを取得するだけで開発環境を準備可能
- ポータビリティの向上:開発者の環境と本番環境の差異を最小限に抑えられる
Dockerの基本概念
コンテナとイメージの違い
Dockerでは、アプリケーションを「イメージ」として保存し、そのイメージから「コンテナ」を作成して実行します。イメージはアプリケーションの実行に必要なファイルや設定を含んでおり、コンテナはそのイメージを実行した状態のことを指します。
Dockerのアーキテクチャ
Dockerは、クライアントとサーバーのアーキテクチャを持っています。クライアントはDockerコマンドを通じてDockerデーモンに指示を出し、デーモンは実際にコンテナを管理します。この仕組みにより、ユーザーは簡単にコンテナを操作することができます。
Dockerのインストール
Dockerを使うためには、まずインストールが必要です。
Dockerのエコシステム
Dockerは単なる仮想環境を作るツールではなく、効率的に開発を進めるためのエコシステムを備えています。その主要な要素を紹介します。
Docker Hubとは?
Docker Hubは、Dockerイメージの管理・共有を行うプラットフォームです。開発者は、Docker Hubから必要なイメージを取得し、自身の環境で利用することができます。
Docker Compose
Docker Composeは、複数のコンテナを組み合わせて動作させるためのツールです。たとえば、アプリケーションサーバーとデータベースサーバーを連携させた開発環境を一括で構築することが可能です。
Kubernetes(K8s)
Kubernetesは、複数のコンテナを大規模に管理・運用するためのオープンソースプラットフォームです。Dockerと併せてKubernetesを導入するケースも増えています。
Dockerの基本コマンド
よく使うDockerコマンドを用途別にまとめてみました。
Dockerのバージョンを確認
docker version
イメージ関連のコマンド
# イメージの一覧表示
docker images
# イメージのダウンロード
docker pull <イメージ名>:<タグ>
# イメージのビルド
docker build -t <イメージ名>:<タグ> .
# イメージの削除
docker rmi <イメージID or イメージ名>
# 未使用のイメージを一括削除
docker image prune
# イメージの詳細情報表示
docker image inspect <イメージID>
コンテナ操作のコマンド
# コンテナの起動
docker run <オプション> <イメージ名>
docker run -d -p 8080:80 nginx # バックグラウンドでnginxを起動
# よく使用するrunのオプション
-d # バックグラウンドで実行
-p 80:80 # ポートフォワーディング(ホスト:コンテナ)
-v # ボリュームのマウント
--name # コンテナに名前を付ける
--rm # 終了時にコンテナを自動削除
-e # 環境変数の設定
# 実行中のコンテナ一覧
docker ps
# すべてのコンテナ一覧(停止中含む)
docker ps -a
# コンテナの停止
docker stop <コンテナID or コンテナ名>
# コンテナの開始
docker start <コンテナID or コンテナ名>
# コンテナの再起動
docker restart <コンテナID or コンテナ名>
# コンテナの削除
docker rm <コンテナID or コンテナ名>
# 未使用のコンテナを一括削除
docker container prune
コンテナとのやり取り
# 実行中のコンテナに入る
docker exec -it <コンテナID> /bin/bash
docker exec -it <コンテナID> /bin/sh # Alpine Linuxの場合
# コンテナのログを表示
docker logs <コンテナID>
docker logs -f <コンテナID> # リアルタイムでログを追跡
# コンテナ内のファイルをホストにコピー
docker cp <コンテナID>:/コンテナ内のパス /ホストのパス
# ホストのファイルをコンテナにコピー
docker cp /ホストのパス <コンテナID>:/コンテナ内のパス
ネットワーク関連
# ネットワーク一覧の表示
docker network ls
# ネットワークの作成
docker network create <ネットワーク名>
# ネットワークの詳細情報
docker network inspect <ネットワーク名>
# ネットワークの削除
docker network rm <ネットワーク名>
ボリューム関連
# ボリューム一覧の表示
docker volume ls
# ボリュームの作成
docker volume create <ボリューム名>
# ボリュームの詳細情報
docker volume inspect <ボリューム名>
# 未使用のボリュームを削除
docker volume prune
システム情報とクリーンアップ
# Dockerシステムの情報表示
docker info
# ディスク使用量の確認
docker system df
# 未使用リソースの一括削除
docker system prune # 未使用のコンテナ、ネットワーク、イメージ、キャッシュを削除
docker system prune -a # 未使用のリソースをより強力に削除
# Dockerのステータス確認
docker stats
Docker Compose関連
# サービスの起動
docker-compose up
docker-compose up -d # バックグラウンドで起動
# サービスの停止
docker-compose down
# サービスの再構築と起動
docker-compose up --build
# コンテナのステータス確認
docker-compose ps
# サービスのログ表示
docker-compose logs
# 特定のサービスでコマンドを実行
docker-compose exec <サービス名> <コマンド>
これらのコマンドは、必要に応じて組み合わせて使用することができます。
また、各コマンドには他にも多くのオプションがありますので、docker <コマンド> –helpで詳細を確認することができます。
コンテナー作成の簡単な例
簡単な例としてDockerの hello-world コンテナを作成してみましょう。
Dockerのインストール確認
Docker Desktopのインストールが完了したら、ターミナルまたはコマンドプロンプトを開き、以下のコマンドを実行してDockerが正しくインストールされていることを確認します。
docker --version
Docker Desktopの起動確認
まず、WindowsのタスクバーにDockerのアイコンが表示されているか確認し、表示されていない場合は Docker Desktop を起動します。
hello-world イメージの取得
次に、Docker Hub から hello-world
イメージを取得します。以下のコマンドを実行します。
docker pull hello-world
hello-world コンテナの実行
イメージが取得できたら、以下のコマンドを実行して hello-world
コンテナを起動します。
docker run hello-world
実行結果の確認
コンテナが正常に実行されると、以下のようなメッセージが表示されます。
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
これで、Dockerの hello-world
コンテナを作成して実行する手順は完了です。
Dockerを使った開発のメリット
Dockerを導入することで、開発環境やデプロイの管理が大幅に効率化されます。特に次のような点で開発プロセスが改善されます。
環境の差異がなくなる
開発環境・テスト環境・本番環境で異なる設定が存在すると、動作が不安定になる原因となります。Dockerを用いれば、どの環境でも同じ条件で動作するため、この問題を解決できます。
インフラの自動化が可能
Dockerfile を利用することで、環境構築の手順を一括で管理できます。
まとめ
Dockerは、アプリケーション開発、デプロイ、運用を劇的に効率化するテクノロジーであり、今後の開発シーンにおいては欠かせないツールだといえます。
本記事では、Dockerの基本概念、導入方法、基本コマンドについて説明しました。
Dockerを活用することで、開発の柔軟性が増し、環境管理の負担が軽減されます。
まずは、Dockerをインストールし、簡単なコンテナを動作させるところから始めてみましょう。