Creating an easily-distributable dev environment – Docker/Vagrant? [closed]
I’m trying to figure out how to go about making an easy way to distribute a “dev environment” for working with my organization’s WordPress site. We currently have a local Linux server running the WordPress site, and a VirtualBox image that is horribly out of date and a very poor representation of this server. We currently distribute this to team members for their local development, which causes lots of problems as the local image is often too different.
I’m not too worried about the database aspect of things; I’m thinking of just doing weekly dumps from the live server which can be imported by developers to keep their local up to date.
I’m more interested in finding an easy to distribute a preconfigured stack to users on OSX or Windows that already has PHP/Apache/MySQL configured by me, a git client set up to pull all the static files on command–something the user can just run, then go to localhost:8000 to see it. I’d also like some way for them to edit the files that were pulled from the git repository.
I’m currently looking into Docker and Vagrant but I’m not sure what’s more appropriate for this task—Docker seems like it would be more suited to Linux machines. I know Vagrant supports mapping external folders into the VM, which seems like it’d solve my problem, but I wanted to ask for more suggestions before I start learning Chef/Puppet/etc.
One Solution collect form web for “Creating an easily-distributable dev environment – Docker/Vagrant? [closed]”
I think both Vagrant and Docker may be used to solve your problem.
Vagrant may be more adequate to share the environment with Windows/mac machines, but integration with Docker in these systems are better day-by-day using tools such as boot2docker.
Docker by contrast requires using a moder Linux Kernel or one of these tools.
If I had to develop the Vagrant option, I would setup a machine with all the dependencies installed in the same machine. To install you can use one of the provisioners available in Vagrant (e.g.: Chef, Puppet). This may be easier if you have previous experience with them and/or if you are not very keen on bash. There are a lot of examples you can check to see how you can do it, such as https://github.com/r8/vagrant-lamp
Using Docker is also a very good option. Answering your question, you can share any local folder of the host machine with a container (using the docker run option
--volume). In this case I would run each of the services you want to provide (i.e.: php server, MySQL, Apache..) as independent containers, and linking them using the docker run option
--link. Programming your Dockerfiles to build this containers may result more difficult than if you were using Chef or Puppet (although you could use them to build the containers, the integration is not as good as with Vagrant). But with Docker you can take advance of all the apps ready to use you have available in the Docker Hub. Also I would recommend you a docker tool called fig (www.fig.sh) that let running a container cluster linking and configuring the services easily, and it’s allow to manage all the containers in a very comfortable way. Again you can find very illustrative examples of this user case over the internet, as for example https://github.com/kasperisager/phpstack