Docker ホストとコンテナの間でファイルをやり取りするのって以前はかなり面倒だったと思う。 そんな記憶も今は昔、専用のコマンドが用意されてだいぶ簡単になっているようだ。
docker cp | Docker Documentation
使った環境は次の通り。
$ sw_vers ProductName: Mac OS X ProductVersion: 10.12.6 BuildVersion: 16G1212 $ docker version Client: Version: 18.01.0-ce API version: 1.35 Go version: go1.9.2 Git commit: 03596f5 Built: unknown-buildtime OS/Arch: darwin/amd64 Experimental: false Orchestrator: swarm Server: Engine: Version: 18.01.0-ce API version: 1.35 (minimum version 1.12) Go version: go1.9.2 Git commit: 03596f5 Built: Wed Jan 10 20:13:12 2018 OS/Arch: linux/amd64 Experimental: false
下準備
まずはファイルをやり取りするための Docker コンテナを起動しておく。
$ docker run -it alpine /bin/sh
Alpine Linux の Docker コンテナを起動してシェルに入った。
/ # uname -a Linux 09a735dae425 4.4.111-boot2docker #1 SMP Thu Jan 11 16:25:31 UTC 2018 x86_64 Linux
起動したコンテナの ID を確認しておく。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 09a735dae425 alpine "/bin/sh" 12 seconds ago Up 14 seconds stoic_mclean
ホストからコンテナにファイルをコピーする
まずは Docker ホストからコンテナにファイルをコピーする方から。
Docker ホスト側で、まずはコピーするファイルを用意する
$ echo "Hello, World" > greeting.txt
あとは docker cp
コマンドを使ってファイルを転送するだけ。
コマンドのパラメータは scp
コマンドのイメージに近い。
送信元を第一引数に、送信先を第二引数に指定する。
送信先にはコンテナ ID (もしくは名前) と、コロンで区切って転送先のパスを指定する。
$ docker cp greeting.txt 09a735dae425:/tmp
docker exec
コマンドを使ってコンテナ上で cat
コマンドを実行してファイルの状態を確認しよう。
$ docker exec 09a735dae425 cat /tmp/greeting.txt
Hello, World
ちゃんとファイルが送られたことが分かる。
コンテナからホストにファイルをコピーする
続いてはコンテナからホストにファイルをコピーするパターン。
この場合も、最終的には先ほどと同じように docker cp
コマンドを使う。
まずはコンテナの中でコピーするファイルを用意しよう。 分かりやすいように、先ほど送り込まれたファイルを編集して使う。
/ # echo "Hello, Docker" > /tmp/greeting.txt
あとは Docker ホスト側で docker cp
コマンドを使ってコンテナ上のファイルをホストに転送してくる。
今回は送信元となる第一引数の方にコンテナとファイルの絶対パスを指定する。
$ docker cp 09a735dae425:/tmp/greeting.txt .
コマンドを実行すると、ちゃんとコンテナにあったファイルが手元にコピーされたことが分かる。
$ cat greeting.txt Hello, Docker
いじょう。
めでたしめでたし。
スマートPythonプログラミング: Pythonのより良い書き方を学ぶ
- 作者: もみじあめ
- 発売日: 2016/03/12
- メディア: Kindle版
- この商品を含むブログ (1件) を見る