zrok/docs/guides/docker-share/docker_public_share_guide.md

4.3 KiB

title sidebar_position sidebar_label
Docker Public Share 10 Public Share

With zrok and Docker, you can publicly share a web server that's running in a local container or anywhere that's reachable by the zrok container. The share can be reached through a temporary public URL that expires when the container is stopped. If you're looking for a reserved subdomain for the share, check out zrok frontdoor.

Here's a short article with an overview of public sharing with zrok.

Walkthrough Video

Before You Begin

To follow this guide you will need Docker and the Docker Compose plugin for running docker compose commands in your terminal.

Begin Sharing with Docker Compose

A temporary public share is a great way to share a web server running in a container with someone else for a short time.

  1. Make a folder on your computer to use as a Docker Compose project for your zrok public share.
  2. In your terminal, change directory to the newly-created project folder.
  3. Download the temporary public share project file.
  4. Copy your zrok environment token from the zrok web console to your clipboard and paste it in a file named .env in the same folder like this:
ZROK_ENABLE_TOKEN="8UL9-48rN0ua"
  1. Set the zrok API endpoint if self-hosting zrok. Skip this if using zrok.io.
ZROK_API_ENDPOINT="https://zrok.example.com"
  1. Run the Compose project to start sharing the built-in demo web server.
docker compose up --detach
  1. Get the public share URL from the output of the zrok-share service or by peeking in the zrok console where the share will be graphed.
docker compose logs zrok-share
zrok-public-share-1  |  https://w6r1vesearkj.in.zrok.io/

This concludes sharing the demo web server. Read on to learn how to pivot to sharing any web server leveraging additional zrok backend modes.

Proxy Any Web Server

The simplest way to share your web server is to set ZROK_TARGET (e.g. https://example.com) in the environment file.

ZROK_TARGET="http://example.com:8080"

Require Authentication

You can require authentication for your public share by setting ZROK_OAUTH_PROVIDER to github or google with zrok.io. You could parse the authenticated email address from the request cookie if you're building a custom server app. Read more about the OAuth features in this blog post.

ZROK_OAUTH_PROVIDER="github"

Customize Temporary Public Share

This technique is useful for adding a containerized service to the project, or mounting a filesystem directory into the container to share as a static website or file server.

Any additional services specified in the override file will be merged with compose.yml when you up the project.

You may override individual values from in compose.yml by specifying them in the override file.

  1. Create a file compose.override.yml. This example demonstrates sharing a static HTML directory /tmp/html from the Docker host's filesystem.
services:
  zrok-share:
    command: share public --headless --backend-mode web /tmp/html
    volumes:
      - /tmp/html:/tmp/html
  1. Re-run the project to load the new configuration.
docker compose up --force-recreate --detach
  1. Get the new tempoary public share URL for the zrok-share container.
docker compose logs zrok-share
zrok-public-share-1  |  https://w6r1vesearkj.in.zrok.io/
  ```

## Destroy the zrok Environment

This destroys the Docker volumes containing the zrok environment secrets. The zrok environment can also be destroyed in the web console.

```bash
docker compose down --volumes