dockerize 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +15 -0
- data/.gitignore +20 -0
- data/.jrubyrc +5 -0
- data/.rspec +3 -0
- data/.rubocop.yml +10 -0
- data/.simplecov +6 -0
- data/.travis.yml +13 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +94 -0
- data/Rakefile +16 -0
- data/bin/dockerize +15 -0
- data/bin/dockerize-unpack +53 -0
- data/dockerize.gemspec +36 -0
- data/lib/dockerize/cli.rb +52 -0
- data/lib/dockerize/config.rb +141 -0
- data/lib/dockerize/document_writer.rb +91 -0
- data/lib/dockerize/error.rb +15 -0
- data/lib/dockerize/template_parser.rb +63 -0
- data/lib/dockerize/version.rb +7 -0
- data/lib/dockerize.rb +9 -0
- data/spec/lib/dockerize/cli_spec.rb +94 -0
- data/spec/lib/dockerize/config_spec.rb +162 -0
- data/spec/lib/dockerize/document_writer_spec.rb +254 -0
- data/spec/lib/dockerize/template_parser_spec.rb +139 -0
- data/spec/lib/dockerize_spec.rb +9 -0
- data/spec/spec_helper.rb +42 -0
- data/templates/.gitkeep +0 -0
- data/templates/dockerfile.erb +14 -0
- data/templates/makefile_docker.erb +63 -0
- data/templates/run_bridge.erb +12 -0
- data/templates/run_makefile_run.erb +13 -0
- data/templates/vagrant_provision_sh.erb +19 -0
- data/templates/vagrantfile.erb +29 -0
- data/vendor/colored.rb +93 -0
- data/vendor/trollop.rb +782 -0
- metadata +160 -0
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'simplecov' unless RUBY_PLATFORM == 'java'
|
6
|
+
require 'pry' unless RUBY_PLATFORM == 'java'
|
7
|
+
require 'tmpdir'
|
8
|
+
require 'colored'
|
9
|
+
|
10
|
+
def tmpdir(&block)
|
11
|
+
Dir.mktmpdir('dockerize-spec') do |tmp|
|
12
|
+
yield tmp
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def run(cmd = [])
|
17
|
+
cmd = cmd.split(' ') if cmd.class == String
|
18
|
+
Dockerize::Cli.send(:args=, cmd)
|
19
|
+
Dockerize::Cli.send(:ensure_project_dir)
|
20
|
+
Dockerize::Config.parse(cmd)
|
21
|
+
Dockerize::Cli.send(:set_out_stream)
|
22
|
+
end
|
23
|
+
|
24
|
+
RSpec.configure do |config|
|
25
|
+
config.before(:each) do
|
26
|
+
$stdout.stub(:print)
|
27
|
+
$stdout.stub(:puts)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
unless RUBY_PLATFORM == 'java'
|
32
|
+
{
|
33
|
+
output: $stdout.clone,
|
34
|
+
prompt_name: 'dockerize',
|
35
|
+
}.map do |k, v|
|
36
|
+
Pry.config.send(:"#{k}=", v)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def top
|
41
|
+
@top ||= File.expand_path('..', File.dirname(__FILE__))
|
42
|
+
end
|
data/templates/.gitkeep
ADDED
File without changes
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<% self.filename = 'Dockerfile' -%>
|
2
|
+
<% self.executable = false -%>
|
3
|
+
# See http://docs.docker.io/en/latest/use/builder/ for more info
|
4
|
+
FROM <%= from %>
|
5
|
+
MAINTAINER <%= maintainer %>
|
6
|
+
|
7
|
+
RUN apt-get update -yq
|
8
|
+
|
9
|
+
ADD ./.run /docker/run
|
10
|
+
|
11
|
+
EXPOSE 80 443
|
12
|
+
VOLUME["/net", "/bridge"]
|
13
|
+
|
14
|
+
CMD["/docker/run/bridge"]
|
@@ -0,0 +1,63 @@
|
|
1
|
+
<% self.filename = 'Makefile.docker' -%>
|
2
|
+
<% self.executable = false -%>
|
3
|
+
DOCKER ?= sudo docker
|
4
|
+
REV ?= $(shell git describe --always)
|
5
|
+
BUILD_FLAGS ?= -no-cache=true -rm=true
|
6
|
+
PROJECT ?= $(shell basename $(PWD))
|
7
|
+
REGISTRY ?= <%= registry %>
|
8
|
+
LATEST ?= $(shell $(DOCKER) images | grep -v REPOSITORY | head -n 1 | grep -E '<none>|$(REGISTRY)\/$(PROJECT)' | awk '{print $$3}')
|
9
|
+
|
10
|
+
export DOCKER
|
11
|
+
export REV
|
12
|
+
export BUILD_FLAGS
|
13
|
+
export PROJECT
|
14
|
+
export REGISTRY
|
15
|
+
export LATEST
|
16
|
+
|
17
|
+
# This is a general Makefile, designed to be present at the top level of your
|
18
|
+
# project for general docker development. Be sure to use `docker login` on the
|
19
|
+
# vagrant vm before trying to push or pull any containers.
|
20
|
+
|
21
|
+
all:
|
22
|
+
@echo "Available targets:"
|
23
|
+
@echo " * clean - remove all local images (and tags) for $(PROJECT)"
|
24
|
+
@echo " * container - build a Docker container for $(PROJECT)"
|
25
|
+
@echo " * latest - builds and tags the latest container for $(PROJECT) as 'latest'"
|
26
|
+
@echo " * pull - pull down previous docker builds of $(REGISTRY)/$(PROJECT)"
|
27
|
+
@echo " * push - push $(REGISTRY)/$(PROJECT)"
|
28
|
+
@echo " * tag - tags the lastest image as 'latest'"
|
29
|
+
|
30
|
+
container: .latest_container Dockerfile
|
31
|
+
|
32
|
+
latest: build_and_tag
|
33
|
+
|
34
|
+
tag: delete_current_tag .latest_tagged
|
35
|
+
|
36
|
+
push: .latest_pushed
|
37
|
+
|
38
|
+
delete_current_tag:
|
39
|
+
rm -f .latest_tagged
|
40
|
+
|
41
|
+
clean:
|
42
|
+
rm -f .latest_container .latest_tagged .latest_pushed .container_output
|
43
|
+
export IMAGES="$(shell $(DOCKER) images | grep -E '<none>|$(REGISTRY)/$(PROJECTS)')" ; \
|
44
|
+
test -z "$$IMAGES" || echo "$$IMAGES" | awk '{ print $$3 }' | \
|
45
|
+
sort | uniq | xargs $(DOCKER) rmi
|
46
|
+
|
47
|
+
.latest_container: pull
|
48
|
+
rm -f $@
|
49
|
+
$(DOCKER) build -t $(REGISTRY)/$(PROJECT):$(REV) $(BUILD_FLAGS) . | tee .container_output
|
50
|
+
awk '/^Successfully built/ { print $$NF }' .container_output | tail -1 > $@
|
51
|
+
|
52
|
+
.latest_tagged:
|
53
|
+
( test -z "$(LATEST)" && echo 'Nothing to tag!' ) || $(DOCKER) tag $(LATEST) $(REGISTRY)/$(PROJECT):latest && touch $@
|
54
|
+
|
55
|
+
build_and_tag: .latest_container tag
|
56
|
+
|
57
|
+
pull:
|
58
|
+
$(DOCKER) pull $(REGISTRY)/$(PROJECT) || true
|
59
|
+
|
60
|
+
.latest_pushed: .latest_tagged
|
61
|
+
$(DOCKER) push $(REGISTRY)/$(PROJECT)
|
62
|
+
|
63
|
+
.PHONY: container latest push clean build_and_tag tag delete_current_tag pull
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<% self.filename = '.run/bridge' -%>
|
2
|
+
<% self.executable = true -%>
|
3
|
+
#!/usr/bin/env bash
|
4
|
+
|
5
|
+
# tar-gzips your run directory and places it in a mounted directory. This
|
6
|
+
# script is run within the container, meaning that the `run.tar.gz` file will
|
7
|
+
# be available from outside the container once the container has stopped. In
|
8
|
+
# order to ensure this, the `/bridge` directory in the container must be
|
9
|
+
# mounted on the host system using the `-v` option to `docker run`. An example
|
10
|
+
# can be found in the `dockerize-unpack` script mentioned in the README. That
|
11
|
+
# script is designed to be usable as-is.
|
12
|
+
tar -czf /bridge/run.tar.gz /docker/run
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<% self.filename = '.run/Makefile.run' -%>
|
2
|
+
<% self.executable = false -%>
|
3
|
+
all: deploy
|
4
|
+
|
5
|
+
# The deploy task is the one that will be called automatically when this
|
6
|
+
# application is deployed (assuming you use the unpack script). Therefore,
|
7
|
+
# this should be your main task and should take care of calling any other tasks
|
8
|
+
# you need. This Makefile is designed to be used to place files on the host
|
9
|
+
# machine that will be used by your container or to run your container. Good
|
10
|
+
# examples include configuraiton files and Upstart conf files.
|
11
|
+
deploy:
|
12
|
+
|
13
|
+
.PHONY: all deploy
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<% self.filename = '.vagrant-provision.sh' -%>
|
2
|
+
<% self.executable = true -%>
|
3
|
+
#!/usr/bin/env bash
|
4
|
+
|
5
|
+
# Installs some development essentials and docker. The `usermod` line
|
6
|
+
# will give the vagrant user access to the docker daemon, but be aware that
|
7
|
+
# if you start doing development as root and then switch to the vagrant user,
|
8
|
+
# you will have to change the permissions on the docker unix socket file.
|
9
|
+
|
10
|
+
export DEBIAN_FRONTEND=noninteractive
|
11
|
+
|
12
|
+
set -e
|
13
|
+
set -x
|
14
|
+
|
15
|
+
apt-get update -yq
|
16
|
+
apt-get install -yq git-all curl make \
|
17
|
+
binutils build-essential htop make tree
|
18
|
+
curl -sL https://get.docker.io/ | sh
|
19
|
+
usermod -a -G docker vagrant
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<% self.filename = 'Vagrantfile' -%>
|
2
|
+
<% self.executable = false -%>
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
# The vagrant-provision script allows docker development to be done as the
|
6
|
+
# vagrant user. However, it is probably easier to use root. If you wish to
|
7
|
+
# use the vagrant user, change the `config.vm.synced_folder` command
|
8
|
+
# accordingly.
|
9
|
+
|
10
|
+
ENV['VAGRANT_SHARED_WORKSPACE'] ||= "#{ENV['HOME']}/workspace"
|
11
|
+
|
12
|
+
Vagrant.configure('2') do |config|
|
13
|
+
config.vm.hostname = 'modcloth-ansible-proving-ground'
|
14
|
+
config.vm.box = 'precise64'
|
15
|
+
config.vm.box_url = 'http://cloud-images.ubuntu.com/vagrant/precise/current/precise-server-cloudimg-amd64-vagrant-disk1.box'
|
16
|
+
|
17
|
+
config.vm.network :private_network, ip: '33.33.33.10', auto_correct: true
|
18
|
+
config.vm.network :forwarded_port, host: 2203, guest: 22
|
19
|
+
|
20
|
+
config.ssh.forward_agent = true
|
21
|
+
config.ssh.port = 2203
|
22
|
+
|
23
|
+
config.vm.synced_folder ENV['VAGRANT_SHARED_WORKSPACE'], '/root',
|
24
|
+
create: true,
|
25
|
+
owner: 'root',
|
26
|
+
group: 'root'
|
27
|
+
|
28
|
+
config.vm.provision :shell, path: '.vagrant-provision.sh'
|
29
|
+
end
|
data/vendor/colored.rb
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'Win32/Console/ANSI' if RUBY_PLATFORM =~ /win32/
|
2
|
+
|
3
|
+
# Source: https://github.com/defunkt/colored
|
4
|
+
|
5
|
+
##
|
6
|
+
# cute.
|
7
|
+
#
|
8
|
+
# >> "this is red".red
|
9
|
+
#
|
10
|
+
# >> "this is red with a blue background (read: ugly)".red_on_blue
|
11
|
+
#
|
12
|
+
# >> "this is red with an underline".red.underline
|
13
|
+
#
|
14
|
+
# >> "this is really bold and really blue".bold.blue
|
15
|
+
#
|
16
|
+
# >> Colored.red "This is red" # but this part is mostly untested
|
17
|
+
module Colored
|
18
|
+
extend self
|
19
|
+
|
20
|
+
COLORS = {
|
21
|
+
'black' => 30,
|
22
|
+
'red' => 31,
|
23
|
+
'green' => 32,
|
24
|
+
'yellow' => 33,
|
25
|
+
'blue' => 34,
|
26
|
+
'magenta' => 35,
|
27
|
+
'cyan' => 36,
|
28
|
+
'white' => 37
|
29
|
+
}
|
30
|
+
|
31
|
+
EXTRAS = {
|
32
|
+
'clear' => 0,
|
33
|
+
'bold' => 1,
|
34
|
+
'underline' => 4,
|
35
|
+
'reversed' => 7
|
36
|
+
}
|
37
|
+
|
38
|
+
COLORS.each do |color, value|
|
39
|
+
define_method(color) do
|
40
|
+
colorize(self, :foreground => color)
|
41
|
+
end
|
42
|
+
|
43
|
+
define_method("on_#{color}") do
|
44
|
+
colorize(self, :background => color)
|
45
|
+
end
|
46
|
+
|
47
|
+
COLORS.each do |highlight, value|
|
48
|
+
next if color == highlight
|
49
|
+
define_method("#{color}_on_#{highlight}") do
|
50
|
+
colorize(self, :foreground => color, :background => highlight)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
EXTRAS.each do |extra, value|
|
56
|
+
next if extra == 'clear'
|
57
|
+
define_method(extra) do
|
58
|
+
colorize(self, :extra => extra)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
define_method(:to_eol) do
|
63
|
+
tmp = sub(/^(\e\[[\[\e0-9;m]+m)/, "\\1\e[2K")
|
64
|
+
if tmp == self
|
65
|
+
return "\e[2K" << self
|
66
|
+
end
|
67
|
+
tmp
|
68
|
+
end
|
69
|
+
|
70
|
+
def colorize(string, options = {})
|
71
|
+
colored = [color(options[:foreground]), color("on_#{options[:background]}"), extra(options[:extra])].compact * ''
|
72
|
+
colored << string
|
73
|
+
colored << extra(:clear)
|
74
|
+
end
|
75
|
+
|
76
|
+
def colors
|
77
|
+
@@colors ||= COLORS.keys.sort
|
78
|
+
end
|
79
|
+
|
80
|
+
def extra(extra_name)
|
81
|
+
extra_name = extra_name.to_s
|
82
|
+
"\e[#{EXTRAS[extra_name]}m" if EXTRAS[extra_name]
|
83
|
+
end
|
84
|
+
|
85
|
+
def color(color_name)
|
86
|
+
background = color_name.to_s =~ /on_/
|
87
|
+
color_name = color_name.to_s.sub('on_', '')
|
88
|
+
return unless color_name && COLORS[color_name]
|
89
|
+
"\e[#{COLORS[color_name] + (background ? 10 : 0)}m"
|
90
|
+
end
|
91
|
+
end unless Object.const_defined? :Colored
|
92
|
+
|
93
|
+
String.send(:include, Colored)
|