https://github.com/github/garethr-docker
Puppet module for managing docker
https://github.com/github/garethr-docker
Last synced: 5 months ago
JSON representation
Puppet module for managing docker
- Host: GitHub
- URL: https://github.com/github/garethr-docker
- Owner: github
- License: apache-2.0
- Archived: true
- Fork: true (garethr/garethr-docker)
- Created: 2014-04-14T15:39:11.000Z (almost 12 years ago)
- Default Branch: master
- Last Pushed: 2014-06-19T22:59:24.000Z (over 11 years ago)
- Last Synced: 2024-09-30T00:41:29.301Z (over 1 year ago)
- Language: Ruby
- Size: 362 KB
- Stars: 7
- Watchers: 27
- Forks: 11
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
Puppet module for installing
[Docker](https://github.com/dotcloud/docker) from the [official repository](http://docs.docker.io/en/latest/installation/ubuntulinux/) on Ubuntu or from [EPEL on RedHat](http://docs.docker.io/en/latest/installation/rhel/) based distributions.
This module is also available on the [Puppet
Forge](https://forge.puppetlabs.com/garethr/docker)
[](http://travis-ci.org/garethr/garethr-docker)
## Usage
The module includes a single class:
```puppet
include 'docker'
```
By default this sets up the docker hosted Apt repository and installs
the lxc-docker package and the required Kernel.
If you don't want this module to mess about with your Kernel then you
can disable this feature like so:
```puppet
class { 'docker':
manage_kernel => false,
}
```
If you want to configure your package sources independently,
inform this module to not auto-include upstream sources:
```puppet
class { 'docker':
use_upstream_package_source => false,
}
```
By default the docker daemon will bind to a unix socket at
/var/run/docker.sock. This can be changed, as well as binding to a tcp
socket if required.
```puppet
class { 'docker':
tcp_bind => 'tcp://127.0.0.1:4243',
socket_bind => 'unix:///var/run/docker.sock',
}
```
Unless specified this installs the latest version of docker from the
lxc-docker package. However if you want to specify a specific version
you can do so:
```puppet
class { 'docker':
version => '0.5.5',
}
```
In some cases dns resolution won't work well in the container unless you give a dns server to the docker daemon like this:
```puppet
class { 'docker':
dns => '8.8.8.8',
}
```
### Images
The next step is probably to install a docker image, for this we have a defined type which can be used like so:
```puppet
docker::image { 'base': }
```
This is equivalent to running `docker pull base`. This is downloading a large binary so on first run can take a while. For that reason this define turns off the default 5 minute timeout for exec. Takes an optional parameter for installing image tags that is the equivalent to running `docker pull -t="precise" ubuntu`:
```puppet
docker::image { 'ubuntu':
image_tag => 'precise'
}
```
Note: images will only install if an image of that name does not already exist.
You can also remove images you no longer need with:
```puppet
docker::image { 'base':
ensure => 'absent'
}
docker::image { 'ubuntu':
ensure => 'absent',
image_tag => 'precise'
}
```
### Containers
Now you have an image you can run commands within a container managed by docker.
```puppet
docker::run { 'helloworld':
image => 'base',
command => '/bin/sh -c "while true; do echo hello world; sleep 1; done"',
}
```
This is equivalent to running the following under upstart:
docker run -d base /bin/sh -c "while true; do echo hello world; sleep 1; done"
Run also contains a number of optional parameters:
```puppet
docker::run { 'helloworld':
image => 'base',
command => '/bin/sh -c "while true; do echo hello world; sleep 1; done"',
ports => ['4444', '4555'],
links => ['mysql:db'],
use_name => true,
volumes => ['/var/lib/couchdb', '/var/log'],
volumes_from => '6446ea52fbc9',
memory_limit => 10485760, # bytes
username => 'example',
hostname => 'example.com',
env => ['FOO=BAR', 'FOO2=BAR2'],
dns => ['8.8.8.8', '8.8.4.4'],
restart_service => true,
}
```
Ports, env, dns and volumes can be set with either a single string or as above with an array of values.
To use an image tag just append the tag name to the image name separated by a semicolon:
```puppet
docker::run { 'helloworld':
image => 'ubuntu:precise',
command => '/bin/sh -c "while true; do echo hello world; sleep 1; done"',
}
```