Skip to content

Commit b2993bc

Browse files
committed
add docker swarm tutorial
1 parent d8ebaa1 commit b2993bc

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed

README.md

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,86 @@ Detailed run output will be emitted when using the LinodeGo `LINODE_DEBUG=1` opt
9797
LINODE_DEBUG=1 docker-machine --debug create -d linode --linode-token=$LINODE_TOKEN --linode-root-pass=$ROOT_PASS machinename
9898
```
9999

100+
## Provisioning Docker Swarm
101+
102+
Let's create a docker swarm with master and worker node using private networking. Before starting make sure you have `docker-machine` and `jq` installed.
103+
104+
1. Create install.sh bash script and replace LINODE_TOKEN with your actual linode access token.
105+
```sh
106+
#!/bin/bash
107+
set -e
108+
109+
LINODE_TOKEN=<YOUR LINODE TOKEN>
110+
LINODE_ROOT_PASSWORD=$(openssl rand -base64 32); echo Password for root: $LINODE_ROOT_PASSWORD
111+
LINODE_REGION=eu-central
112+
113+
create_node() {
114+
local name=$1
115+
docker-machine create \
116+
-d linode \
117+
--linode-label=$name \
118+
--linode-instance-type=g6-nanode-1 \
119+
--linode-image=linode/ubuntu18.04 \
120+
--linode-region=$LINODE_REGION \
121+
--linode-token=$LINODE_TOKEN \
122+
--linode-root-pass=$LINODE_ROOT_PASSWORD \
123+
--linode-create-private-ip \
124+
$name
125+
}
126+
127+
get_private_ip() {
128+
local name=$1
129+
echo $(docker-machine inspect $name | jq -r '.Driver.PrivateIPAddress')
130+
}
131+
132+
init_swarm_master() {
133+
local name=$1
134+
local ip=$(get_private_ip $name)
135+
docker-machine ssh $name "docker swarm init --advertise-addr ${ip}"
136+
}
137+
138+
init_swarm_worker() {
139+
local master_name=$1
140+
local worker_name=$2
141+
local master_addr=$(get_private_ip $master_name):2377
142+
local join_token=$(docker-machine ssh $master_name "docker swarm \join-token worker -q")
143+
docker-machine ssh $worker_name "docker swarm join --token=${join_token} ${master_addr}"
144+
}
145+
146+
# create master node
147+
create_node master01
148+
149+
# create worker node
150+
create_node worker01
151+
152+
# init swarm master
153+
init_swarm_master master01
154+
155+
# init swarm worker
156+
init_swarm_worker master01 worker01
157+
```
158+
159+
2. After provision is successful check docker swarm status.
160+
161+
```sh
162+
docker-machine ssh master01 "docker node ls"
163+
```
164+
165+
Output should show active swarm leader and worker.
166+
167+
```
168+
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
169+
f8x7zutegt2dn1imeiw56v9hc * master01 Ready Active Leader 18.09.0
170+
ja8b3ut6uaivz5hf98gah469y worker01 Ready Active 18.09.0
171+
```
172+
173+
3. Cleanup resources
174+
175+
```sh
176+
docker-machine rm worker01 -y
177+
docker-machine rm master01 -y
178+
```
179+
100180
## Discussion / Help
101181

102182
Join us at [#linodego](https://gophers.slack.com/messages/CAG93EB2S) on the [gophers slack](https://gophers.slack.com)

0 commit comments

Comments
 (0)