Comment partager des données entre l'hôte et les conteneurs en utilisant des volumes dans Docker composer
je suis à jouer avec Docker Composer et 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_from:
- volumes_source
volumes_source:
image: tianon/true
volumes:
- ../:/var/www
volumes_data:
image: tianon/true
volumes:
- ./data/sessions:/sessions
prenons les faits suivants:
- j'ai un sous-répertoire de l'hôte:
~/var/www
- les données de ce répertoire devraient persister en ce qui concerne l'état des conteneurs.
- le conteneur doit écrire les données de l'hôte sous
/var/www
j'ai lu des docs ici mais n'est pas clair pour moi comment traiter des volumes de données et d'accueil données.
je tiens à partager les données sur l'hôte avec le conteneur, mais je ne sais même pas si le docker-compose.yml
le fichier ci-dessus est juste ou ce qui doit être changé afin d'obtenir ce dont j'ai besoin. Je sais comment le faire en utilisant docker run
seul mais n'a pas d'indice pour Docker composer?
Peut m'aider à faire ce travail?
mise à Jour: jouer avec cette
j'ai ajouté ces lignes à l' docker-compose.yml
fichier:
volumes_from:
- volumes_source
Et I exécutez l' docker-compose up
une fois de plus, mais c'est le résultat:
php55devwork_volumes_data_1 exited with code 0
php55devwork_volumes_source_1 exited with code 0
je ne suis pas sûr de ce qui se passe, ni pourquoi j'obtiens l'erreur, tout?
1 réponses
Il semble que vous essayez de définir un "conteneur de données". Ce modèle était courant, mais ce n'est pas nécessaire après le docker volume
le système a été ajouté dans Docker 1.9 (https://github.com/docker/docker/blob/master/CHANGELOG.md#190-2015-11-03)
Cette image que vous utilisez, tianon/true
, est conçu pour exécuter la commande "true", qui ne fait rien d'autre que retourner le code de sortie 0, puis sortir. C'est pourquoi le conteneur montre comme quitter.
au lieu d'utiliser des conteneurs de données, utilisez un volume nommé. Par exemple, l'approche suivante à l'aide d'un conteneur de données:
docker create --name data-container -v /sessions tianon/true
docker run --volume-from data-container -d myapp
devient:
docker volume create --name sessions
docker run -v sessions:/sessions -d myapp
Puisque vous utilisez composer, vous pouvez définir les volumes en utilisant les volumes principaux.
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
tous les détails et un exemple se trouvent ici:https://docs.docker.com/compose/compose-file/compose-file-v2/
cependant, vous avez aussi mentionné vouloir partager cette donnée de volume entre le conteneur et votre hôte. Dans ce cas, ni un conteneur de données, ni nommé volume est nécessaire. Vous pouvez simplement spécifier un volume hôte directement:
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