Docker チュートリアル

Docker はオープンソースのアプリケーションコンテナエンジンであり、Go 言語そして Apache2.0 ライセンスに従ってオープンソース化されています。

Docker を使用すると、開発者はアプリケーションと依存パッケージを軽量で可搬性のあるコンテナにパッケージ化し、あらゆる一般的な Linux マシンに公開できます。また、仮想化も実現できます。

コンテナは完全にサンドボックスメカニズムを使用しており、相互にインターフェースを持ちません(iPhone のアプリに似ています)。さらに重要なのは、コンテナのパフォーマンスオーバーヘッドが非常に低いことです。

Docker は 17.03 以降、CE(Community Edition: コミュニティ版)と EE(Enterprise Edition: エンタープライズ版)に分かれています。コミュニティ版で十分です。


誰がこのチュートリアルを読むべきですか?

このチュートリアルは、運用保守エンジニアやバックエンド開発者に適しています。このチュートリアルを通じて、Docker の使い方を段階的に学ぶことができます。


このチュートリアルを読む前に必要な知識

このチュートリアルを読む前に、Linux の一般的なコマンドを習得している必要があります。当サイトのLinux チュートリアルで関連コマンドを学ぶことができます。


Docker の応用シナリオ

  • マイクロサービスアーキテクチャ:各サービスを独立してコンテナ化し、管理と拡張を容易にします。

  • CI/CD パイプライン:Jenkins/GitLab CI と統合し、自動ビルドとテストを実現します。

  • 開発環境の標準化:新メンバーはワンクリックで一連の依存サービス(データベース、メッセージキューなど)を起動できます。

  • クラウドネイティブ基盤:Kubernetes などのオーケストレーションツールは Docker に基づいてコンテナクラスタを管理します。


中核となる強み

  • クロスプラットフォームの一貫性:「自分のマシンでは動く」という問題を解決し、開発・テスト・本番環境の一貫性を確保します。
  • リソース効率:コンテナはホストのカーネルを直接共有し、OS 全体を仮想化する必要がないため、メモリと CPU を節約します。
  • 迅速なデプロイ:コンテナを秒単位で起動し、自動スケーリングをサポートします。
  • 分離性:各コンテナは独立したファイルシステム、ネットワーク、プロセス空間を持ちます。

中核となる概念

  • コンテナ(Container):軽量な実行インスタンスで、アプリケーションコード、ランタイム環境、依存ライブラリを含みます。イメージから作成され、他のコンテナと分離され、ホスト OS のカーネルを共有します(仮想マシンより効率的です)。
  • イメージ(Image):読み取り専用のテンプレートで、コンテナの実行環境(OS、ソフトウェア設定など)を定義します。レイヤーストレージ(Layer)によりスペースとビルド速度を最適化します。
  • Dockerfile:テキストファイルで、イメージを自動的にビルドする方法を記述します(例:ベースイメージの指定、ソフトウェアのインストール、ファイルのコピーなど)。
  • レジストリ(Registry):イメージを保存・配布するプラットフォームで、Docker Hub(公式パブリックリポジトリ)やプライベートリポジトリ(Harbor など)があります。

基本コマンド

実例

# イメージを取得(例:公式 Nginx イメージ)
docker pull nginx

# コンテナを実行(-d バックグラウンド実行、-p ポートマッピング)
docker run -d -p 80:80 nginx

# 実行中のコンテナを確認
docker ps

# イメージをビルド(現在のディレクトリの Dockerfile に基づく)
docker build -t my-app .

# コンテナ内部に入る
docker exec -it <コンテナ ID> /bin/bash

関連リンク

Docker 公式サイト:https://www.docker.com

GitHub Docker ソースコード:https://github.com/docker

その他の拡張