我在docker和vagrant中玩弄隔離我的開發環境。到目前爲止這麼好,我找到了一些很好的教程和介紹,但一些帖子似乎已過時作爲流浪漢envolved ...流浪漢,碼頭工人,共享卷在初始配置時沒有準備好
我的主要問題從我的主機上安裝共享文件夾到碼頭集裝箱 - 這種工作,但我不知道如果我遇到了流浪漢/碼頭問題或只是做錯了什麼。
讓我解釋一下我目前的狀態:
我使用以下Vagrantfile.boot2docker
我的虛擬機和虛擬機安裝當前目錄/app
。無論何時我更新主機上的文件,我都能看到vm內的文件夾,並且它的內容發生了變化。
VAGRANTFILE_API_VERSION = "2"
Vagrant.require_version ">= 1.6.3"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "yungsang/boot2docker"
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.synced_folder ".", "/app", type: "rsync"
# Uncomment below to use more than one instance at once
# config.vm.network :forwarded_port, guest: 2375, host: 2375, auto_correct: true
# Fix busybox/udhcpc issue
config.vm.provision :shell do |s|
s.inline = <<-EOT
if ! grep -qs ^nameserver /etc/resolv.conf; then
sudo /sbin/udhcpc
fi
cat /etc/resolv.conf
EOT
end
# Adjust datetime after suspend and resume
config.vm.provision :shell do |s|
s.inline = <<-EOT
sudo /usr/local/bin/ntpclient -s -h pool.ntp.org
date
EOT
end
config.vm.network :forwarded_port, guest: 5000, host: 5000
end
在我Vagrantfile
我創建兩個單獨泊塢窗的容器,一個孤立的Redis實例和我的節點的應用程序,其安裝在虛擬機中的應用程序目錄容器d.volumes=["/app:/foo"]
VAGRANTFILE_API_VERSION = "2"
ENV['VAGRANT_DEFAULT_PROVIDER'] = 'docker'
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.define "redis" do |redis|
redis.vm.provider 'docker' do |d|
d.image = 'redis:latest'
#Comment the line below if you are running on a linux host
d.vagrant_vagrantfile = "./Vagrantfile.boot2docker"
d.name = 'redis'
end
end
config.vm.define "node_app" do |node_app|
node_app.vm.provider "docker" do |d|
d.name = 'node_app'
d.build_dir = "."
#Comment the line below if you are running on a linux host
d.vagrant_vagrantfile = "./Vagrantfile.boot2docker"
d.ports = ["5000:5000"]
d.volumes = ["/app:/foo"]
d.link('redis:redis')
end
end
end
我Dockerfile
負荷最新的nodejs容器,並在安裝依賴關係並運行應用程序之前將package.json
和app.js
從主機複製到app
目錄。從當前目錄中的文件夾的靜態副本工作正常,我的應用程序連接到redis和工作,我可以達到預期在http://192.168.33.10:5000! (注:我已經在這裏註釋掉VOLUME命令,使文件在容器剛纔複製的lifecylce的開始)
FROM node:latest
#use vagrant shared folder
ADD . /app
WORKDIR /app
# install your application's dependencies
RUN npm install
# exposes our app port
EXPOSE 5000
# replace this with your main "server" script file
CMD ["node", "app.js"]
我第一次成功後,我試圖用我的共享卷,並改變了Dockerfile
如下:
FROM node:latest
#use vagrant shared folder
ADD . /foo
# mount volume
VOLUME ['/foo']
WORKDIR /foo
# install your application's dependencies
RUN npm install
# exposes our app port
EXPOSE 5000
# replace this with your main "server" script file
CMD ["node", "app.js"]
我重新加載虛擬機,並得到了一堆錯誤:多no package.json found
或npm module missing (express)
。我已經想通了 - 通過使用第一個Dockerfile和以下node.js應用程序https://gist.github.com/joernroeder/e86a3882360497c828f9(其中簡單列出了/foo
中的文件以及其中的內容) - 卷需要一些時間才能裝入,用它自己的初始值替換foo
的內容內容並刪除生成的文件(包括node_modules
目錄)。 因此,/foo
中的文件反映了主機的變化,並且同步運行良好。
你對我有什麼提示和技巧嗎?我可以如何在時間安裝音量,或者我在這裏做的事情完全是愚蠢的?
由於
我建議你看看碼頭 - 碼頭和碼頭機。他們會解決你的問題。 – david30xie
謝謝!使用docker-compose構建docker-machine的設置解決了我的問題! –