web-dev-qa-db-ja.com

Docker Composeのボリュームを使用してホストとコンテナー間でデータを共有する方法

Docker Composeとボリュームで遊んでいます

version: '2'
services:
    php-Apache:
        env_file:
          - dev_variables.env
        image: reypm/php55-dev
        build:
            context: .
            args:
                - PUID=1000
                - PGID=1000
        expose:
            - "80"
            - "9001"
        extra_hosts:
            # IMPORTANT: Replace with your Docker Host IP (will be appended to /etc/hosts)
            - "dockerhost:xxx.xxx.xxx.xxx"
        volumes_from:
            - volumes_source
    volumes_source:
        image: tianon/true
        volumes:
            - ../:/var/www
    volumes_data:
        image: tianon/true
        volumes:
            - ./data/sessions:/sessions

次の事実を見てみましょう。

  • ホストの下にディレクトリがあります:~/var/www
  • そのようなディレクトリ内のデータは、コンテナのステータスに関して持続する必要があります。
  • コンテナは/var/wwwの下のホストからデータを書き込む必要があります

私はドキュメントを読んだことがあります here .

ホスト上のデータをコンテナと共有したいのですが、上記のdocker-compose.ymlファイルが正しいか、必要なものを実現するために何を変更する必要があるかさえわかりません。 docker runのみを使用してそれを行う方法は知っていますが、Docker Composeの手がかりはありませんか?

これを機能させるのに役立つことがありますか?

更新:これで遊ぶ

docker-compose.ymlファイルに次の行を追加しました。

    volumes_from:
        - volumes_source

そして、docker-compose upをもう一度実行しますが、これは結果です:

php55devwork_volumes_data_1 exited with code 0
php55devwork_volumes_source_1 exited with code 0

何が起こっているのか、なぜエラーが発生しているのかわかりません。

14
ReynierPM

「データコンテナ」を定義しようとしているようです。このパターンは以前は一般的でしたが、docker volumeシステムがDocker 1.9に追加された後は必要ありません( https://github.com/docker/docker/blob/master/CHANGELOG.md #190-2015-11-

使用しているこのイメージtianon/trueは、「true」コマンドを実行するように設計されています。このコマンドは、終了コード0を返して終了するだけです。これが、コンテナが終了したと表示される理由です。

データコンテナを使用する代わりに、名前付きボリュームを使用します。たとえば、データコンテナを使用した次のアプローチ:

docker create --name data-container -v /sessions tianon/true
docker run --volume-from data-container -d myapp

これになります:

docker volume create --name sessions
docker run -v sessions:/sessions -d myapp

構成を使用しているため、volumesキーを使用してボリュームを定義できます。

version: '2'
services:
    php-Apache:
        env_file:
          - dev_variables.env
        image: reypm/php55-dev
        build:
            context: .
            args:
                - PUID=1000
                - PGID=1000
        expose:
            - "80"
            - "9001"
        extra_hosts:
            # IMPORTANT: Replace with your Docker Host IP (will be appended to /etc/hosts)
            - "dockerhost:xxx.xxx.xxx.xxx"
        volumes:
            - sessions:/sessions
            - docroot:/var/www
volumes:
    sessions:
        driver: local
    docroot:
        driver: local

詳細と例はこちらにあります: https://docs.docker.com/compose/compose-file/compose-file-v2/

ただし、このボリュームデータをコンテナとホスト間で共有することもお勧めします。その場合、データコンテナも名前付きボリュームも必要ありません。ホストボリュームを直接指定することができます。

version: '2'
services:
    php-Apache:
        env_file:
          - dev_variables.env
        image: reypm/php55-dev
        build:
            context: .
            args:
                - PUID=1000
                - PGID=1000
        expose:
            - "80"
            - "9001"
        extra_hosts:
            # IMPORTANT: Replace with your Docker Host IP (will be appended to /etc/hosts)
            - "dockerhost:xxx.xxx.xxx.xxx"
        volumes:
            - ./data/sessions:/sessions
            - ../:/var/www
24
programmerq