72 lines
2.9 KiB
Markdown
72 lines
2.9 KiB
Markdown
Docker + ZeroTier SDK
|
||
====
|
||
|
||
Welcome!
|
||
|
||
Imagine a flat, encrypted, no-configuration LAN for all of your Docker containers.
|
||
|
||
This short tutorial will show you how to enable ZeroTier functionality for your Docker software container with little to no configuration. In this example we aim to build a Docker container with ZeroTier’s Network Container service bundled right in so that it’s effortless to hook any number of your services in the container up to your virtual network.
|
||
|
||
**Step 1: Build the ZeroTier service binaries**
|
||
|
||
From the ZeroTier source directory, `make netcon` Optionally, if you'd like to see some debug output during execution, use `make netcon NETCON_DEBUG=1`
|
||
|
||
**Step 2: Build your Docker image**
|
||
|
||
`docker build --tag=redis_test .`
|
||
|
||
The example dockerfile below incorperates a few important elements:
|
||
|
||
1) The ZeroTier service binaries
|
||
2) Whatever ZeroTier identity keys you plan on using (if you don't already have keys you wish to use, fret not! A new identity will be generated automatically).
|
||
3) The service we've chosen to use. In this case, redis.
|
||
```
|
||
FROM fedora:23
|
||
# Install apps
|
||
RUN yum -y update
|
||
RUN yum -y install redis-3.0.4-1.fc23.x86_64
|
||
RUN yum clean all
|
||
# Add ZT files
|
||
RUN mkdir -p /var/lib/zerotier-one/networks.d
|
||
ADD netcon_identity.public /var/lib/zerotier-one/identity.public
|
||
ADD netcon_identity.secret /var/lib/zerotier-one/identity.secret
|
||
ADD *.conf /var/lib/zerotier-one/networks.d/
|
||
ADD *.conf /
|
||
ADD *.name /
|
||
EXPOSE 9993/udp 6379/udp
|
||
# Install LWIP library used by service
|
||
ADD liblwip.so /var/lib/zerotier-one/liblwip.so
|
||
# Install syscall intercept library
|
||
ADD libztintercept.so /
|
||
RUN cp libztintercept.so lib/libztintercept.so
|
||
RUN ln -sf /lib/libztintercept.so /lib/libztintercept
|
||
ADD zerotier-cli /
|
||
Add zerotier-netcon-service /
|
||
# Install test scripts
|
||
ADD netcon_entrypoint.sh /netcon_entrypoint.sh
|
||
RUN chmod -v +x /netcon_entrypoint.sh
|
||
# Start ZeroTier-One
|
||
CMD ["./netcon_entrypoint.sh"]
|
||
```
|
||
|
||
**Step 3: Start your container**
|
||
|
||
`docker run -d -it redis_test /bin/bash`
|
||
|
||
**Step 4: From your container, set up environment variables**
|
||
|
||
Set our application pre-load with `export LD_PRELOAD=./libztintercept.so`. This dynamically loads our intercept library into your application which allows us to re-direct its network calls to our virtual network.
|
||
|
||
Tell the ZeroTier Network Containers service which network to connect to with `export ZT_NC_NETWORK=/var/lib/zerotier-one/nc_XXXXXXXXXXXXXXXX`.
|
||
|
||
**Step 5: Run your new ZeroTier-enabled service**
|
||
|
||
At this point, simply run your application as you normally would. It will be automatically intercepted and linked to the ZeroTier service (and hence your virtual networks!)
|
||
|
||
`/usr/bin/redis-server --port 6379`
|
||
|
||
***
|
||
**Additional info**
|
||
If you'd like to know the IP address your service can be reached at on this particular virtual network, use the following:
|
||
`zerotier-cli -D/var/lib/zerotier-one/nc_XXXXXXXXXXXXXXXX listnetworks`
|