Подтвердить что ты не робот

Docker Machine + Docker Compose + Volumes на Ubuntu

Итак, я уже давно использую docker-compose в разработке на моем хост-компьютере Ubuntu 14.04 LTS с локальным провайдером VirtualBox (boot2docker внутри него).

Только недавно я решил попробовать докер-машину (из-за интеграции с Pycharm), но я столкнулся с некоторыми проблемами, например, когда я сохраняю новый код, контейнер докеров больше не обновляется автоматически, и я думаю, что это потому, что Я прокомментировал свои тома в моем веб-сервисе docker-compose.yml, но если я не получу ошибку manage.py not found, поэтому я понял в этом здесь, что я должен комментировать вместо этого.

Я читал много вещей в Интернете, и мне хотелось бы знать, есть ли хороший и простой подход, чтобы получить докер-машину, играющую красиво с помощью docker-compose на Ubuntu.

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/

Докер-compose.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
#   /info/313417/local-files-missing-from-docker-machine-container/1516773#1516773
#  volumes:
#    - .:/vagrant
  ports:
    - "8000:8000"
  links:
    - "postgis:postgis"

UPDATE:

когда я запускаю команду mount внутри моего vm, я получаю:

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)

Мои общие папки говорят в пользовательском интерфейсе, что путь к папке /home

4b9b3361

Ответ 1

К сожалению, ваша самая безопасная (и наиболее совместимая) ставка будет состоять в том, чтобы перестроить изображение и повторно развернуть контейнер для каждого сделанного вами изменения (т.е. docker-compose build && docker-compose up -d или аналогичного). Это также хорошо помогает работать с удаленными демонстрациями Docker (которые, когда вы исследуете функции docker-machine, могут стать более заманчивыми, поскольку они настолько просты в использовании).

Ответ 2

@AndyShinn комментарий/ответы @tianon отвечают на вопрос, который я считаю.

Однако, если вы используете хост Ubuntu, вы можете попробовать работать на голом металле, а не на виртуальной машине. В эти дни вы можете запускать контейнеры докеров как non-root с помощью флага --userns-remap, поэтому вы можете быть немного меньше озабочены безопасностью. Вы находитесь в уникальном положении, потому что, хотя большинство учебных пособий и вещей перечисляют VM-Docker-machine в качестве предварительного условия, их целевой аудиторией в основном являются люди на OS X или Windows, которые не могут запускать докер без виртуальной машины. Не упускайте из виду деревья для леса - гипервизоры (особенно Virtualbox) == Плохая производительность ввода-вывода, избыточное использование памяти и более медленный запуск. Вот почему у нас есть докер:)

Ответ 3

docker-machine пытается совместно использовать каталог пользователей между вашей машиной, на которой работает VirtualBox, и локальной док-станцией по умолчанию (например, boot2docker). Если вы не используете виртуальную машину по умолчанию, тогда создайте vmshare и смонтируйте ее самостоятельно.

В Windows C:\Users и на mac /Users будет смонтирован в default докере VM как /Users. Linux будет делиться /home и монтировать как /home

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

Список локальных каталогов

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

Установите локальный каталог, который совместно используется vm, в качестве тома контейнера.

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

То же самое работает на виртуальной машине, так как на самом деле выполняется эта команда.

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

Если вы хотите, чтобы изменения на вашем компьютере отображались на вашей виртуальной машине, вы должны работать из своего каталога пользователей и использовать относительные пути в компоновке докеров.