# How to Connect Containers Using the SnapShooter Agent SnapShooter is a cloud backup and recovery solution. Use SnapShooter to back up servers, volumes, databases, and applications from DigitalOcean and other cloud providers. The SnapShooter Agent allows SnapShooter to communicate with private resources that are behind a NAT gateway or firewall. Using the agent also eliminates the need to configure firewalls, incoming connection rules, or IP allowlists. The agent works by opening a persistent communication channel from the target resource back to the SnapShooter network. The resulting backups are identical to backups taken with an SSH-based connection. You can run the SnapShooter Agent in a Docker container to access Docker volumes and other containerized resources. ## Supported Environments The SnapShooter Agent supports the following architectures: - x86 (`386`) - x86 64-bit (`amd64`) - ARM (`arm`) - ARM 64-bit (`arm64`) The agent runs on the following operating systems: - Linux (`linux`) - OpenBSD (`openbsd`) - FreeBSD (`freebsd`) - NetBSD (`netbsd`) - macOS (`darwin`) ## Add an Agent Server The SnapShooter Agent needs an access token to connect to the service. To set up a new agent and retrieve your access token and download URL, go to the [**Add Agent Server Manually** page](https://app.snapshooter.com/agents/add/manual). Name your server and click **Generate Agent Server Token**. Select the target [operating system and architecture](#supported-environments) for your container. This generates the correct download URL for the agent software. Save the URL and the token for the next step. ## Create the Image The following Dockerfile uses an Ubuntu base image to set up a minimal containerized SnapShooter agent. ```dockerfile FROM ubuntu:latest WORKDIR /opt/snapshooter # Install required packages RUN apt-get update && apt-get install -y curl gzip tar # Download the agent binary, unzip it, and set execute permissions RUN curl -sSL "" -o agent.gz \ && gzip -d agent.gz \ && chmod +x agent # Run the agent CMD ["/opt/snapshooter/agent"] ``` This Dockerfile installs a few utilities, then uses them to download and decompress the agent software. Replace `` with the URL you copied in the previous step. **Note**: If your backup recipe requires specific command line utilities to function, add the relevant packages to the end of the `apt-get` line in the Dockerfile. For instance, to back up PostgreSQL databases, you need the `pg_dump` utility, which is available in the `postgresql-client` package on Ubuntu. Save the file as `Dockerfile`, then run the build command from the same directory as the Dockerfile. ```shell docker build -t snapshooter . ``` This builds an image named `snapshooter`. Use the `docker images` command to verify. ``` REPOSITORY TAG IMAGE ID CREATED SIZE snapshooter latest adcd6dcc5f0d 8 seconds ago 131MB ``` The output lists a `snapshooter` image. In the next step we use this image to run a containerized SnapShooter agent. ## Run the Container To run the agent, you first need to set the `SNAPSHOOTER_AGENT_TOKEN` environment variable. One way to specify this variable is to create a `.env` file in same directory as the Dockerfile. The file format is a `key=value` pair per line: ``` SNAPSHOOTER_AGENT_TOKEN="946|mQMkg4pasPZcjorLjYpcRK7xS27bZREP72iGmKUQ" ``` Paste in the token you created in the first step. Save this file in the same directory as your Dockerfile. If you’re checking the Dockerfile into source control, add `.env` to your `.gitignore` file to avoid leaking secret tokens. Now use `docker run` to create and run a container from the `snapshooter` image: ```shell docker run -d --env-file .env snapshooter ``` The `-d` flag puts the container in the background to run **d**etached until you stop it, and `--env-file` imports all the environment variables from the specified file. `snapshooter` is the name of the image to run. Run `docker ps` to verify the container is running: ``` CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 23ecbe823dbf snapshooter "/opt/snapshooter/ag…" 2 hours ago Up About an hour goofy_mendel ``` The agent server should now show as connected in the SnapShooter control panel, and you can begin configuring your backup jobs. ## Run the Container Using Docker Compose The following YAML builds and runs the SnapShooter agent Dockerfile using Docker Compose. If you haven’t already, create a `.env` file with your access token in the same directory as your `compose.yml` and `Dockerfile` files by following the instructions in the previous step. ```yaml services: snapshooter: build: . environment: SNAPSHOOTER_AGENT_TOKEN: "${SNAPSHOOTER_AGENT_TOKEN}" ``` This builds the Dockerfile in the current directory, then passes the `SNAPSHOOTER_AGENT_TOKEN` variable from the `.env` file through to the container’s environment. **Note**: Docker Compose automatically loads variables from files named `.env`. If you name your file something other than `.env`, use the [`env_file` attribute](https://docs.docker.com/compose/compose-file/05-services/#env_file) to specify the file name. Run the container with `docker compose`: ```shell docker compose up -d ``` The command prints confirmation that the container has been created and started. ``` [+] Running 1/1 ✔ Container example-snapshooter-1 Started ``` Verify that the agent is connected in the SnapShooter control panel. You may now configure your backup jobs. ## An Alternate Alpine-based Image To build an Alpine-based SnapShooter agent container, you need to install `bash` along with `curl`, `gzip`, and `tar`: ```dockerfile FROM alpine:latest WORKDIR /opt/snapshooter # Install required packages RUN apk add --no-cache bash curl gzip tar # Download the agent binary, unzip it, and set execute permissions RUN curl -sSL "" -o agent.gz \ && gzip -d agent.gz \ && chmod +x agent # Run the agent CMD ["/opt/snapshooter/agent"] ``` Replace `` with the URL you saved from the first step. The final Alpine-based image has a size under 30 MB. The image using Ubuntu has a size of approximately 120 MB.