Docker コンテナにファイルをコピーする方法

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

はじめに

Docker は、現代のソフトウェア開発とデプロイにおいて不可欠なツールとなり、アプリケーションをパッケージ化し実行するための一貫性と信頼性を提供しています。Docker を使用する場合、実行中のコンテナにファイルのコピーが必要になることは一般的なタスクです。このチュートリアルでは、Docker コンテナにファイルのコピーを行うプロセスを、必要な手順と実用的なユースケースを網羅して解説します。

Docker の概要

Docker は、開発者がコンテナ化された環境でアプリケーションを構築、デプロイ、実行するための、人気のオープンソースプラットフォームです。コンテナは、アプリケーションの実行に必要なコード、ランタイム、システムツール、ライブラリなど、すべてを含んだ軽量で独立した実行可能なパッケージです。

Docker とは何か?

Docker は、コンテナ内でアプリケーションを構築、デプロイ、実行するためのソフトウェアプラットフォームです。コンテナは、アプリケーションとそのすべての依存関係を単一の標準化されたユニットにパッケージ化し、さまざまなコンピューティング環境間で一貫してデプロイおよび実行できるようにするものです。

Docker の利点

  1. 一貫性: Docker コンテナは、基盤となるインフラストラクチャに関係なく、アプリケーションが同じ方法で実行されることを保証します。
  2. スケーラビリティ: コンテナは、変化する需要に対応するために、簡単にスケールアップまたはスケールダウンできます。
  3. 効率性: コンテナは軽量であり、従来の仮想マシンよりも少ないリソースを使用します。
  4. 移植性: Docker コンテナにパッケージ化されたアプリケーションは、開発、テスト、本番環境など、さまざまな環境間で簡単に移動できます。

Docker のアーキテクチャ

Docker はクライアント・サーバー型のアーキテクチャを採用しており、Docker クライアントは、Docker コンテナの構築、実行、管理を担当する Docker デーモンと通信します。

graph LR
    subgraph Docker アーキテクチャ
        client[Docker クライアント]
        daemon[Docker デーモン]
        client -- API --> daemon
        daemon -- コンテナ --> host[ホスト OS]
    end

Docker の開始

Docker を開始するには、システムに Docker エンジンをインストールする必要があります。Docker は公式 Docker ウェブサイト (https://www.docker.com/get-started) からダウンロードしてインストールできます。

Docker をインストールしたら、コンテナ内でアプリケーションを構築および実行するために使用できます。簡単な "Hello, World!" コンテナを実行する方法の例を次に示します。

docker run hello-world

このコマンドは、Docker Hub レジストリから "hello-world" イメージをプルし、そのイメージに基づいたコンテナを実行します。

Docker コンテナへのファイルコピー

Docker コンテナにファイルのコピーは、Docker を扱う上で一般的なタスクです。具体的なユースケースによって、いくつかの異なる方法があります。

docker cp コマンドの使用

docker cp コマンドは、ローカルファイルシステムと実行中の Docker コンテナ間でファイルやディレクトリをコピーできます。使用方法の例を次に示します。

## ローカルファイルシステムから実行中のコンテナにファイルコピー
docker cp local_file.txt container_name:/path/in/container

## 実行中のコンテナからローカルファイルシステムにファイルコピー
docker cp container_name:/path/in/container local_file.txt

コンテナ構築時のファイルコピー

Docker コンテナへのファイルコピーのもう 1 つの方法は、Dockerfile にファイルコピーの指示を含めることです。これにより、ファイルがコンテナイメージに含まれるため、アプリケーションの配布とデプロイが容易になります。

コンテナにファイルコピーする例を示す Dockerfile を次に示します。

FROM ubuntu:22.04

COPY local_file.txt /path/in/container/

この Dockerfile を使用して Docker イメージを構築すると、local_file.txt ファイルがコンテナ内の /path/in/container/ ディレクトリにコピーされます。

ボリュームのマウント

ホストファイルシステムのディレクトリを Docker コンテナのボリュームとしてマウントすることもできます。これにより、コンテナ内から直接ホストシステム上のファイルにアクセスし、変更できます。

Docker コンテナを実行時にボリュームをマウントする方法の例を次に示します。

docker run -v /host/path:/container/path image_name

これにより、ホストシステムの /host/path ディレクトリが、実行中のコンテナ内の /container/path ディレクトリにマウントされます。

これらの方法を使用することで、アプリケーションのニーズに合わせて、ビルドプロセス中または実行時に簡単に Docker コンテナにファイルのコピーを行うことができます。

実用的なユースケース

Docker コンテナへのファイルコピーには、幅広い実用的な用途があります。以下にいくつかの例を示します。

Web アプリケーションのデプロイ

Docker を使用して Web アプリケーションをデプロイする場合、アプリケーションコード、設定ファイル、その他の資産をコンテナにコピーする必要があります。これにより、アプリケーションが異なる環境間で一貫して動作します。

## Web アプリケーションの例を示す Dockerfile
FROM node:14-alpine
COPY app/ /app/
WORKDIR /app
RUN npm install
CMD ["node", "server.js"]

コンテナ間のデータ転送

マイクロサービスアーキテクチャでは、異なるコンテナ間でデータを共有する必要がある場合があります。コンテナ間でファイルをコピーすることで、サービス間のデータ交換と統合を促進できます。

## 1つのコンテナから別のコンテナにファイルコピー
docker cp container1:/data/file.txt container2:/data/

設定ファイルのマウント

コンテナ化されたアプリケーションを実行する場合、環境固有の設定ファイルが必要になる場合があります。これらのファイルをコンテナにコピーすることで、アプリケーションが正しく設定されていることを確認できます。

## 設定ファイルをボリュームとしてマウント
docker run -v /host/config.yml:/app/config.yml my-app

ログと監視

コンテナからログファイルや監視データをコピーすることは、アプリケーションの動作をトラブルシューティングし、分析するのに役立ちます。

## コンテナからホストへのログコピー
docker cp container:/var/log/app.log /host/logs/

Docker コンテナへのファイルコピー方法を理解することで、さまざまなユースケースに対応し、より堅牢で保守性が高く、スケーラブルなアプリケーションを構築できます。

まとめ

このチュートリアルでは、Docker コンテナにファイルを効果的にコピーする方法を学びました。この基本的なスキルを理解することで、Docker 環境内でアプリケーションの資産、設定ファイル、その他の必要なリソースをより適切に管理できます。この知識は、Docker ベースの開発、デプロイ、保守ワークフローにとって非常に重要です。このガイドで説明したテクニックを使用することで、Docker ベースのプロジェクトを効率化し、アプリケーションに必要なファイルやデータにアクセスできるようにすることができます。