GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

Dockercpを使用してファイルをDockerコンテナにコピーする方法

DockerホストからDockerコンテナーにファイルをコピーする必要がある場合は、このチュートリアルが役立ちます。

このチュートリアルでは、さまざまなアプローチを使用して、DockerホストからDockerコンテナーにファイルをコピーする方法を学習します。

さあ、始めましょう!

前提条件

ステップバイステップでフォローしたい場合は、次のものがあることを確認してください。

  • Linuxホスト。このチュートリアルでは、Ubuntu18.04.5LTSを使用します。
  • LinuxホストにインストールされたDocker。このチュートリアルでは、Dockerv19.03.11を使用します。 docker version を実行すると、Dockerのバージョンを確認できます。 。
  • ダウンロードして利用可能なDockerイメージ。このチュートリアルでは、DockerHubで利用可能な最新のNGINXDockerイメージを使用します。

docker cpを使用してファイルをコピーする コマンド

このチュートリアルを開始するには、 docker cpを使用してDockerホストからコンテナーにファイルをコピーする方法を学習します。 指図。 docker cp コマンドは、コンテナとDockerホストのローカルファイルシステム間でファイルまたはフォルダをコピーします。その逆も同様です。

例を挙げてDockercpコマンドの使用方法を学びましょう。

1.ローカルマシンでターミナルを開きます。

2. myfile.txtという名前のファイルを作成します touchを使用する 指図。 myfile.txt Dockerホストからコンテナにコピーされます。

touch myfile.txt

3. docker runを実行します 指図。以下のdockerrunは、バックグラウンドで新しいコンテナーを作成します。以下のコマンドには、以下に説明する3つのパラメーターが含まれています。

  • d コンテナをバックグラウンドで実行し、削除されるまで存続させるフラグ。
  • p フラグはコンテナのポートを公開します80 ポート80でホストに送信 。
  • nginx コンテナの実行に使用されるイメージになります。
sudo docker run -d -p 80:80 nginx

4. docker psを使用してDockerコンテナが正常に作成されているかどうかを確認します 指図。 docker psを実行した後 コマンドを実行すると、属性 CONTAINER ID(以下の場合は ccae4670f030 )の下に生成された新しい値が表示されます。 ) コンテナが正常に作成されたことを確認するNGINXイメージを使用します。

sudo docker ps

Docker cpコマンドを実行する前に、Dockercpコマンドの構文は次のとおりです。

  • CONTAINER:SRC_PATH コンテナのソースパスを指定します。
  • DEST_PATH ホストの宛先パスです。
  • CONTAINER:DEST_PATH コンテナの宛先パスです。

さらに、 optionsを追加することもできます 次のようにコマンドで以下のパラメータを使用します:

  • アーカイブまたはaの使用–ファイルおよびフォルダーのすべてのユーザーおよびプライマリグループのアクセス許可をコピーします。
  • Lの使用– Lオプションを指定すると、ソースパス内のすべてのシンボリックリンクを宛先パスにコピーできます。
# Syntax to Copy from Container to Docker Host  
docker cp {options} CONTAINER:SRC_PATH DEST_PATH 
# Syntax to Copy from Docker Host to Container  
docker cp {options} SRC_PATH CONTAINER:DEST_PATH 

5.次に、 docker cpを実行します 指図。 docker cp コマンドはmyfile.txtをコピーします 以前にコンテナ/usr / shareに作成したもの ディレクトリ。 ccae4670f030 myfile.txtが送信されるコンテナIDです。 コピーされます。

sudo docker cp myfile.txt ccae4670f030:/usr/share

6.最後に、 docker exec を実行して、実行中のコンテナーにSSHで接続します。 / bin / bashを使用したコマンド 、Linuxシステムのユーザーログインのデフォルトシェルとして使用されます。

  • i コンテナへのインタラクティブSSHセッションを開くことを示すフラグ。 i コンテナが接続されていなくても、フラグはSSHセッションを閉じません。
  • t flagは、コマンドをインタラクティブに実行するためによく使用される疑似TTYを割り当てます。 sudodocker exec -it ccae4670f030 / bin / bash
sudo docker exec -it ccae4670f030 /bin/bash

docker exec を実行すると、コンテナのシェルに接続されていることがわかります。 。

7.コンテナにログインした後、 myfile.txtかどうかを確認します lsコマンドを使用してコンテナにコピーされました。

  • ls UnixおよびUnixライクなオペレーティングシステムのコンピュータファイルを一覧表示するコマンドです。
  • grep 文字列myで始まるすべてのファイルまたはフォルダを検索します usr / share内 ディレクトリ。

DockerFileを使用したファイルのコピー

前のセクションでは、Dockercpコマンドを実行してファイルをコンテナーにコピーする方法を学習しました。一度に複数のファイルをコピーする必要がある場合はどうなりますか?確かに、複数のコマンドを実行するとオーバーヘッドになります!複数のcpコマンドの実行を解決するには、 COPYでDockerfileを使用してファイルまたはフォルダーをコンテナーにコピーしてみてください。 コマンド?

コンテナーをデプロイし、Dockerfileを使用してファイル/フォルダーをコピーすると、前のセクションで行った手動のコピー手順を削除できます。 Dockerfileは、ユーザーが画像をアセンブルするためにコマンドラインで呼び出すことができるすべてのコマンドを含むテキストドキュメントです。

Dockerfileを作成し、そこからコンテナーを実行して、最後にファイルをコピーしましょう。

1.〜/ host-to-container-copy-demo、という名前のフォルダを作成します 次に変更します( cd )そのフォルダへの作業ディレクトリ。このフォルダには、このデモで作成するすべてのファイルが含まれます。

mkdir ~/host-to-container-copy-demo
cd ~/host-to-container-copy-demo

2.次に、 myfile1.txという名前の2つのテキストファイルを作成します。 tおよびmyfile2.txt 、それらをコピーしてファイルに貼り付け、〜/ host-to-container-copy-demoに保存します。 ディレクトリ。

# myfile1.txt
Hello This is my first file !
This is file will be copied in /usr/share directory from Docker host to Docker Container.
# myfile2.txt
Hello This is my second file !
This is file will be copied in /tmp directory from Docker host to Docker Container.

3.別のファイルを作成し、以下の構成をコピーして貼り付け、ファイルを Dockerfileとして保存します。 〜/ host-to-container-copy-demo内 ディレクトリ。完了すると、DockerはこのDockerFileを使用して、ベースイメージの上に新しいDockerイメージを構築するために必要なすべてのコマンドを実行します。

DockerFile 以下に、新しいコンテナを構築するためのさまざまな手順/手順を示します。

  • FROM FROM命令は、新しいビルドステージを初期化し、後続の命令のベースイメージを設定します。
  • コピー COPYコマンドは、ファイルをホストマシン(Dockerホスト)からコンテナーにコピーします。
# Instruction for Dockerfile to create a new image on top of the base image (ubuntu)
# Using the base image ubuntu: latest
FROM ubuntu:latest
# Copying myfile1.txt to the containers /usr/share directory
COPY myfile1.txt /usr/share
# Copying myfile2.txt to the containers /tmp directory
COPY myfile2.txt /tmp

4. tree を実行して、新しいイメージをビルドするために必要なすべてのファイルを確認します 指図。 Dockerfile、myfile1.txt、およびmyfile2.txtが表示されます。 〜/ host-to-container-copy-demo ディレクトリ。

5.次に、 docker buildを実行してイメージをビルドします 指図。 t フラグは、画像にタグを付けるために使用されます updated_ubuntu_image latest および dockerが現在の作業ディレクトリから必要なすべてのファイルを選択できるようにします。

sudo docker build -t updated_ubuntu_image:latest .

6.次に、新しくビルドされたイメージ updated_ubuntu_imageを確認します docker imagesを実行する 指図。 リポジトリに注意してください 属性。この属性は、 -tで作成されたタグです。 前のステップでフラグを立てます。

sudo docker images

7.最後に、 docker run を実行して、新しくビルドされたイメージを使用してdockerコンテナーを実行します。 指図。 -it flagは、コンテナのstdinに接続された疑似端末を割り当てるようにDockerに指示します。 bash Linuxシステムのユーザーログイン用のデフォルトシェルを提供します。

sudo docker run -it updated_ubuntu_image bash

以下に、DockerコンテナのBashシェルを使用していることがわかります。

8.次に、ディレクトリ / tmpのコンテナにファイルが正常にコピーされたかどうかを確認します。 および/usr / share lsを実行する 指図。

ストレージボリュームのマウントとDockerボリュームを使用したファイルへのアクセス コマンド

これまで、 docker cp を使用して、2つの異なるアプローチを使用してホストからコンテナにファイルをコピーする方法を学習しました。 コマンドとDockerFile 。今回は、 docker volume を使用して、ホストとコンテナ間でファイルシステムを簡単に共有する方法を学びましょう。 コマンド。

まだターミナルにログインしていると仮定します:

1. docker volume create を実行して、Dockerホスト上にボリュームを作成します 指図。次のコマンドは、 my-volという名前のボリュームを作成します 。 sudo docker volume create my-vol

sudo docker volume create my-vol

2. docker volume ls を実行して、ボリュームが正常に作成されたことを確認します 指図。 dockervolumelsコマンドはボリュームを一覧表示します。 docker volume lsを実行した後 コマンドを実行すると、 my-volが表示されます。 ボリュームが正常に作成されたことを確認するVOLUMENAME属性。

sudo docker volume ls

3.次に、 docker runを使用してコンテナを実行します コマンド。

  • volume_testingという名前のコンテナ nginx:latestを使用します 画像。
  • d flagはコンテナをバックグラウンドで実行し、削除されるまで存続させます。
  • v フラグはボリュームをマウントしますmy-vol Dockerホスト上でコンテナの宛先/appに作成されます ディレクトリ。
sudo docker run -d --name volume_testing -v my-vol:/app nginx:latest

4. docker inspect を使用して、以前に作成したボリュームmy-volがコンテナーに正しくマウントされているかどうかを確認します。 指図。 Docker inspectコマンドは、コンテナーの情報を提供します。 docker inspectを実行した後 コマンドを実行すると、指定したコンテナのすべての詳細が表示されます( volume_testing )以下に示すように、マウントの詳細を含む詳細。

sudo docker inspect volume_testing

以下の画像スナップショットは、ボリューム( my-vol )ホスト上に作成したものは、コンテナの / appで正常にマウントされます ディレクトリ。

結論

このチュートリアルでは、Docker cpコマンド、Dockerボリュームコマンド、Dockerfileを使用するなど、Dockerホストからコンテナーにファイルまたはフォルダーをコピーするさまざまな方法を学習しました。

では、ホストからDockerコンテナにデータをコピーするときに、次にどのアプローチを使用しますか?


Docker
  1. UbuntuにDockerでWordPressをインストールする方法

  2. LinodeにDockerを使用してnginxコンテナをデプロイする方法

  3. DockerコンテナでMySQLを実行する方法

  1. Dockerを使用してJenkinsをインストールする方法

  2. DockerコンテナにSSHで接続する方法

  3. Dockerコンテナに静的IPを割り当てる方法

  1. Dockerを使用してJenkinsコンテナをSystemdサービスとして実行する方法

  2. Dockerの学習:Dockerコンテナを作成する方法

  3. LinuxサーバーにDockerを使用してNextcloudをインストールする方法