toggle holdings Engineering Handbook
  • toggle holdings Engineering Handbook
  • 🏫Chapter 1 : toggle holdings engineer 101
    • 📏バリューとポリシー
    • 💟勤務体制と福利厚生
    • 💻開発環境
    • 🐣基礎研修
      • 我々は何者か・何を目指すのか
      • エンジニアの道徳
      • エンジニアの自己理解
      • 意思決定と認知負荷
      • 効果的なコミュニケーションスキル
      • クリティカルシンキングとロジカルシンキング
      • 依頼の受け方、依頼の出し方
      • 効果的な質問の仕方
      • ミスの要因と対策
      • 成長マインドセット
      • 文書作成の基本
      • 技術ドキュメントの書き方
      • 会社の収益構造
      • Webアプリケーションの基本概念
      • HTTPとDNS
      • コンピューターネットワーク
      • メールの基本概念
      • VSCode
      • Typing
      • Linuxとシェル
      • Makefile
      • GitおよびGitHub概要
      • Git
      • GitHub
      • 要件定義
      • ソフトウェア設計とテスト
      • データベース
      • SQL
      • コンテナ技術
      • フロントエンド開発
      • バックエンド開発
      • Webアプリケーションのセキュリティと認証・認可
      • エラーメッセージの読み方
      • IaCツール
      • TypeScript
      • Python
      • MySQL
      • PostgreSQL
      • Redis
      • Docker
      • Pulumi
      • Google Apps Script
      • 推奨書籍・Webサイト
    • 🧑‍💻テックリード研修
      • 技術者がリーダーになることの重要性
      • テックリードの適格性と要件
      • テックリードのスキルセット
      • リーダーとしての自己成長
    • 📙マネージメント研修
      • エンジニアリングマネージャーの役割と責任
      • エンジニアリングマネージャーの適格性と要件
      • リーダーシップとコミュニケーション
      • プロジェクトマネジメント
      • 技術リーダーシップとイノベーション
      • パフォーマンス管理と成果の追跡
      • 変化管理と組織文化の推進
      • エンジニアリングマネージャーとしての倫理と責任
      • マネージャーとしての自己成長
    • 🤝エンジニア採用
      • 📨中途採用
      • 🥚新卒採用
    • 🛫オンボーディング
    • 📊人事制度
  • 🌐Chapter 2 : Products & Development
    • 🏢デベNAVI
    • 🧪トグルラボ
  • 📃Appendix
    • 用語集
    • 用語集(土地売買特化)
GitBook提供
このページ内
  • Dockerの基本
  • コンテナ仮想化とDockerの役割
  • イメージとコンテナの概念
  • Dockerのアーキテクチャと主要なコンポーネント
  • Dockerのインストールとセットアップ
  • Dockerのインストール方法と環境設定
  • Docker CLIの概要と基本的なコマンドの使用方法
  • コンテナの作成と管理
  • Dockerfileの作成とイメージのビルド
  • イメージのタグ付けとバージョン管理
  • コンテナの作成と起動オプションの設定
  • コンテナの監視とログの管理
  • ネットワーキングとストレージの管理
  • コンテナ間のネットワーキングと接続
  • ポートマッピングとホストとの連携
  • ボリュームの管理と永続化データの扱い
  • Docker Composeを使用した複数コンテナの管理
  • Docker Composeの概要と基本的な構成
  • 複数のコンテナの定義と連携
  • 環境変数の管理と共有ネットワークの設定
  • Dockerイメージのカスタマイズと拡張
  • ベースイメージの選択とカスタムイメージの作成
  • マルチステージビルドの利用と効果的なイメージの最適化
  • Dockerfileのベストプラクティスとセキュリティ考慮事項
  • デバッグとトラブルシューティング
  • Dockerのログとデバッグツールの活用
  • コンテナ内のシェルへのアクセスとデバッグ手法
  • 一般的な問題とトラブルシューティングのヒント
  • セキュリティとベストプラクティス
  • Dockerセキュリティの基本原則
  • イメージの脆弱性スキャンとセキュリティツールの利用
  • ネットワークセキュリティとアクセス制御の考慮事項
  • 実践的なシナリオと応用
  • 学習リソース
  1. Chapter 1 : toggle holdings engineer 101
  2. 基礎研修

Docker

現代のソフトウェア開発における重要なツールであるDockerはもはや必須知識と言えます。ここではコンテナ仮想化の基礎から始まり、イメージの作成と管理、ネットワーキング、デプロイ、セキュリティなどのトピックを学ぶための情報をまとめます。

Dockerの基本

コンテナ仮想化とDockerの役割

  • コンテナ仮想化: コンテナ仮想化は、アプリケーションやサービスを独立した環境で実行するための仮想化技術です。コンテナは軽量で独立しており、異なる環境での再現性とポータビリティを提供します。

  • Dockerの役割: Dockerは、コンテナ仮想化を実現するためのオープンソースプラットフォームです。Dockerは、アプリケーションやサービスをコンテナとしてパッケージ化し、簡単かつ効率的に配布、展開、実行することができます。

イメージとコンテナの概念

  • イメージ: イメージは、Dockerコンテナの起点となる静的なファイルシステムと実行するための設定を含んだファイルです。イメージはコンテナの元となるテンプレートであり、アプリケーションやサービスの実行環境を定義します。

  • コンテナ: コンテナは、イメージの実行可能なインスタンスです。イメージを基にして作成され、独立した環境でアプリケーションやサービスを実行します。コンテナは他のコンテナやホストシステムと隔離されており、リソースの制限やネットワークの設定などを持つ独自のランタイム環境を持ちます。

Dockerのアーキテクチャと主要なコンポーネント

  • Dockerデーモン (Docker Daemon): Dockerデーモンは、Dockerエンジンのバックエンドであり、コンテナの管理や操作を担当します。Dockerデーモンはホスト上で実行され、Dockerコマンドの実行やイメージの作成、コンテナの起動などの機能を提供します。

  • Dockerクライアント: Dockerクライアントは、Dockerデーモンに対してコマンドを発行するためのインターフェースです。Dockerコマンドラインインターフェース(CLI)やDocker APIを介してDockerデーモンと通信します。

  • Dockerレジストリ: Dockerレジストリは、Dockerイメージの保存と共有のための中央リポジトリです。公式のDocker Hubやプライベートなレジストリを利用して、イメージのプルやプッシュを行うことができます。

以上がDockerの基本的な概念と役割、アーキテクチャと主要なコンポーネントです。これらを理解することで、Dockerの利用と操作についてより深く学ぶことができます。

Dockerのインストールとセットアップ

以下では、Dockerのインストールとセットアップに関する項目をコマンドやコード例を交えて説明します。

Dockerのインストール方法と環境設定

UbuntuでDockerをインストールする手順は以下の通りです。

  1. パッケージインデックスの更新:

sudo apt update
  1. 必要なパッケージをインストール:

sudo apt install docker.io
  1. Dockerデーモンの起動と自動起動の設定:

sudo systemctl start docker
sudo systemctl enable docker

これにより、ユーザーがDockerコマンドを実行できるようになります。

Docker CLIの概要と基本的なコマンドの使用方法

Docker CLIは、Dockerコマンドラインインターフェースの略であり、Dockerコマンドを使用してDockerの操作を行います。

  • Dockerバージョンの確認:

docker version
  • Dockerイメージの取得:

docker pull <イメージ名>
  • イメージの一覧表示:

docker images
  • コンテナの起動:

docker run <オプション> <イメージ名>
  • 起動中のコンテナの一覧表示:

docker ps
  • コンテナの停止:

docker stop <コンテナID>
  • コンテナの削除:

docker rm <コンテナID>

コンテナの作成と管理

以下では、コンテナの作成と管理に関する項目をコマンドやコード例を交えて説明します。

Dockerfileの作成とイメージのビルド

Dockerfileは、Dockerイメージをビルドするためのテキストファイルです。以下はDockerfileの作成とイメージのビルドの手順です。

  1. Dockerfileの作成:

# ベースイメージの指定
FROM <ベースイメージ>

# 追加のパッケージのインストールや設定など、イメージの構成を記述
RUN <コマンド1>
RUN <コマンド2>
...

# コンテナの実行時に実行されるコマンドの指定
CMD <コマンド>
  1. Dockerイメージのビルド:

docker build -t <イメージ名>:<タグ> <Dockerfileのパス>

イメージのタグ付けとバージョン管理

Dockerイメージには、タグを付けることができます。タグを使用することで、イメージのバージョン管理や特定のバージョンのイメージを指定してコンテナを作成することができます。

  • イメージのタグ付け:

docker tag <現在のイメージ名>:<現在のタグ> <新しいイメージ名>:<新しいタグ>
  • イメージのリネーム:

docker image tag <現在のイメージ名>:<現在のタグ> <新しいイメージ名>:<新しいタグ>

コンテナの作成と起動オプションの設定

コンテナの作成と起動には、docker runコマンドを使用します。以下はコンテナの作成と起動オプションの設定の例です。

  • コンテナの作成と起動:

docker run -d --name <コンテナ名> -p <ホストポート>:<コンテナポート> <イメージ名>:<タグ>
  • ボリュームのマウント:

docker run -d --name <コンテナ名> -v <ホストディレクトリ>:<コンテナディレクトリ> <イメージ名>:<タグ>

コンテナの監視とログの管理

コンテナの監視とログの管理には、docker logsコマンドやDockerの監視ツールを使用します。

  • コンテナのログの表示:

docker logs <コンテナ名>
  • コンテナのリアルタイムログの表示:

docker logs -f <コンテナ名>
  • コンテナの監視ツールの使用:

Dockerには、Prometheus、Grafana、cAdvisorなどのツールを使用してコンテナの監視を行うことができます。

以上がコンテナの作成と管理に関する説明です。これらの手順やコマンドを使用することで、Dockerを使用したコンテナの作成や管理、ログの監視などを行うことができます。

ネットワーキングとストレージの管理

以下では、ネットワーキングとストレージの管理に関する項目をコマンドやコード例を交えて説明します。

コンテナ間のネットワーキングと接続

Dockerでは、コンテナ間のネットワーキングを簡単に設定することができます。以下は、コンテナ間のネットワーキングと接続の例です。

  • ユーザー定義ネットワークの作成:

docker network create <ネットワーク名>
  • コンテナの作成とネットワークへの接続:

docker run -d --name <コンテナ名> --network=<ネットワーク名> <イメージ名>:<タグ>

ポートマッピングとホストとの連携

Dockerでは、コンテナ内のポートとホストマシンのポートをマッピングすることができます。以下は、ポートマッピングとホストとの連携の例です。

  • ホストとコンテナのポートのマッピング:

docker run -d --name <コンテナ名> -p <ホストポート>:<コンテナポート> <イメージ名>:<タグ>

ボリュームの管理と永続化データの扱い

Dockerでは、ボリュームを使用してデータを永続化することができます。以下は、ボリュームの管理と永続化データの扱いの例です。

  • ボリュームの作成:

docker volume create <ボリューム名>
  • コンテナの作成とボリュームのマウント:

docker run -d --name <コンテナ名> -v <ボリューム名>:<コンテナ内のマウントパス> <イメージ名>:<タグ>

これにより、コンテナ内のデータがボリュームに永続化されます。

以上がネットワーキングとストレージの管理に関する説明です。これらの手順やコマンドを使用することで、コンテナ間のネットワーキングやポートマッピング、ボリュームの管理と永続化データの扱いを行うことができます。

Docker Composeを使用した複数コンテナの管理

以下では、Docker Composeを使用した複数コンテナの管理に関する項目をコマンドやコード例を交えて説明します。

Docker Composeの概要と基本的な構成

Docker Composeは、複数のDockerコンテナを定義し、管理するためのツールです。Docker Composeでは、YAML形式のファイルを使用してコンテナの構成を記述します。

version: "3"
services:
  <サービス名1>:
    image: <イメージ名1>:<タグ>
    <その他の設定>

  <サービス名2>:
    image: <イメージ名2>:<タグ>
    <その他の設定>

複数のコンテナの定義と連携

Docker Composeでは、複数のコンテナを定義し、それらのコンテナ間の連携を設定することができます。

version: "3"
services:
  <サービス名1>:
    image: <イメージ名1>:<タグ>
    <その他の設定>

  <サービス名2>:
    image: <イメージ名2>:<タグ>
    depends_on:
      - <サービス名1>
    <その他の設定>

環境変数の管理と共有ネットワークの設定

Docker Composeでは、環境変数の管理やコンテナ間でのネットワークの共有を設定することができます。

  • 環境変数の設定:

version: "3"
services:
  <サービス名>:
    image: <イメージ名>:<タグ>
    environment:
      - VAR1=value1
      - VAR2=value2
  • 共有ネットワークの設定:

version: "3"
services:
  <サービス名1>:
    image: <イメージ名1>:<タグ>
    networks:
      - <ネットワーク名>

  <サービス名2>:
    image: <イメージ名2>:<タグ>
    networks:
      - <ネットワーク名>

networks:
  <ネットワーク名>:
    driver: bridge

以上がDocker Composeを使用した複数コンテナの管理に関する説明です。これらの手順やコード例を使用することで、Docker Composeを利用して複数のコンテナを定義し、連携させることができます。

Dockerイメージのカスタマイズと拡張

以下では、Dockerイメージのカスタマイズと拡張に関する項目をコマンドやコード例を交えて説明します。

ベースイメージの選択とカスタムイメージの作成

Dockerでは、ベースイメージを使用してカスタムイメージを作成することができます。ベースイメージは、作成するイメージの基盤となるイメージです。

  • ベースイメージの指定とカスタムイメージの作成:

FROM <ベースイメージ>
<追加の設定やパッケージのインストールなど>

マルチステージビルドの利用と効果的なイメージの最適化

マルチステージビルドは、Dockerイメージを効果的に最適化するための手法です。複数のステージを使ってビルドプロセスを分割し、不要なファイルや依存関係を含まない軽量な最終イメージを作成することができます。

FROM <ベースイメージ> as build
<ビルドプロセスの実行>

FROM <別のベースイメージ> as final
COPY --from=build /app/output /app/output
<必要な設定や実行ファイルのコピーなど>

Dockerfileのベストプラクティスとセキュリティ考慮事項

  • Dockerfileのベストプラクティス:

    • 不要なパッケージやファイルを削除する

    • ランダムなユーザーを使用する

    • キャッシュを最大限に活用する

    • 複数のRUNステートメントを結合する

  • セキュリティ考慮事項:

    • イメージの署名と検証

    • 安全なDockerイメージのベースイメージの選択

    • コンテナ内のセキュリティパッチの適用

以上がDockerイメージのカスタマイズと拡張に関する説明です。これらの手順やベストプラクティスを使用することで、ベースイメージの選択やカスタムイメージの作成、マルチステージビルドの利用、Dockerfileのベストプラクティスとセキュリティ考慮事項を実践することができます。

デバッグとトラブルシューティング

以下では、Dockerのデバッグとトラブルシューティングに関する項目をコマンドやコード例を交えて説明します。

Dockerのログとデバッグツールの活用

Dockerはログを生成し、問題解決に役立つ情報を提供します。コンテナのログを表示するコマンドやログの保存先を確認するコマンドを使用できます。

  • コンテナのログ表示例:

# コンテナのログを表示
docker logs <コンテナ名>

# フォローモードでコンテナのログを表示
docker logs -f <コンテナ名>

Dockerにはさまざまなデバッグツールもあります。例えば、Docker Inspectコマンドを使用してコンテナの詳細情報を取得したり、Docker Execコマンドを使用してコンテナ内でコマンドを実行したりすることができます。

コンテナ内のシェルへのアクセスとデバッグ手法

コンテナ内で問題が発生した場合、シェルにアクセスしてコンテナ内でコマンドを実行することができます。これにより、コンテナ内の状態を調査し、デバッグを行うことができます。

  • コンテナ内のシェルへのアクセス例:

# コンテナ内のシェルにアクセス
docker exec -it <コンテナ名> /bin/bash

一般的な問題とトラブルシューティングのヒント

Dockerの使用中によく遭遇する問題とトラブルシューティングのヒントをいくつか紹介します。

  • イメージの見つからないエラー:

    • Docker Hubからイメージを取得する前に、イメージが存在することを確認してください。

    • ローカルにイメージが存在する場合、イメージ名とタグが正しいことを確認してください。

  • ポートの競合エラー:

    • 起動するコンテナのポートがホスト上の他のプロセスと競合していないか確認してください。

    • ポートマッピングを変更して競合を回避することができます。

  • ボリュームのマウントエラー:

    • ボリュームをマウントする際に正しいパスを指定しているか確認してください。

    • ホスト上のディレクトリが存在しない場合は作成してください。

これらは一般的な問題とそのトラブルシューティングのヒントの一部です。問題の解決には、具体的なエラーメッセージの確認やドキュメントの参照が重要です。

以上がDockerのデバッグとトラブルシューティングに関する説明です。これらの手法を使用してログの活用、コンテナ内でのデバッグ、一般的な問題のトラブルシューティングを行うことができます。

セキュリティとベストプラクティス

以下では、Dockerのセキュリティとベストプラクティスに関する項目をコマンドやコード例を交えて説明します。

Dockerセキュリティの基本原則

  • 最小特権の原則: コンテナ内で実行されるプロセスには必要最低限の権限を与えることが重要です。特権モードの使用は避け、必要な権限を制限しましょう。

  • イメージの信頼性: イメージの信頼性を確保するために、公式のDockerイメージや信頼できるソースからイメージを取得することをお勧めします。また、自身でイメージをビルドする場合は、安全な方法で行いましょう。

  • セキュリティパッチの適用: Dockerホストおよびコンテナ内のパッケージやランタイムのセキュリティパッチを定期的に適用することが重要です。

イメージの脆弱性スキャンとセキュリティツールの利用

  • イメージの脆弱性スキャン: イメージ内のパッケージの脆弱性を特定するために、脆弱性スキャンツールを使用しましょう。例えば、TrivyやClairなどのツールがあります。

  • セキュリティツールの利用: Dockerホストやコンテナ内でセキュリティツールを実行して脆弱性や侵入の検知、ログの監視などを行うことでセキュリティを強化しましょう。

ネットワークセキュリティとアクセス制御の考慮事項

  • ポートの公開制限: コンテナが公開するポートを制限し、不要なポートは閉じましょう。ホストとのポートマッピングを必要最低限に制限することも重要です。

  • ネットワークセグメンテーション: コンテナを異なるネットワークに分割し、必要な接続のみを許可することでセキュリティを向上させましょう。

実践的なシナリオと応用

  • Docker Secretsの利用: 機密情報(パスワードやAPIキーなど)を安全に扱うために、Docker Secretsを使用しましょう。

  • Multi-Stage Buildの活用: マルチステージビルドを使用して、イメージサイズを最小化し、セキュリティを向上させましょう。

  • Dockerのセキュリティイベント監視: Dockerホストやコンテナ内でのセキュリティイベントの監視を実施し、異常なアクティビティを検出することでセキュリティを強化しましょう。

学習リソース

Dockerを学んだ後の学習リソースとして以下を挙げます:

これらの学習リソースを活用して、Dockerの理解を深めてください。

前へRedis次へPulumi

最終更新 1 年前

Docker公式ドキュメント: Dockerの公式ドキュメントには詳細な情報とチュートリアルが提供されています。

Docker Deep Dive (書籍): Nigel Poultonによる詳細なDocker解説書です。

Docker公式ブログ: Dockerの最新情報やベストプラクティスに関する記事が掲載されています。

🏫
🐣
https://docs.docker.com/
https://www.amazon.com/Docker-Deep-Dive-Nigel-Poulton/dp/1521822808
https://www.docker.com/blog/