はじめに
このチュートリアルでは、cp コマンドを使用して Docker コンテナ間でファイルをコピーする方法を説明します。この強力な機能を活用することで、Docker ベースのワークフローを効率化し、コンテナ間のファイル管理を改善する方法を学ぶことができます。Docker ユーザーの経験レベルに関わらず、この「docker cp の例」ガイドは、Docker 環境間でファイルを効果的に転送するための必要な知識を提供します。
Docker コンテナの基本
コンテナ化の概要
Docker コンテナは、ソフトウェアのデプロイとアプリケーション管理に革命的なアプローチを提供します。コンテナ化技術により、開発者はアプリケーションとその実行環境全体をパッケージ化でき、さまざまなコンピューティングプラットフォーム間で一貫したパフォーマンスを確保できます。
Docker コンテナの核心概念
graph TD
A[Docker イメージ] --> B[コンテナ ランタイム]
B --> C[隔離されたアプリケーション環境]
C --> D[軽量なデプロイ]
| 概念 | 説明 | 主要な特徴 |
|---|---|---|
| コンテナ | 軽量で独立した実行可能パッケージ | 隔離、移植性、効率性 |
| Docker イメージ | コンテナを作成するための読み取り専用テンプレート | 不変性、バージョン管理、共有性 |
| コンテナ ランタイム | コンテナ化されたアプリケーションを実行する環境 | リソースの管理、隔離の提供 |
Ubuntu 22.04 への Docker インストール
## パッケージリポジトリを更新
sudo apt update
## 必要な依存関係をインストール
sudo apt install apt-transport-https ca-certificates curl software-properties-common
## Docker の公式 GPG キーを追加
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
## 安定版リポジトリを設定
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
## Docker エンジンをインストール
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
基本的な Docker コンテナ操作
最初のコンテナの実行
## Ubuntu イメージをプル
## 対話型のコンテナを実行
## 実行中のコンテナの一覧表示
## コンテナを停止
コンテナのライフサイクル管理
コンテナは、アプリケーション用に完全な隔離された環境を提供します。それらは以下をカプセル化します。
- アプリケーションコード
- 実行環境
- システムライブラリ
- システムツール
- 設定設定
パフォーマンスとリソース効率
Docker コンテナは、従来の仮想マシンと比べて大幅に軽量です。ホストシステムのカーネルを共有するため、以下のメリットがあります。
- 起動時間の短縮
- メモリ消費量の削減
- 計算オーバーヘッドの低減
セキュリティに関する考慮事項
コンテナは、組み込みの隔離メカニズムを提供します。
- ネームスペース分離
- リソース制約
- システムアクセス制限
- 制御されたネットワークインタラクション
Docker ファイル管理
Dockerfile の基礎
Dockerfile は、Docker イメージの作成プロセスを定義するテキストベースの設定ファイルです。環境と依存関係を正確に制御して、コンテナ化されたアプリケーションを構築するための体系的なアプローチを提供します。
graph TD
A[Dockerfile] --> B[ビルドコンテキスト]
B --> C[Docker イメージ]
C --> D[コンテナ化されたアプリケーション]
Dockerfile の主要な指示
| 指示 | 目的 | 例 |
|---|---|---|
| FROM | ベースイメージを指定 | FROM ubuntu:22.04 |
| COPY | ファイルをイメージにコピー | COPY ./app /application |
| RUN | コマンドを実行 | RUN apt-get update |
| WORKDIR | 作業ディレクトリを設定 | WORKDIR /application |
| EXPOSE | ネットワークポートを定義 | EXPOSE 8080 |
Dockerfile の作成
## ベースイメージ
FROM ubuntu:22.04
## 作業ディレクトリを設定
WORKDIR /app
## 依存関係をインストール
RUN apt-get update \
&& apt-get install -y python3 python3-pip
## アプリケーションファイルのコピー
COPY . /app
## Python 依存関係をインストール
RUN pip3 install -r requirements.txt
## エントリポイントを定義
CMD ["python3", "app.py"]
ファイル転送操作
ホストとコンテナ間のファイルコピー
## ホストからコンテナにファイルコピー
docker cp local_file.txt container_name:/path/in/container
## コンテナからホストにファイルコピー
docker cp container_name:/path/in/container/file.txt local_destination
## ディレクトリ全体のコピー
docker cp local_directory container_name:/container/path
ボリューム管理
## 名前付きボリュームを作成
docker volume create my_volume
## ボリュームをコンテナにマウント
docker run -v my_volume:/container/path image_name
## ボリューム一覧表示
docker volume ls
## 使用されていないボリュームを削除
docker volume prune
高度なファイル処理
バインドマウント
## ホストディレクトリをコンテナにマウント
docker run -v /host/path:/container/path image_name
## 読み取り専用バインドマウント
docker run -v /host/path:/container/path:ro image_name
コンテナのファイルパーミッション
## コンテナ内のファイル所有権を変更
RUN chown -R app_user:app_group /app
## 特定のファイルパーミッションを設定
RUN chmod 755 /app/script.sh
高度なコンテナ技術
マルチコンテナオーケストレーション
Docker Compose は、相互接続されたコンテナの宣言的な構成を通じて、複雑なアプリケーションアーキテクチャを可能にします。
graph TD
A[Web コンテナ] --> B[データベースコンテナ]
B --> C[キャッシュコンテナ]
C --> D[監視コンテナ]
Docker Compose の構成
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
database:
image: postgres:13
environment:
POSTGRES_PASSWORD: secure_password
cache:
image: redis:alpine
コンテナネットワーク管理
| ネットワークタイプ | 説明 | 使用例 |
|---|---|---|
| Bridge | デフォルトの内部ネットワーク | コンテナ間の通信 |
| Host | ホストネットワークの直接アクセス | 高パフォーマンスなシナリオ |
| Overlay | マルチホストネットワーク | 分散システム |
高度なネットワーク
## カスタムネットワークを作成
docker network create --driver bridge my_custom_network
## コンテナをネットワークに接続
docker network connect my_custom_network container_name
## ネットワークの詳細を表示
docker network inspect my_custom_network
リソース制約管理
## CPU とメモリ制限付きでコンテナを実行
docker run -it \
--cpus=2 \
--memory=4g \
--memory-reservation=2g \
ubuntu:latest
コンテナのヘルス監視
HEALTHCHECK --interval=5m --timeout=3s \
CMD curl -f || exit 1
データ永続化戦略
## 名前付きボリュームを作成
docker volume create app_data
## ボリュームをコンテナにマウント
docker run -v app_data:/var/lib/data image_name
コンテナのログメカニズム
## コンテナのログを表示
docker logs container_name
## ログ出力の追跡
docker logs -f container_name
## ログサイズを制限
docker run --log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
image_name
セキュリティ強化
## 非ルートユーザーとしてコンテナを実行
docker run --user 1000:1000 image_name
## コンテナの特権エスカレーションを無効化
docker run --security-opt no-new-privileges image_name
まとめ
この包括的なチュートリアルでは、Docker CP コマンドを使用して Docker コンテナ間でファイルをコピーする方法を学びました。CP コマンドの基本を理解し、一般的なユースケースを検討することで、Docker ベースのアプリケーション間でファイルを効率的に管理および共有できるようになりました。このガイドで説明した「docker cp の例」のテクニックは、幅広い Docker プロジェクトに適用でき、コンテナベースのワークフローを最適化し、全体的な生産性を向上させるのに役立ちます。



