概要
docker-composeのvolume機能で、ホストファイルをdocker内に共有可能です。
しかし、ディスクI/Oの問題で、パフォーマンスが落ちる。
そのため、相互書き込みが必要なければ、転送した方が良さそう。
そこで、調べたことをメモしておく。
dockerでのコピー
下記コマンドでコピーできるが、コンテナ名を調べたりする必要があり、ちょっと面倒と思う。
$ docker cp {ホスト側ファイルパス} {コンテナ名}:{docker内のパス}
docker-composeでのコンテナ内へコピー(転送)
docker-compose cp
みたいにできたら便利なのだけど、そのようなコマンドなさそう。
そこで、参考サイトに記載のサイトで見つけた方法で転送することにする。
# hoge.txtをコンテナへ転送する
$ docker cp ./hoge.txt $(docker-compose ps -q php):/var/www/
docker-composeでのコンテナ内からコピー(取得)
逆にコンテナ内からファイルを取得する場合は、下記となる。
# コンテナからhoge.txtを取得する
$ docker cp $(docker-compose ps -q php):/var/www/hoge.txt ./
docker-composeでのコンテナ名を取得する
$(docker-compose ps -q php)
だとコンテナIDになる。
コンテナ名を取得したい場合は、こんな感じになりそうです。
$ CONTAINER=$(docker inspect -f '{{.Name}}' $(docker-compose ps -q php) | cut -c2-)
$ echo $CONTAINER
コンテナ名のphp
は、docker-compose.ymlファイル
で定義している名前となります。
※ コンテナ名を調べたりしなくて済むから少しは楽なのかな...
docker-compose.yml
version: '3'
services:
php: # ← ここの名前!!
image: php:7.3
build:
context: ./
dockerfile: ./docker/php/Dockerfile
tty: true
ports:
- '9000:9000'
まとめ
そのうち、docker-composeコマンドにcp
コマンドできないかな(^^;)
参考サイト
以上