概要
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コマンドできないかな(^^;)
参考サイト
以上