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 など)があります。
基本コマンド
実例
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
その他の拡張