所以我已经在我的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
答案 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中使用相对路径。