docker-provider 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +19 -0
- data/.rspec +2 -0
- data/.travis.yml +8 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +21 -0
- data/Gemfile.lock +125 -0
- data/Guardfile +6 -0
- data/LICENSE.txt +22 -0
- data/README.md +134 -0
- data/Rakefile +20 -0
- data/boxes/dummy/README.md +17 -0
- data/boxes/dummy/metadata.json +3 -0
- data/boxes/nginx/.gitignore +1 -0
- data/boxes/nginx/Dockerfile +4 -0
- data/boxes/nginx/README.md +25 -0
- data/boxes/nginx/Vagrantfile.sample +6 -0
- data/boxes/nginx/metadata.json +3 -0
- data/boxes/nginx/start +5 -0
- data/boxes/precise/.gitignore +1 -0
- data/boxes/precise/Dockerfile +42 -0
- data/boxes/precise/README.md +18 -0
- data/boxes/precise/Vagrantfile.sample +6 -0
- data/boxes/precise/metadata.json +3 -0
- data/development/Vagrantfile +91 -0
- data/docker-provider.gemspec +25 -0
- data/example/Vagrantfile +36 -0
- data/lib/docker-provider.rb +1 -0
- data/lib/docker-provider/action.rb +161 -0
- data/lib/docker-provider/action/check_running.rb +25 -0
- data/lib/docker-provider/action/create.rb +56 -0
- data/lib/docker-provider/action/created.rb +18 -0
- data/lib/docker-provider/action/destroy.rb +24 -0
- data/lib/docker-provider/action/forward_ports.rb +54 -0
- data/lib/docker-provider/action/is_running.rb +20 -0
- data/lib/docker-provider/action/message.rb +23 -0
- data/lib/docker-provider/action/share_folders.rb +63 -0
- data/lib/docker-provider/action/start.rb +18 -0
- data/lib/docker-provider/action/stop.rb +21 -0
- data/lib/docker-provider/config.rb +28 -0
- data/lib/docker-provider/driver.rb +114 -0
- data/lib/docker-provider/plugin.rb +24 -0
- data/lib/docker-provider/provider.rb +59 -0
- data/lib/docker-provider/version.rb +5 -0
- data/locales/en.yml +21 -0
- data/spec/acceptance/Vagrantfile +25 -0
- data/spec/acceptance/vagrant_ssh.bats +34 -0
- data/spec/acceptance/vagrant_up.bats +35 -0
- data/spec/spec_helper.rb +19 -0
- data/spec/support/unit_example_group.rb +39 -0
- data/spec/unit/driver_spec.rb +143 -0
- metadata +142 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4ecc63749fe1c7951f04eecbcedc6579fcec0db7
|
4
|
+
data.tar.gz: fbdb3556de90b576e1b3613e4de96791599963fc
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 575626e4f52623abc118e4feee9df5faa2f4a82c1adacd449b2c657b38e1a07ecd233f24bfd381d8a9c64259675425f66adbf82dbe4e33b35bd1026043e1eee1
|
7
|
+
data.tar.gz: 8f457fe8e793b59ad56c8e575cb7d2497a65d96a5545f23390e5c5e8ac053bbbc9e35cbd09b04e30a894965dd4b050c6757d0692d67aa9aae16311b92fe39c50
|
data/.gitignore
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
.yardoc
|
6
|
+
InstalledFiles
|
7
|
+
_yardoc
|
8
|
+
coverage
|
9
|
+
doc/
|
10
|
+
lib/bundler/man
|
11
|
+
pkg
|
12
|
+
rdoc
|
13
|
+
spec/reports
|
14
|
+
test/tmp
|
15
|
+
test/version_tmp
|
16
|
+
tmp
|
17
|
+
/development/.vagrant
|
18
|
+
/example/.vagrant
|
19
|
+
/spec/acceptance/.vagrant
|
data/.rspec
ADDED
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
# Specify your gem's dependencies in docker-provider.gemspec
|
4
|
+
gemspec
|
5
|
+
|
6
|
+
group :development, :test do
|
7
|
+
gem 'vagrant', github: 'mitchellh/vagrant'
|
8
|
+
end
|
9
|
+
|
10
|
+
group :development do
|
11
|
+
gem 'guard'
|
12
|
+
gem 'guard-rspec'
|
13
|
+
gem 'rb-inotify'
|
14
|
+
|
15
|
+
gem 'vagrant-notify', github: 'fgrehm/vagrant-notify'
|
16
|
+
gem 'vagrant-cachier', github: 'fgrehm/vagrant-cachier'
|
17
|
+
gem 'vagrant-pristine', github: 'fgrehm/vagrant-pristine'
|
18
|
+
gem 'vagrant-lxc', github: 'fgrehm/vagrant-lxc'
|
19
|
+
gem 'vagrant-global-status', github: 'fgrehm/vagrant-global-status'
|
20
|
+
gem 'ventriloquist', github: 'fgrehm/ventriloquist'
|
21
|
+
end
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,125 @@
|
|
1
|
+
GIT
|
2
|
+
remote: git://github.com/fgrehm/vagrant-cachier.git
|
3
|
+
revision: 536ca7ad54b3096644993f91f363df8a884d4600
|
4
|
+
specs:
|
5
|
+
vagrant-cachier (0.4.2.dev)
|
6
|
+
|
7
|
+
GIT
|
8
|
+
remote: git://github.com/fgrehm/vagrant-global-status.git
|
9
|
+
revision: a0295400a0e47756cbcb8f97ed9f4449b1fb6b56
|
10
|
+
specs:
|
11
|
+
vagrant-global-status (0.1.1)
|
12
|
+
|
13
|
+
GIT
|
14
|
+
remote: git://github.com/fgrehm/vagrant-lxc.git
|
15
|
+
revision: 4ca375ec5049fd2e50773b486df84ecd14f0dc4f
|
16
|
+
specs:
|
17
|
+
vagrant-lxc (0.6.5.dev)
|
18
|
+
|
19
|
+
GIT
|
20
|
+
remote: git://github.com/fgrehm/vagrant-notify.git
|
21
|
+
revision: 4fd0040dc63ac88094aaa52c21496badebe1f938
|
22
|
+
specs:
|
23
|
+
vagrant-notify (0.3.0)
|
24
|
+
|
25
|
+
GIT
|
26
|
+
remote: git://github.com/fgrehm/vagrant-pristine.git
|
27
|
+
revision: 4638491786943bfbf6f115b1fc379f069963fe46
|
28
|
+
specs:
|
29
|
+
vagrant-pristine (0.3.0)
|
30
|
+
|
31
|
+
GIT
|
32
|
+
remote: git://github.com/fgrehm/ventriloquist.git
|
33
|
+
revision: 0eadf36c67417b13890715bc365b858b8adcd959
|
34
|
+
specs:
|
35
|
+
ventriloquist (0.3.3.dev)
|
36
|
+
vocker (~> 0.3.3)
|
37
|
+
|
38
|
+
GIT
|
39
|
+
remote: git://github.com/mitchellh/vagrant.git
|
40
|
+
revision: a92e03cf4ce936243d3959b7b5603262a234a58d
|
41
|
+
specs:
|
42
|
+
vagrant (1.3.6.dev)
|
43
|
+
childprocess (~> 0.3.7)
|
44
|
+
erubis (~> 2.7.0)
|
45
|
+
i18n (~> 0.6.0)
|
46
|
+
log4r (~> 1.1.9)
|
47
|
+
net-scp (~> 1.1.0)
|
48
|
+
net-ssh (~> 2.6.6)
|
49
|
+
|
50
|
+
PATH
|
51
|
+
remote: .
|
52
|
+
specs:
|
53
|
+
docker-provider (0.0.1)
|
54
|
+
|
55
|
+
GEM
|
56
|
+
remote: https://rubygems.org/
|
57
|
+
specs:
|
58
|
+
celluloid (0.15.2)
|
59
|
+
timers (~> 1.1.0)
|
60
|
+
childprocess (0.3.9)
|
61
|
+
ffi (~> 1.0, >= 1.0.11)
|
62
|
+
coderay (1.0.9)
|
63
|
+
diff-lcs (1.2.4)
|
64
|
+
erubis (2.7.0)
|
65
|
+
ffi (1.9.3)
|
66
|
+
formatador (0.2.4)
|
67
|
+
guard (2.2.2)
|
68
|
+
formatador (>= 0.2.4)
|
69
|
+
listen (~> 2.1)
|
70
|
+
lumberjack (~> 1.0)
|
71
|
+
pry (>= 0.9.12)
|
72
|
+
thor (>= 0.18.1)
|
73
|
+
guard-rspec (4.0.3)
|
74
|
+
guard (>= 2.1.1)
|
75
|
+
rspec (~> 2.14)
|
76
|
+
i18n (0.6.5)
|
77
|
+
listen (2.2.0)
|
78
|
+
celluloid (>= 0.15.2)
|
79
|
+
rb-fsevent (>= 0.9.3)
|
80
|
+
rb-inotify (>= 0.9)
|
81
|
+
log4r (1.1.10)
|
82
|
+
lumberjack (1.0.4)
|
83
|
+
method_source (0.8.2)
|
84
|
+
net-scp (1.1.2)
|
85
|
+
net-ssh (>= 2.6.5)
|
86
|
+
net-ssh (2.6.8)
|
87
|
+
pry (0.9.12.2)
|
88
|
+
coderay (~> 1.0.5)
|
89
|
+
method_source (~> 0.8)
|
90
|
+
slop (~> 3.4)
|
91
|
+
rake (10.1.0)
|
92
|
+
rb-fsevent (0.9.3)
|
93
|
+
rb-inotify (0.9.2)
|
94
|
+
ffi (>= 0.5.0)
|
95
|
+
rspec (2.14.1)
|
96
|
+
rspec-core (~> 2.14.0)
|
97
|
+
rspec-expectations (~> 2.14.0)
|
98
|
+
rspec-mocks (~> 2.14.0)
|
99
|
+
rspec-core (2.14.7)
|
100
|
+
rspec-expectations (2.14.3)
|
101
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
102
|
+
rspec-mocks (2.14.4)
|
103
|
+
slop (3.4.6)
|
104
|
+
thor (0.18.1)
|
105
|
+
timers (1.1.0)
|
106
|
+
vocker (0.3.3)
|
107
|
+
|
108
|
+
PLATFORMS
|
109
|
+
ruby
|
110
|
+
|
111
|
+
DEPENDENCIES
|
112
|
+
bundler (~> 1.3)
|
113
|
+
docker-provider!
|
114
|
+
guard
|
115
|
+
guard-rspec
|
116
|
+
rake
|
117
|
+
rb-inotify
|
118
|
+
rspec
|
119
|
+
vagrant!
|
120
|
+
vagrant-cachier!
|
121
|
+
vagrant-global-status!
|
122
|
+
vagrant-lxc!
|
123
|
+
vagrant-notify!
|
124
|
+
vagrant-pristine!
|
125
|
+
ventriloquist!
|
data/Guardfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Fabio Rehm
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
# docker-provider
|
2
|
+
|
3
|
+
A spike on a [Docker](http://www.docker.io/) provider for [Vagrant](http://www.vagrantup.com/)
|
4
|
+
1.3+.
|
5
|
+
|
6
|
+
|
7
|
+
## Warning
|
8
|
+
|
9
|
+
This is highly experimental and is just 8 [tomatoes](http://pomodorotechnique.com/)
|
10
|
+
worth of development / testing.
|
11
|
+
|
12
|
+
|
13
|
+
## Requirements
|
14
|
+
|
15
|
+
* Vagrant 1.3+
|
16
|
+
* Docker 0.6.5+
|
17
|
+
|
18
|
+
|
19
|
+
## Features
|
20
|
+
|
21
|
+
* Support for Vagrant's `up`, `destroy`, `halt`, `reload` and `ssh` commands
|
22
|
+
* Port forwarding
|
23
|
+
* Synced / shared folders support
|
24
|
+
* Set container hostnames from Vagrantfiles
|
25
|
+
* Provision Docker containers with any built-in Vagrant provider
|
26
|
+
|
27
|
+
|
28
|
+
## Getting started
|
29
|
+
|
30
|
+
If you are on a Mac / Windows machine, please fire up a x64 VM with Docker +
|
31
|
+
Vagrant installed or use [this Vagrantfile](https://gist.github.com/fgrehm/fc48fb51ec7df64439e4)
|
32
|
+
and follow the instructions from there.
|
33
|
+
|
34
|
+
The plugin is not very user friendly at the moment, so please download the base
|
35
|
+
Docker image manually with `docker pull fgrehm/vagrant-ubuntu:precise` in order
|
36
|
+
to have some feedback about the download process.
|
37
|
+
|
38
|
+
Assuming you have Vagrant 1.3+ and Docker 0.6.5+ installed just sing that same
|
39
|
+
old song:
|
40
|
+
|
41
|
+
```
|
42
|
+
vagrant plugin install docker-provider
|
43
|
+
vagrant box add precise http://bit.ly/vagrant-docker-precise
|
44
|
+
vagrant init precise
|
45
|
+
vagrant up --provider=docker
|
46
|
+
```
|
47
|
+
|
48
|
+
|
49
|
+
## Using custom images
|
50
|
+
|
51
|
+
If you want to use a custom Docker image without creating a Vagrant base box,
|
52
|
+
you can use a "dummy" box:
|
53
|
+
|
54
|
+
```
|
55
|
+
vagrant box add dummy http://bit.ly/vagrant-docker-dummy
|
56
|
+
```
|
57
|
+
|
58
|
+
And configure things from your `Vagrantfile` like in [vagrant-digitalocean](https://github.com/smdahlen/vagrant-digitalocean#configure)
|
59
|
+
or [vagrant-aws](https://github.com/mitchellh/vagrant-aws#quick-start):
|
60
|
+
|
61
|
+
```ruby
|
62
|
+
Vagrant.configure("2") do |config|
|
63
|
+
config.vm.box = "dummy"
|
64
|
+
config.vm.provider :docker do |docker|
|
65
|
+
docker.image = "your/image:tag"
|
66
|
+
docker.cmd = ["/path/to/your", "command"]
|
67
|
+
end
|
68
|
+
end
|
69
|
+
```
|
70
|
+
|
71
|
+
|
72
|
+
## Limitations
|
73
|
+
|
74
|
+
There's probably a whole lot of limitations right now but during these early days
|
75
|
+
of the plugin I can tell you for sure that some things are probably not going to
|
76
|
+
work as you might expect. For instance forwarded ports, synced folders and containers'
|
77
|
+
hostnames will not be reconfigured on `vagrant reload`s if they have changed and
|
78
|
+
the plugin **_will not give you any kind of warning or message_**. Forwarded ports
|
79
|
+
automatic collision handling is **_not supported as well_**.
|
80
|
+
|
81
|
+
The plugin also requires Docker's executable to be available on current user's `PATH`
|
82
|
+
and that the current user has been added to the `docker` group since we are not
|
83
|
+
using `sudo` when interacting with Docker's CLI. For more information on setting
|
84
|
+
this up please check [this page](http://docs.docker.io/en/latest/use/basics/#why-sudo).
|
85
|
+
|
86
|
+
Another thing to keep in mind is that Docker is all about _application containers_
|
87
|
+
and not _machine containers_. I failed to boot a Docker container in what people
|
88
|
+
have been calling "[machine mode](https://github.com/dotcloud/docker/issues/2170#issuecomment-26118964)"
|
89
|
+
and some hacking will be required in order to run multiple processes on the
|
90
|
+
container as described below. For more information about the issues related to
|
91
|
+
it, please search Docker's issue tracker for `/sbin/init` and / or "machine mode".
|
92
|
+
|
93
|
+
|
94
|
+
## Box format
|
95
|
+
|
96
|
+
Every provider in Vagrant must introduce a custom box format. This provider introduces
|
97
|
+
`docker` boxes and you can view some examples in the [`boxes`](boxes) directory.
|
98
|
+
That directory also contains instructions on how to build them.
|
99
|
+
|
100
|
+
The box format is basically just the required `metadata.json` file along with a
|
101
|
+
`Vagrantfile` that does default settings for the provider-specific configuration
|
102
|
+
for this provider.
|
103
|
+
|
104
|
+
|
105
|
+
## Running multiple processes on the container
|
106
|
+
|
107
|
+
Unless you are able to run the container in "machine mode", you'll need to create
|
108
|
+
a custom command / script that starts the processes you need prior to firing up
|
109
|
+
the SSH server. An example can be found at the [`boxes/nginx`](boxes/nginx)
|
110
|
+
folder of this repo.
|
111
|
+
|
112
|
+
On a side note, if you really need your Docker containers to behave like machines
|
113
|
+
with Vagrant and you can't get it to work that way like me, you might want to use
|
114
|
+
[vagrant-lxc](https://github.com/fgrehm/vagrant-lxc) as an alternative.
|
115
|
+
|
116
|
+
|
117
|
+
## Got feedback?
|
118
|
+
|
119
|
+
Please keep in mind that this is a spike and I'm not sure if / how the project
|
120
|
+
will evolve. I'm planning to write about why I built this at some point but
|
121
|
+
in case you have any feedback feel free to open up an [issue here on GitHub](https://github.com/fgrehm/docker-provider/issues),
|
122
|
+
shoot a tweet to [@fgrehm](https://twitter.com/fgrehm) or send a mail to the
|
123
|
+
address available on my GitHub profile.
|
124
|
+
|
125
|
+
|
126
|
+
## Contributing
|
127
|
+
|
128
|
+
1. Fork it
|
129
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
130
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
131
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
132
|
+
5. Create new Pull Request
|
133
|
+
|
134
|
+
[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/fgrehm/docker-provider/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
|
data/Rakefile
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
|
4
|
+
namespace :spec do
|
5
|
+
desc 'Run acceptance specs using Bats'
|
6
|
+
task :acceptance do
|
7
|
+
sh 'bats spec/acceptance'
|
8
|
+
end
|
9
|
+
|
10
|
+
require 'rspec/core/rake_task'
|
11
|
+
desc "Run unit specs using RSpec"
|
12
|
+
RSpec::Core::RakeTask.new('unit') do |t|
|
13
|
+
t.pattern = "./unit/**/*_spec.rb"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
desc 'Run all specs'
|
18
|
+
task :spec => ['spec:unit', 'spec:acceptance']
|
19
|
+
|
20
|
+
task :default => 'spec'
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# Dummy box
|
2
|
+
|
3
|
+
Vagrant providers each require a custom provider-specific box format. This folder
|
4
|
+
contains a "dummy" box that allows you to use the plugin without the need to create
|
5
|
+
a custom base box.
|
6
|
+
|
7
|
+
To turn this into a "box", run:
|
8
|
+
|
9
|
+
```
|
10
|
+
tar cvzf dummy.box ./metadata.json
|
11
|
+
```
|
12
|
+
|
13
|
+
By using this box you'll need to specify a Docker image on your `Vagrantfile`
|
14
|
+
[as described](README.md#using-custom-images) on the README.
|
15
|
+
|
16
|
+
For "real world" examples please check out [`boxes/precise`](boxes/precise) and
|
17
|
+
[`boxes/nginx`](boxes/nginx).
|
@@ -0,0 +1 @@
|
|
1
|
+
Vagrantfile
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# Nginx base box example
|
2
|
+
|
3
|
+
This folder contains an example of a box that is able to run multiple processes.
|
4
|
+
With the provided `Dockerfile` you'll be able to build a base box that runs both
|
5
|
+
nginx and a SSH server that is required by Vagrant to do its "magic".
|
6
|
+
|
7
|
+
|
8
|
+
```
|
9
|
+
docker build -t myuser/vagrant-nginx .
|
10
|
+
docker push myuser/vagrant-nginx
|
11
|
+
sed 's/IMAGE/myuser\/vagrant-nginx/' Vagrantfile.sample > Vagrantfile
|
12
|
+
tar cvzf nginx.box ./metadata.json ./Vagrantfile
|
13
|
+
```
|
14
|
+
|
15
|
+
In order to reach the nginx server running on the container you'll need to
|
16
|
+
forward the ports with a `Vagrantfile` like the one below:
|
17
|
+
|
18
|
+
```ruby
|
19
|
+
Vagrant.configure("2") do |config|
|
20
|
+
# Replace with the name of the box you used when adding
|
21
|
+
config.vm.box = "nginx"
|
22
|
+
# This makes nginx accessible from the host from http://localhost:8080
|
23
|
+
config.vm.network "forwarded_port", guest: 80, host: 8080
|
24
|
+
end
|
25
|
+
```
|