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
Ответы
Ответ 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
Если вы хотите, чтобы изменения на вашем компьютере отображались на вашей виртуальной машине, вы должны работать из своего каталога пользователей и использовать относительные пути в компоновке докеров.