Docker コンテナ内でファイルを移動する方法

DockerDockerBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

Docker は開発者の作業方法を革新し、アプリケーションの構築、テスト、デプロイに一貫性と信頼性の高い環境を提供しています。このチュートリアルでは、Docker コンテナ内でファイルを移動するプロセスを探索し、プロジェクトのアセットとリソースを効率的に管理できるようにします。

Docker コンテナの理解

Docker は、開発者がアプリケーションを一貫性のある孤立した環境でパッケージ化してデプロイできるようにする人気のコンテナ化プラットフォームです。コンテナは軽量でポータブルな自己完結型のユニットで、アプリケーションとその依存関係をカプセル化し、異なる環境間でアプリケーションを簡単に移動して実行できるようにします。

Docker コンテナとは何か?

Docker コンテナは、アプリケーションとそのすべての依存関係(コード、ランタイム、システムツール、ライブラリ)を単一のポータブルな自己完結型の環境にパッケージ化する標準化されたソフトウェアユニットです。コンテナは Docker イメージから作成されます。Docker イメージは、コンテナの内容を定義する読み取り専用のテンプレートです。

Docker コンテナの利点

  1. 一貫性:コンテナは、基盤となるインフラストラクチャに関係なく、アプリケーションが同じように実行されることを保証し、一貫性と予測可能性の高い環境を提供します。
  2. スケーラビリティ:コンテナは簡単にスケールアップまたはスケールダウンできるため、アプリケーションは必要に応じて増加したワークロードを処理したり、リソース使用量を削減したりできます。
  3. ポータビリティ:コンテナは Docker がインストールされた任意のシステムで実行できるため、開発、テスト、本番などの異なる環境間でアプリケーションを簡単に移動できます。
  4. 効率性:コンテナはホストオペレーティングシステムのカーネルを共有するため、仮想マシンよりも軽量で、起動時間が短く、リソース使用量が少なくなります。

Docker アーキテクチャ

Docker はクライアント - サーバーアーキテクチャを使用しています。ここでは、Docker クライアントが Docker デーモン(サーバー)と通信して、コンテナの構築、実行、管理などのさまざまな操作を実行します。Docker デーモンは、コンテナ、イメージ、ネットワーク、ボリュームなどの Docker オブジェクトを管理する責任があります。

graph LR A[Docker Client] -- Commands --> B[Docker Daemon] B -- Executes Commands --> C[Docker Objects]

Docker コンテナと仮想マシンの比較

コンテナと仮想マシン(VM)の両方がアプリケーションを孤立した環境で実行する方法を提供しますが、アプローチと実装が異なります。コンテナはホストオペレーティングシステムのカーネルを使用しますが、VM は独自のゲストオペレーティングシステムを持っているため、コンテナの方が軽量で効率的です。

機能 コンテナ 仮想マシン
分離性 アプリケーションレベルの分離 完全なオペレーティングシステムの分離
リソース使用量 軽量、ホスト OS カーネルを共有 重量、各 VM は独自の OS を持つ
起動時間 数秒 数分
ポータビリティ 高いポータビリティ ポータビリティが低い

要するに、Docker コンテナはアプリケーションをパッケージ化してデプロイする一貫性があり、スケーラブルで効率的な方法を提供するため、現代のソフトウェア開発とデプロイメントの実践において人気の選択肢となっています。

Docker ファイルシステムの操作

Docker ファイルシステムを理解することは、コンテナを効果的に管理し、コンテナとやり取りするために重要です。Docker コンテナには独自のファイルシステムがあり、これはホストオペレーティングシステムのファイルシステムとは別です。

Docker ファイルシステムのレイヤー

Docker イメージは一連の読み取り専用レイヤーを使用して構築されます。各レイヤーはファイルシステムへの変更を表します。イメージからコンテナが作成されると、イメージレイヤーの上に新しい読み書き可能なレイヤーが追加され、コンテナは基盤となるイメージに影響を与えることなくファイルを変更できます。

graph TB A[Docker Image] --> B[Read-Only Layers] B --> C[Read-Write Layer] C --> D[Docker Container]

コンテナのファイルシステムへのアクセス

実行中の Docker コンテナのファイルシステムにアクセスするには、docker exec コマンドを使用できます。このコマンドを使用すると、実行中のコンテナ内でコマンドを実行でき、ファイルシステムをナビゲートすることも含まれます。

## Run a container
docker run -d --name my-container ubuntu:latest

## Access the container's file system
docker exec -it my-container /bin/bash

コンテナ内に入ると、lscdcat などの標準的な Linux コマンドを使用してファイルシステムをナビゲートできます。

ホストとコンテナ間でのファイルのコピー

docker cp コマンドを使用して、ホストシステムと実行中のコンテナ間でファイルをコピーできます。

## Copy a file from the host to the container
docker cp /path/on/host my-container:/path/in/container

## Copy a file from the container to the host
docker cp my-container:/path/in/container /path/on/host

これにより、ホストとコンテナ間でファイルやデータを簡単に転送でき、開発とデプロイのワークフローが容易になります。

ボリュームを使用したデータの永続化

Docker ボリュームは、コンテナのライフタイムを超えてデータを永続化する方法を提供します。ボリュームはコンテナのファイルシステムの外に保存され、コンテナ間で共有したり、ホストファイルシステムにアタッチしたりできます。

## Create a volume
docker volume create my-volume

## Run a container with a volume
docker run -d --name my-container -v my-volume:/app ubuntu:latest

ボリュームを使用することで、コンテナが停止または削除されたときに重要なデータが失われないようにすることができ、これは Docker ファイルシステムを操作する上で重要な側面です。

Docker でのファイルの移動

Docker コンテナ内でファイルを移動することは、アプリケーションの開発、テスト、またはデプロイ中に実行する必要がある一般的なタスクです。Docker は、ホストシステムとコンテナ間でファイルを管理および転送するためのいくつかの方法を提供しています。

ホストとコンテナ間でのファイルのコピー

前のセクションで紹介した docker cp コマンドは、ホストシステムと実行中のコンテナ間でファイルをコピーするために使用できます。これは、特に開発とデバッグ中にファイルを転送する便利な方法です。

## Copy a file from the host to the container
docker cp /path/on/host my-container:/path/in/container

## Copy a file from the container to the host
docker cp my-container:/path/in/container /path/on/host

ホストディレクトリをボリュームとしてマウントする

ホストとコンテナ間でファイルを移動する別の方法は、ホストディレクトリをコンテナ内のボリュームとしてマウントすることです。これにより、コンテナはホストシステム上のファイルに直接アクセスできます。

## Run a container with a mounted host directory
docker run -d --name my-container -v /path/on/host:/app ubuntu:latest

この例では、ホストシステム上の /path/on/host ディレクトリがコンテナ内の /app ディレクトリとしてマウントされます。コンテナ内の /app ディレクトリ内のファイルに加えられた変更は、ホストシステム上の /path/on/host ディレクトリに反映され、逆もまた同様です。

バインドマウントの使用

バインドマウントは、コンテナ内にホストディレクトリをマウントするより柔軟な方法です。これにより、ソースとターゲットのパスを明示的に指定でき、個々のファイルまたはディレクトリをマウントするために使用できます。

## Run a container with a bind mount
docker run -d --name my-container -v /path/on/host:/path/in/container ubuntu:latest

バインドマウントは、ホストとコンテナ間のファイルシステムのマッピングに対してより多くの制御を提供するため、特定のファイルまたはディレクトリにアクセスする必要があるシナリオで役立ちます。

これらの Docker でのファイル移動技術を理解することで、コンテナ内のファイルシステムを効果的に管理し、開発、テスト、およびデプロイのワークフローを容易にすることができます。

まとめ

このチュートリアルの最後まで学ぶと、Docker ファイルシステムと Docker コンテナ内でファイルを移動する技術についてしっかりと理解できるようになります。この知識は、開発ワークフローを合理化し、Docker を使用する際にシームレスで効率的な体験を提供するのに役立ちます。