Super fast and easy way to deploy (containerized) redis-server:
$ sc-redis [host] pid 4840 [host] container uid sc_redis_2d24808 [host] exporting redis container rootfs [host] writing redis configuration [container] pid 1 [container] starting redis [...] #redis-server output $ redis-cli 127.0.0.1:6379> ping PONG
sc-redis (self contained or static container) is dependency free, with just the binary you will be able to spawn self contained redis-server instances.
sc-redis uses libcontainer, the go library used as container backend in docker.
A minimal redis-server image is built and packaged directly inside
sc-redis binary with go-bindata.
sc-redis extract the image (rootfs), create a container with libcontainer and run
redis-server in it.
You can read more about how the image is built
sc-redis process is containerized, totally isolated from the host system or from other running
For now, redis-server container are ephemeral and will be destroyed when the process exits. Do not use it if you need storage persistence.
curl -sL https://github.com/robinmonjo/sc-redis/releases/download/v1.1.2/sc-redis-v1.1.2_x86_64.tgz | tar -C /usr/local/bin -zxf -
- remove the binary
- delete the bridge iface:
ip link delete scredis0 type bridge(if you used
sudo sc-redis [-v] [-i 172.18.xxx.xxx] [-c "redis conf, redis conf, redis conf"] [-w working_directory]
If this flag is used, the container uses the net namespace and is accessible through the scredis0 bridge automatically created on the host.
You can then connect to it this way:
redis-cli -h 172.18.<xxx>.<xxx> -p 6379.
If you want the server to be accessible outside of the host, you will need some iptables magic.
Note: it is user's responsibility to make sure there is no ip conflict
-c "config line, config line"
sc-redis -c "requirepass foobar, port 9999"
Directory where to extract container rootfs. Current working directory by default.
sc-redis version. Sample output:
sc-redis version sc-redis v1.0 (redis v2.8.19, libcontainer b6cf7a6c8520fd21e75f8b3becec6dc355d844b0)
The Makefile contains a lot of info but basically, to get started:
- fork this repository and clone it
make redis-rootfs(as it's not versioned, you will need krgo in your path)
make builddone !
Note, if you are working on Vagrant, running
sc-redis on a shared folder won't work (rootfs extraction will fail). You can run integration tests with
Feel free to report any issues or improvement ideas if you have some.
I hope this project may show the way for other self contained apps.
sc-mongodb anyone ?
One command deployment compensates for fat binaries ;)
- libcontainer guys for their amazing work on libcontainer and nsinit
- inspired by @crosbymichael's tweet