2014-01-16 6 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에서 최신 버전을 다운로드하십시오.

일단 작업을 완료하면 Vagrantfile 옆에 Dockerfile을 넣으십시오. 당신의 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"또는 "image"중 하나를 설정해야합니다. – Mark

+0

이것은 Docker 이미지를 VM을 불러 오는데 사용하는 Docker 공급자를위한 것입니다. Docker 제공 업체는 Docker 이미지를 기본적으로 Linux 나 OS X의 최소 VM에서 가져옵니다. https://github.com/mitchellh/vagrant/issues/3721#issuecomment-42600273 –

3

하나의 해결 방법은 쉘 프로비저닝을 통해 :

dockerfile에서 이미지를 구축하기 위해 고정 표시기를 들어
config.vm.provision "shell", inline: "docker build -t username/image /vagrant; docker run -d username/image" 
1

, 문제 dockerfile 게스트 기계와이를 보장 할 수있는 방법으로 제시해야하는 공유 폴더 기능을 사용하는 것입니다 방랑제.

기본적으로 방랑자는 프로젝트 루트 폴더를 이름/방역 원 아래의 새 VM에 마운트합니다. 하지만 귀하의 경우에는 다른 폴더를 공유하고 거기에 독커 파일을 두는 것이 좋습니다. 또한 다른 폴더를 공유하면 dockerfiles가 게스트 시스템에서 읽기 전용으로 표시되는지 확인할 수 있습니다.

이제 "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

관련 문제