2014-01-16 7 views
15

外部Dockerfile経由でDockerのプロビジョニングを開始するにはどうすればよいですか? マイVagrantfileは、現時点では、このようになりますVagrantからDockerfileをプロビジョニングするには

Vagrant.configure("2") do |config| 
    config.vm.box = "precise64" 
    config.vm.define :server_infrastructure do |t| 
    end 

    config.vm.provision "docker" do |d| 
    d.pull_images "ubuntu" 
    #how does the below work? 
    #d.build "new-container-name" "local-docker-file-name" 
    end 
end 

あなたの助けを大幅に

答えて

28

An option for the Docker provisioner to build imagesv1.6.0に追加されましたが認識されます。 the Vagrant websiteから最新バージョンをダウンロードしてください。

これを実行したら、DagerfileをVagrantfileの横に置きます。あなたのVagrantfileにこれを追加します。

config.vm.provision "docker" do |d| 
    d.build_image "/vagrant", args: "-t my-name/my-new-image" 
    d.run "my-name/my-new-image" 
end 

は、今すぐあなたのドッカーイメージが構築され、vagrant upで実行されます。

+0

このVagranfileを実行すると、このマシンの設定にエラーが発生します。 次のエラーを修正して、もう一度お試しください: ドッカプロバイダ: *「build_dir」または「イメージ」これは、ドッカーのプロビジョニングのために、VMを立ち上げるの一環として、ドッカー画像を育てるためである – Mark

+0

を設定しなければならないの一つ。 Dockerのプロバイダではなく、Linux上またはOS Xの最小限のVMでDockerイメージをネイティブに表示します。https://github.com/mitchellh/vagrant/issues/3721#issuecomment-42600273を参照してください。 –

3

1つの回避策は、シェルプロビジョニングによってである:

dockerfileからイメージを構築するためのドッキングウィンドウの場合
config.vm.provision "shell", inline: "docker build -t username/image /vagrant; docker run -d username/image" 
1

、問題のdockerfileは、ゲストマシンに提示しなければならず、これを確実にする方法は、共有フォルダ機能を使用することです迷彩の

デフォルトでは、プロジェクトのルートフォルダを名前/迷路の下にある新しいVMにマウントします。しかし、あなたの場合、私はあなたが別のフォルダを共有し、そこにドッカーファイルを置くことをお勧めします。また、別のフォルダを共有することで、ドッカーファイルがゲストマシンによって読み取り専用であることを確認できます。

プロジェクトのルートディレクトリに "docker"という名前の新しいフォルダを作成し、そこにドッキングファイルを入れるとします。今度は、このフォルダをゲストマシンにマウントし、そのファイルを使用するようにdockerを設定すると、すべて設定されます。迷惑メールファイルにこれらの行を追加すると、期待どおりに動作します。 config.vm.synced_folder "docker/", "/docker_builds", create: true, mount_options: ["ro"] config.vm.provision "docker" do |d| d.build_image "/docker_builds", args: "-t my-name/my-new-image" d.run "my-name/my-new-image" end

関連する問題