Docker Machine + Docker Compose + Umesntu上的卷

时间:2015-12-05 16:30:22

标签: ubuntu docker virtualbox docker-compose docker-machine

所以我已经在我的Ubuntu 14.04 LTS主机上使用docker-compose开发了一段时间,并且有一个本地VirtualBox提供程序(其中包含boot2docker)。

直到最近我才决定尝试使用docker-machine(因为与Pycharm的集成),但我遇到了一些问题,例如当我保存一些新代码时,docker容器不再自动更新,我认为是因为我在docker-compose.yml网络服务中注释了我的卷,但如果我不这样做,我会收到manage.py not found错误,因此我在此here中理解我应该对其进行评论。

我一直在互联网上阅读很多东西,我想知道是否有一个好的和简单的方法让Docker-machine在Ubuntu上使用docker-compose很好地玩。

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
#   https://stackoverflow.com/a/31567743/977622
#  volumes:
#    - .:/vagrant
  ports:
    - "8000:8000"
  links:
    - "postgis:postgis"

更新:

当我在我的虚拟机内运行mount命令时,我得到:

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)

我的共享文件夹在UI中说文件夹路径为/home

3 个答案:

答案 0 :(得分:2)

不幸的是,您的最安全(以及最兼容)的赌注将是重新构建映像并为您所做的每项更改重新部署容器(即docker-compose build && docker-compose up -d或类似)。这对于远程Docker守护进程也有很好的好处(当你探索docker-machine时,这些功能可能会变得更具吸引力,因为它们很容易使用)。

答案 1 :(得分:1)

@ AndyShinn的评论/ @ tianon的回答回答了我相信的问题。

但是,如果您运行的是Ubuntu主机,则可以尝试在裸机上运行,​​而不是在VM中运行。现在,您可以通过--userns-remap标志以非root用户身份运行docker容器,这样您就可以更少关注安全性了。您处于一个独特的位置,因为尽管大多数教程和事物都列出了一个docker-machine VM作为先决条件,但他们的目标受众大多数是OS X或Windows上无法在没有VM的情况下运行docker的人。不要忽视森林的树木 - 管理程序(特别是Virtualbox)==糟糕的IO性能,过多的内存使用和较慢的启动。这就是为什么我们有docker:)

答案 2 :(得分:0)

docker-machine 尝试在运行VirtualBox的计算机和本地默认docker VM之间共享用户目录(如boot2docker所做的那样)。如果您没有运行默认VM,则创建vmshare并自行安装

在Windows C:\Users上和mac /Users上将default停靠者虚拟机挂载/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,因为上面的命令正在运行。

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

如果您希望机器中的更改显示在VM中,则必须使用您的用户目录并在docker compose中使用相对路径。