Sometimes, you just want to learn the internal mechanics of Docker Swarm
, but unfortunately there is only one Linux
box at hand, and you don’t want to bother to install Virtual Machines on it. In this scenario, you certainly can build a Docker Swarm
cluster on one host, and this tutorial will provide a detailed guide:
(1) Make sure the Go
environment has been ready on your system, if not, please follow this document to setup it. Also remember add$GOPATH/bin
into $PATH
environment variable.
(2) Install Docker Swarm
:
# go get -u github.com/docker/swarm
Execute swarm
command to check whether Docker Swarm
is well equipped:
# swarm
Usage: swarm [OPTIONS] COMMAND [arg...]
A Docker-native clustering system
Version: 1.2.3 (HEAD)
Options:
--debug debug mode [$DEBUG]
--log-level, -l "info" Log level (options: debug, info, warn, error, fatal, panic)
--experimental enable experimental features
--help, -h show help
--version, -v print the version
......
(3) Modify the Docker
configuration file. E.g., on my RHEL 7
, the file is /etc/sysconfig/docker
:
# systemctl show docker
......
EnvironmentFile=/etc/sysconfig/docker (ignore_errors=yes)
......
Add “-H tcp://127.0.0.1:2375
” in OPTIONS
field:
# cat /etc/sysconfig/docker
# /etc/sysconfig/docker
# Modify these options if you want to change the way the docker daemon runs
OPTIONS='--selinux-enabled -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock'
Restart Docker
, and check whether the new OPTIONS
takes effect:
# systemctl restart docker
# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: active (running) since Wed 2016-06-08 12:32:19 CST; 10s ago
Docs: http://docs.docker.com
Main PID: 14429 (sh)
CGroup: /system.slice/docker.service
├─14429 /bin/sh -c /usr/bin/docker-current daemon $OPTIONS $DOCKER_STORAGE_OPTIONS $DOCKER_NETWORK_OPTI...
├─14430 /usr/bin/docker-current daemon --selinux-enabled -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock --add-registr...
└─14431 /usr/bin/forward-journald -tag docker
......
(4) Run “swarm create
” command to create token for the cluster:
# swarm create
d10eacbda9763b0740548a2a4c2f1a59
(5) Execute swarm join
to create a Docker Swarm
node:
# swarm join --addr 127.0.0.1:2375 token://d10eacbda9763b0740548a2a4c2f1a59
INFO[0000] Registering on the discovery service every 1m0s... addr=127.0.0.1:2375 discovery=token://d10eacbda9763b0740548a2a4c2f1a59
......
You should notice that the argument of --addr
option is the IP
and port of the Docker
engine on this host. Since we have set theOPTIONS
in Docker
configuration file in step 3
, the IP
should be 127.0.0.1
whilst port is 2375
.
(6) Open a new terminal, and create the manager of the cluster. Because port 2375
is occupied by Docker
engine, we use another available port:
# swarm manage -H 127.0.0.1:3375 token://d10eacbda9763b0740548a2a4c2f1a59
INFO[0000] Listening for HTTP addr=127.0.0.1:3375 proto=tcp
INFO[0001] Registered Engine localhost.localdomain at 127.0.0.1:2375
Through the log, you can see the node and manager have communicated successfully.
Now, you can think a Docker
engine is listening on tcp://127.0.0.1:3375
, but actually, there is one Docker
cluster behindtcp://127.0.0.1:3375
, even though the cluster has only one node. You can play docker
client commands now, such as get the cluster info:
# docker -H tcp://127.0.0.1:3375 info
Containers: 0
Images: 5
Server Version: swarm/1.2.3
Role: primary
Strategy: spread
Filters: health, port, containerslots, dependency, affinity, constraint
Nodes: 1
localhost.localdomain: 127.0.0.1:2375
└ ID: ZUIV:BMPV:3B5R:2WBC:JXEI:2S6H:XM3H:66W5:UZQI:NJON:JY4T:HIFB
└ Status: Healthy
└ Containers: 0 (0 Running, 0 Paused, 0 Stopped)
└ Reserved CPUs: 0 / 8
└ Reserved Memory: 0 B / 12.1 GiB
└ Labels: executiondriver=native-0.2, kernelversion=3.10.0-327.el7.x86_64, operatingsystem=Red Hat Network, storagedriver=devicemapper
└ UpdatedAt: 2016-06-08T04:58:05Z
└ ServerVersion: 1.9.1
Kernel Version: 3.10.0-327.el7.x86_64
......
Or run a container:
# docker -H tcp://127.0.0.1:3375 run hello-world
Hello from Docker.
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
......
Enjoy Docker Swarm
now!
Reference:
Swarm docs;
Docker Swarm Tutorial and Examples.