vagrant/docs/getting-started/packaging.md

3.4 KiB

layout title
getting_started Getting Started - Packaging

Packaging

With the virtual machine working and ready, we're ready to get to work. But let's assume in this situation that you have other team members, and you want to share the same virtual environment with them. Let's package this new environment into a box for them so they can get up and running with just a few keystrokes.

Packages are tar files ending in the suffix 'box' (hence known as box files) containing the exported virtual machine and optionally additional files specified on the command line. A common file also included with boxes is a Vagrantfile. If a Vagrantfile exists in a box, it will be added to the configuration load chain. Boxes can use a Vagrantfile to specify default forwarded ports, SSH information, etc. Note, however, that a Vagrantfile is not required to be packaged with a box, and boxes will work just fine without one.

Before working through the rest of this page, make sure the virtual environment is built by running vagrant up.

Creating the Vagrantfile

First, we're going to create a basic Vagrantfile we'll package with the box which will forward the web port. This way, users of the box can simply add the box, do a vagrant up, and have everything working, including HTTP! First, backup your old Vagrantfile by copying it to something like Vagrantfile.bak. Then, create a new Vagrantfile which simply forwards the web port. The resulting Vagrantfile should look like the following:

{% highlight ruby %} Vagrant::Config.run do |config|

Forward apache

config.vm.forward_port("web", 80, 8080) end {% endhighlight %}

Packaging the Project

Run the following code to package the environment up:

{% highlight bash %} $ vagrant halt $ vagrant package --include Vagrantfile {% endhighlight %}

The first command simply halts the running virtual machine (if its running). This is basically equivalent to pulling the plug on our machine and is not recommended in general. In this case, it shouldn't really cause any damage.

The second command is where the meat is. vagrant package takes the virtual environment from the current project and packages it into a package.box file in the same directory. The additional options passed to the command tell it to include the newly created Vagrantfile with it, so that the users of the box will already have port forwarding setup.

Distributing the Box

Vagrant currently supports installing boxes from local file path or from HTTP. If the box you're distributing has private data on it (such as a company's web application or client work for freelancers), then you should keep the box on a secure filesystem where the public cannot access it.

If the box you're distributing is meant to be public, HTTP is the best resource to upload to, so that anyone can easily download it.

Once the box is in place, other developers can add it and use it just like any other box. The example below is from the point of view of a new developer on your team using your newly packaged box:

{% highlight bash %} $ vagrant box add my_box /path/to/the/package.box $ vagrant init my_box $ vagrant up {% endhighlight %}

At this point, they should have a fully functional environment which exactly mirrors the environment set up in previous steps of the guide. Notice that they didn't have to do do provisioning, or set up anything on their system (other than Vagrant), etc. Distributing development environments has never been so easy.