Je joue avec Docker Compose 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:
~/var/www
/var/www
J'ai lu des documents ici mais je ne sais pas comment gérer les volumes de données et les données de l'hôte.
Je souhaite 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 correct ou ce qui doit être changé afin de réaliser ce dont j'ai besoin. Je sais comment faire en utilisant docker run
seul mais n'a aucune idée de Docker Compose?
Quelqu'un peut-il m'aider à faire fonctionner cela?
Mise à jour: jouer avec cela
J'ai ajouté ces lignes au docker-compose.yml
fichier:
volumes_from:
- volumes_source
Et je lance le docker-compose up
encore une fois mais voici le résultat:
php55devwork_volumes_data_1 exited with code 0
php55devwork_volumes_source_1 exited with code 0
Je ne sais pas ce qui se passe ou pourquoi j'obtiens l'erreur, tout?
Il semble que vous tentiez de définir un "conteneur de données". Ce modèle était habituel, mais ce n'est plus 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- )
Cette image que vous utilisez, tianon/true
, est conçu pour exécuter la commande "true", qui ne fait rien d'autre que renvoyer le code de sortie 0, puis quitter. C'est pourquoi le conteneur s'affiche comme étant sorti.
Au lieu d'utiliser des conteneurs de données, utilisez un volume nommé. Par exemple, l'approche suivante utilisant un conteneur de données:
docker create --name data-container -v /sessions tianon/true
docker run --volume-from data-container -d myapp
devient ceci:
docker volume create --name sessions
docker run -v sessions:/sessions -d myapp
Puisque vous utilisez la composition, vous pouvez définir des volumes à l'aide de la clé des 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
Tous les détails et un exemple se trouvent ici: https://docs.docker.com/compose/compose-file/compose-file-v2/
Cependant, vous avez également mentionné vouloir partager ces données de volume entre le conteneur et votre hôte. Dans ce cas, ni un conteneur de données ni un volume nommé n'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