Simple tool for running Docker based development environments with Chef and Berkshelf based provisioning.
Reads config from the Tuggerfile in your project's root folder and uses use a tugger-stack from another git
repository which contains the provisioning config for your development container.
You can find a Debian based LAMP tugger-stack here: https://github.com/joschi127/tugger-stack-lamp-php7
To create your own provisioning config, just fork the repository of the tugger-stack and use the Git URL of your
own repository in your Tuggerfile.
- Inspired by
Vagrantand thevagrant upcommand - just runtugger startfrom your project folder and you're ready to go ChefandBerkshelfbased provisioning, originally based on theVagrant-LAMP-Stackby MiniCodeMonkey- And of course also thanks a lot to all the guys from
Docker,Chef,Berkshelfand all the other great tools we're using for this - Thanks to Mike and Chris from the
Coder Radiopodcast where I heard aboutDockerfor the very first time
- Should be as easy to use as
Vagrant(having less features but being more lightweight) - Should work out of the box on Linux and Mac (only
Dockerand standard tools lilebashorgitare required) - Faster and using less memory and disk space than
Vagrantor other virtual machines, thanks to the power ofDockercontainers (at least on Linux hosts) - Automatic provisioning and reprovisioning
- Allows using a shared
Dockerimage if you create several containers from the sametugger-stackto save disk space and to allow creating new containers faster - Automatically shares your project source files with the container
- Automatically shares your
~/.gitand~/.sshsettings folders with the container so you can use git and your existing SSH keys from within the container - Avoids nasty permission issues (e.g. by automatically running Apache and PHP with your own user's user id in
tugger-stack-lampandtugger-stack-lamp-php7) - Automatically updates your
/etc/hostsfile so you can access your containers by using a fixed host name - Automatically allocates mapped ports (required on Mac for direct access e.g. to the webserver running in the container)
- Allows to override settings predefined in the
tugger-stack's chef.json file by setting extra chef.json data in your Tuggerfile
Docker has to be installed and your own user account has to be allowed to use it. (For most systems, add yourself
to the docker group and re-login.)
On Macs you have to use boot2docker in addition.
Install tugger if not already installed:
# on linux: install tugger whereever you want
git clone https://github.com/joschi127/tugger /some/target/path/tugger
# on mac: tugger has to be installed somewhere under /Users/
git clone https://github.com/joschi127/tugger /Users/your_username/some/target/path/tugger
Make it available as a global command: (optional)
sudo ln -s /some/target/path/tugger/bin/tugger /usr/local/bin/tugger
Add a Tuggerfile to your project:
cp /some/target/path/tugger/Tuggerfile.example /path/to/your/project/Tuggerfile
# edit the file with your favorite text editor
# feel free to add the file to your project's version control system
Start docker container by using tugger:
tugger start
For more information have a look at the command reference:
tugger --help
To show the current status, IP address, mapped ports etc. of a container you can use:
tugger status
To access a shell in the container, use SSH like this:
# replace 'projectname' with the name you have defined in your Tuggerfile
ssh webserver@projectname
# if you are on a mac using a boot2docker virtual machine, you have to pass the mapped port in addition
ssh webserver@projectname -p 7227
Your project folder will be available under /var/www/webproject in the container.
So to execute command line tools (like for example composer) in your container, cd into this folder:
cd /var/www/webproject
# then for example you can run: composer install -o
Just use your project's hostname to open your project in the browser: (from the same computer that is running the docker container)
# replace 'projectname' with the name you have defined in your Tuggerfile
http://projectname
# if you are on a mac using a boot2docker virtual machine, you have to pass the mapped port in addition
http://projectname:7285
For accessing the webserver from other devices in your LAN (for example from a mobile device) you can open a SSH tunnel to map a port:
# replace 'projectname' with the name you have defined in your Tuggerfile
ssh -f -N -L *:8080:localhost:80 webserver@projectname
# if you are on a mac using a boot2docker virtual machine, you have to pass the mapped port in addition
ssh -f -N -L *:8080:localhost:80 webserver@projectname -p 7227
Then you should be able to access the webserver from other devices in your LAN by opening an URL like this:
# replace 192.168.0.123 with the LAN IP of the machine which is running the docker container
http://192.168.0.123:8080
# check cocker process list
docker ps
# run bash in container directly via docker
docker exec -it container-name bash
# run provisioning within container
docker exec -it container-name bash
cd /chef
/opt/chef/embedded/bin/berks vendor /chef/cookbooks
chef-solo --legacy-mode -c "/chef/chef.rb" -j "/chef/chef.json"