Docker Machine + Docker Compose + Volumes sur Ubuntu

j'ai donc utilisé docker-composer en développement depuis un moment sur ma machine hôte Ubuntu 14.04 LTS avec un fournisseur local de VirtualBox (boot2docker à l'intérieur).

ce n'est que récemment que j'ai décidé d'essayer docker-machine (à cause de l'intégration avec Pycharm) mais je suis en train de rencontrer des problèmes comme par exemple quand je sauve du nouveau code le conteneur docker n'est plus mis à jour automatiquement et je pense que c'est parce que j'ai commenté mes volumes dans mon docker-compose.yml service web mais si je n'ai pas, je vais obtenir un manage.py not found erreur donc je l'ai compris dans ce ici que je devrais commenter la place.

j'ai lu beaucoup de choses sur internet et je voudrais savoir s'il y a une bonne et simple approche pour obtenir docker-machine jouer bien avec docker-composer sur Ubuntu.

fichier DockerFile

FROM ubuntu:14.04.3
ENV PYTHONUNBUFFERED 1
RUN apt-get update && apt-get install -y 
  build-essential 
  git-core 
  python2.7 
  python-pip 
  python-dev 
  libpq-dev 
  postgresql-client-9.3 
  libjpeg-dev 
  binutils 
  libproj-dev 
  gdal-bin
RUN mkdir /vagrant
WORKDIR /vagrant
RUN mkdir requirements
COPY requirements requirements
RUN pip install -r requirements/local.txt
COPY . /vagrant/

menu fixe-composer.yml

postgis:
  image: mdillon/postgis:9.3
  ports:
    - "5432:5432"
  environment:
    POSTGRES_USER: postgres
    POSTGRES_PASSWORD: "postgres"
#  volumes:
#    - /etc/postgresql
#    - /var/log/postgresql
#    - /var/lib/postgresql

web:
  build: .
  dockerfile: Dockerfile
  command: python manage.py runserver 0.0.0.0:8000 --settings=xxx.settings.local
#   https://stackoverflow.com/a/31567743/977622
#  volumes:
#    - .:/vagrant
  ports:
    - "8000:8000"
  links:
    - "postgis:postgis"

mise à jour:

quand je cours le mount commande à l'intérieur de ma vm, je obtenir:

tmpfs on / type tmpfs (rw,relatime,size=918096k)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
devpts on /dev/pts type devpts (rw,relatime,mode=600,ptmxmode=000)
tmpfs on /dev/shm type tmpfs (rw,relatime)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
/dev/sda1 on /mnt/sda1 type ext4 (rw,relatime,data=ordered)
cgroup on /sys/fs/cgroup type tmpfs (rw,relatime,mode=755)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,relatime,cpuset)
cgroup on /sys/fs/cgroup/cpu type cgroup (rw,relatime,cpu)
cgroup on /sys/fs/cgroup/cpuacct type cgroup (rw,relatime,cpuacct)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,relatime,blkio)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,relatime,memory)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,relatime,devices)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,relatime,freezer)
cgroup on /sys/fs/cgroup/net_cls type cgroup (rw,relatime,net_cls)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,relatime,perf_event)
cgroup on /sys/fs/cgroup/net_prio type cgroup (rw,relatime,net_prio)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,relatime,hugetlb)
/dev/sda1 on /mnt/sda1/var/lib/docker/aufs type ext4 (rw,relatime,data=ordered)
none on /mnt/sda1/var/lib/docker/aufs/mnt/137fb1ad9a432a3f4fa47667ecc9991c10149b71f02dfc06a8134fc348532a3d type aufs (rw,relatime,si=462e07a762a4065f,dio,dirperm1)
shm on /mnt/sda1/var/lib/docker/containers/137fb1ad9a432a3f4fa47667ecc9991c10149b71f02dfc06a8134fc348532a3d/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=65536k)
mqueue on /mnt/sda1/var/lib/docker/containers/137fb1ad9a432a3f4fa47667ecc9991c10149b71f02dfc06a8134fc348532a3d/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime)
nsfs on /var/run/docker/netns/2e4dbeed7a66 type nsfs (rw)

mes dossiers partagés indiquent dans L'interface utilisateur que le chemin du dossier est /home

17
demandé sur Community 2015-12-05 19:30:22

3 réponses

Malheureusement, votre le plus sûr (et compatible) le pari va être à re-construire l'image et de re-déployer le conteneur pour chaque changement que vous faites (c'est à dire, docker-compose build && docker-compose up -d ou similaire). Cela a l'avantage de travailler aussi contre les démons remote Docker (que vous explorez pourraient devenir plus tentantes puisqu'elles sont si faciles à utiliser).

2
répondu tianon 2015-12-18 08:18:36

Le Commentaire de@AndyShinn / les réponses de @tianon répondent à la question que je crois.

cependant, si vous exécutez un hôte Ubuntu, vous pourriez essayer de courir sur métal nu, plutôt que dans une VM. De nos jours, vous pouvez exécuter Docker containers comme non-root via le --userns-remap drapeau, de sorte que vous pouvez être un peu moins préoccupés par la sécurité. Vous êtes dans une position unique, parce que même si la plupart des tutoriels et des choses énumèrent une VM docker-machine comme une condition préalable, leur public cible est principalement les gens sur OS X ou Windows qui ne peut pas exécuter docker sans VM. Ne perdez pas de vue les arbres pour la forêt--hyperviseurs (en particulier Virtualbox) == mauvaise performance D'IO, utilisation excessive de mémoire, et démarrage plus lent. C'est pourquoi nous avons docker :)

1
répondu pnovotnak 2016-03-04 01:08:07

docker-machine tentez de partager le répertoire des utilisateurs entre votre machine qui exécute VirtualBox et la VM locale par défaut de docker (comme boot2docker l'a fait). Si vous n'utilisez pas la VM par défaut, créez la vmshare et montez-la vous-même

Sous Windows C:\Users et sur un mac /Users sera monté dans le default panneau de VM /Users. Linux va partager /home et comme le mont /home

vmhost$ docker-machine ssh default
vm$ mount | grep User
Users on /Users type vboxsf (rw,nodev,relatime)
vm$ exit

liste A utilisateurs locaux répertoire

vmhost$ ls -1 /Users/me/docker
compose_env_file
registry_push_test

monter le répertoire local, qui est partagé à la vm, comme un volume de conteneur.

vmhost$ docker run -v /Users/me/docker:/test busybox ls /test
compose_env_file
registry_push_test

la même chose fonctionne sur la VM, car c'est vraiment là que la commande ci-dessus est exécutée.

vm$ docker run -v /Users/me/docker:/test busybox ls /test
compose_env_file
registry_push_test

si vous voulez que les modifications de votre machine apparaissent dans votre VM, vous devez travailler à partir de votre répertoire utilisateur et utiliser les chemins relatifs dans docker composer.

0
répondu Matt 2016-06-04 03:33:35