-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathdocker.cloudscript
More file actions
119 lines (93 loc) · 3.97 KB
/
docker.cloudscript
File metadata and controls
119 lines (93 loc) · 3.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# Install latest Docker on a CS1-SSD Cloudlet ($.015/hr) running Linux Ubuntu Server 14.04 LTS 64-bit
cloudscript docker
version = _latest
result_template = docker_result_template
globals
docker_hostname = 'docker'
docker_instance_type = 'CS1-SSD' # 1GB RAM, 1 vCore, 25GB SSD, 10Gbps
docker_image_type = 'Ubuntu Server 14.04 LTS'
default_slice_user = 'docker'
# Password setup
server_password = lib::random_password()
console_password = lib::random_password()
thread docker_setup
tasks = [docker_server_setup]
task docker_server_setup
#--------------------
# Create docker keys
#--------------------
# Create docker server root password key
/key/password docker_server_password_key read_or_create
key_group = _SERVER
password = server_password
# Create docker server console key
/key/password docker_server_console_key read_or_create
key_group = _CONSOLE
password = console_password
#------------------------------
# Create docker storage slice,
# bootstrap script and recipe
#------------------------------
# Create storage slice keys
/key/token default_slice_key read_or_create
username = default_slice_user
# Create slice to store script in cloudstorage
/storage/slice default_slice read_or_create
keys = [default_slice_key]
# Create slice container to store script in cloudstorage
/storage/container docker_container => [default_slice] read_or_create
slice = default_slice
# Place script data in cloudstorage
/storage/object docker_bootstrap_object => [default_slice, docker_container] read_or_create
container_name = 'docker_container'
file_name = 'bootstrap_docker.sh'
slice = default_slice
content_data = docker_bootstrap_data
# Associate the cloudstorage object with the docker script
/orchestration/script docker_bootstrap_script => [default_slice, docker_container, docker_bootstrap_object] read_or_create
data_uri = 'cloudstorage://default_slice/docker_container/bootstrap_docker.sh'
script_type = _SHELL
encoding = _STORAGE
# Create the recipe and associate the script
/orchestration/recipe docker_bootstrap_recipe read_or_create
scripts = [docker_bootstrap_script]
#--------------------------
# Create the docker server
#--------------------------
/server/cloud docker_server read_or_create
hostname = '{{ docker_hostname }}'
image = '{{ docker_image_type }}'
service_type = '{{ docker_instance_type }}'
keys = [docker_server_password_key, docker_server_console_key]
recipes = [docker_bootstrap_recipe]
text_template docker_bootstrap_data
#!/bin/sh
# check if running as root
[ `whoami` = 'root' ] || {
echo "ERROR: must have root permissions to execute the commands"
exit 1
}
# confirm apt-get will work with HTTPS
[ -e /usr/lib/apt/methods/https ] || {
apt-get update
apt-get install apt-transport-https -y
}
# add key and docker repo
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
echo "deb https://get.docker.com/ubuntu docker main" > /etc/apt/sources.list.d/docker.list
# check new repo and install docker
apt-get update
apt-get install lxc-docker -y
apt-get install lxc -y
# prepare docker config
echo 'DOCKER_OPTS="--bip=172.17.42.1/26"' >> /etc/default/docker
service docker stop
ip link delete docker0
service docker start
_eof
text_template docker_result_template
Your Docker server is ready at the following IP address:
{{ docker_server.ipaddress_public }}
login: root
password: {{ docker_server_password_key.password }}
_eof