ホストから Docker コンテナにディレクトリをコピーする方法

DockerBeginner
オンラインで実践に進む

はじめに

Docker コンテナは、開発者と IT 専門家にとって不可欠なツールとなり、アプリケーションをパッケージ化およびデプロイするための一貫性と信頼性を提供しています。このチュートリアルでは、ホストマシンから Docker コンテナにディレクトリをコピーするプロセスを探索し、コンテナ化された環境内でファイルとデータを効率的に管理する方法を紹介します。

Docker コンテナの概要

Docker は、開発者がコンテナ化された環境でアプリケーションを構築、デプロイ、実行するための、人気のオープンソースプラットフォームです。コンテナは軽量で、独立しており、自己完結的な単位であり、アプリケーションとその依存関係をパッケージ化し、異なる環境間で一貫性と信頼性の高い実行を保証します。

Docker コンテナとは何か

Docker コンテナは、アプリケーションのコード、依存関係、設定を単一、移植可能、再現可能なパッケージにまとめた標準化されたソフトウェア単位です。コンテナは Docker イメージから作成され、コンテナの設計図となります。コンテナはホストシステムや他のコンテナから隔離され、一貫性と信頼性の高い実行環境を提供します。

Docker コンテナを使用する利点

  • 移植性: Docker コンテナは、異なるオペレーティングシステムやクラウド環境で一貫して実行できるため、アプリケーションが基盤となるインフラストラクチャに関係なく同じように動作することを保証します。
  • スケーラビリティ: コンテナは、アプリケーションのニーズの変化に合わせて容易にスケールアップまたはスケールダウンできるため、リソースの利用を管理および最適化しやすくなります。
  • 効率性: コンテナは軽量であり、ホストシステムのオペレーティングシステムを共有するため、従来の仮想マシンと比較してオーバーヘッドとリソース消費を削減します。
  • 一貫性: Docker コンテナは一貫性と予測可能な実行環境を提供するため、「私のマシンでは動作する」という問題のリスクを軽減し、アプリケーションの管理と保守を容易にします。

Docker アーキテクチャ

Docker はクライアント - サーバーアーキテクチャに従い、Docker クライアントは Docker デーモン(サーバー)と通信して Docker コマンドを実行します。Docker デーモンは、Docker イメージ、コンテナ、ネットワーク、ボリュームを管理する役割を担います。

graph LD
    subgraph Docker アーキテクチャ
        クライアント -- Docker API --> デーモン
        デーモン -- Docker エンジン --> イメージ
        デーモン -- Docker エンジン --> コンテナ
        デーモン -- Docker エンジン --> ネットワーク
        デーモン -- Docker エンジン --> ボリューム
    end

Docker コンテナの基本的な概念とアーキテクチャを理解することで、Docker を使用し、アプリケーションの開発とデプロイプロセスでその利点を活用できるようになります。

ホストからコンテナへのファイルのコピー

Docker コンテナで作業する際に、ホストシステム(ローカルマシン)から Docker コンテナにファイルをコピーすることは一般的なタスクです。これは、アプリケーションに必要な追加ファイル、設定、またはコンテナイメージに含まれていないデータを提供する必要がある場合に必要になります。

docker cp コマンド

docker cp コマンドは、ホストシステムと実行中の Docker コンテナ間でファイルまたはディレクトリをコピーするために使用されます。コマンドの構文は次のとおりです。

docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH

ここで:

  • SRC_PATH はホストシステム上のファイルまたはディレクトリのパスです。
  • CONTAINER は Docker コンテナの名前または ID です。
  • DEST_PATH は、ファイルまたはディレクトリがコピーされる Docker コンテナ内のパスです。

ホストシステムから Docker コンテナにディレクトリをコピーする方法の例を次に示します。

## ホストの "my-files" ディレクトリを、コンテナの "/app" ディレクトリにコピーする
docker cp ./my-files mycontainer:/app

コンテナ作成時のファイルコピー

あるいは、コンテナ作成プロセス中にホストシステムから Docker コンテナにファイルをコピーすることもできます。これは、Dockerfile 内の COPY 指令を使用して行われます。この指令は、ビルドコンテキスト(Dockerfile があるディレクトリ)からコンテナのファイルシステムにコピーするファイルまたはディレクトリを指定します。

ホストシステムからコンテナにディレクトリをコピーする例を示す Dockerfile を次に示します。

## Dockerfile
FROM ubuntu:22.04
COPY ./my-files /app
CMD ["bash"]

この例では、COPY 指令は、ビルドコンテキストの my-files ディレクトリをコンテナ内の /app ディレクトリにコピーします。

ホストから Docker コンテナにファイルをコピーする方法を理解することで、コンテナ化されたアプリケーションに必要なリソースをより効果的に管理および配布できます。

実用的なユースケースと例

ホストから Docker コンテナへのファイルのコピーは、さまざまなシナリオで役立ちます。ここでは、いくつかの実用的なユースケースと例を示します。

設定ファイルの提供

一般的なユースケースの 1 つは、コンテナ化されたアプリケーションに設定ファイルを提供することです。たとえば、データベース接続情報、環境変数、またはアプリケーションに合わせてカスタマイズする必要があるその他の設定を含む設定ファイルがある場合があります。

## ホストからコンテナに設定ファイルをコピーする
docker cp ./my-app-config.yaml mycontainer:/app/config/

データまたはアセットの注入

もう 1 つのユースケースは、コンテナにデータまたはアセットを注入することです。これには、次のものが含まれる場合があります。

  • データベースの初期データ
  • メディアファイル(画像、ビデオなど)
  • 静的 Web コンテンツ
## ホストからコンテナに静的 Web コンテンツのディレクトリをコピーする
docker cp ./web-content mycontainer:/var/www/html/

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

ホストからコンテナにファイルをコピーすることは、デバッグとトラブルシューティングにも役立ちます。たとえば、問題を調査するために、ログファイルや診断ツールをコンテナにコピーしたい場合があります。

## 解析のためにコンテナからホストにログファイルをコピーする
docker cp mycontainer:/app/logs/app.log ./

CI/CD

継続的インテグレーション (CI) または継続的デリバリー (CD) パイプラインでは、ビルドアーティファクト、テストレポート、またはその他のファイルをホストシステムからコンテナにコピーして、さらに処理またはデプロイする必要がある場合があります。

## CI/CD パイプライン中にホストからコンテナにビルドアーティファクトをコピーする
docker cp ./build-artifacts mycontainer:/app/dist/

これらの実用的なユースケースと例を理解することで、Docker ベースのワークフローとアプリケーションで docker cp コマンドと COPY 指令をより効果的に活用できます。

まとめ

このチュートリアルを終了すると、ホストマシンから Docker コンテナにディレクトリをコピーする方法をしっかりと理解しているはずです。Docker ワークフローを効率化し、コンテナ化されたアプリケーション開発プロセスを強化する実用的なユースケースと例を学ぶでしょう。