|
| 1 | +--- |
| 2 | +title: "Container Runtimes" |
| 3 | +description: "Tyk runs as OCI-compatible containers and works with Docker, containerd, CRI-O, and Podman. Learn which runtimes are supported and how to configure each for local and Kubernetes deployments." |
| 4 | +sidebarTitle: "Container Runtimes" |
| 5 | +keywords: ["container runtime", "docker", "podman", "containerd", "CRI-O", "RHEL 8", "kubernetes", "OCI", "helm", "OpenShift"] |
| 6 | +--- |
| 7 | + |
| 8 | +| Edition | Deployment Type | |
| 9 | +| :------------- | :---------------------- | |
| 10 | +| Enterprise | Self-Managed, Hybrid | |
| 11 | + |
| 12 | +Tyk distributes all components as OCI-compatible container images, which means they run unchanged on any OCI-compliant runtime: Docker Engine, containerd, CRI-O, or Podman. You do not need to rebuild images when moving between runtimes or cloud providers. |
| 13 | + |
| 14 | +Since Kubernetes v1.24 removed the dockershim compatibility layer, managed Kubernetes services (EKS, GKE, AKS, OpenShift) use containerd or CRI-O directly. Docker is no longer required or present by default on Kubernetes nodes. Tyk's Helm-based installations work on all of these out of the box. |
| 15 | + |
| 16 | +## Supported runtimes |
| 17 | + |
| 18 | +The table below shows the default container runtime for each major provider. |
| 19 | + |
| 20 | +| Provider | Default runtime | Notes | |
| 21 | +| :--- | :--- | :--- | |
| 22 | +| **AWS EKS** | containerd | Default since dockershim removal; all Linux and Windows node groups | |
| 23 | +| **Google GKE** | containerd | Default since GKE 1.19; Docker deprecated by 1.24 | |
| 24 | +| **Azure AKS** | containerd | Linux nodes ≥ 1.19; Windows nodes ≥ 1.23 (only option) | |
| 25 | +| **Red Hat OpenShift** | CRI-O | Includes ROSA; uses CRI-O with runc/crun | |
| 26 | +| **Rancher (RKE2/K3s)** | containerd | Default for all cluster types | |
| 27 | +| **VMware Tanzu** | containerd | Default for all cluster types | |
| 28 | +| **DigitalOcean Kubernetes** | containerd | Default since Kubernetes 1.20 | |
| 29 | +| **IBM Cloud Kubernetes Service** | containerd | Default on all managed node pools | |
| 30 | + |
| 31 | +To check the container runtime on your cluster nodes: |
| 32 | + |
| 33 | +```bash |
| 34 | +kubectl get node -o jsonpath='{range .items[*]}{.metadata.name}{" "}{.status.nodeInfo.containerRuntimeVersion}{"\n"}{end}' |
| 35 | +``` |
| 36 | + |
| 37 | +## Running Tyk locally |
| 38 | + |
| 39 | +### Docker |
| 40 | + |
| 41 | +Docker is the fastest way to try Tyk on a laptop or VM. Tyk's quick starts and demo repositories use Docker Compose by default. See the [Docker installation guide](/tyk-self-managed/install/docker) for step-by-step instructions. |
| 42 | + |
| 43 | +### Podman (RHEL 8+) |
| 44 | + |
| 45 | +RHEL 8 ships Podman instead of Docker. Podman is daemonless, rootless-friendly, and uses the same CLI syntax as Docker. Tyk images run on Podman without modification. |
| 46 | + |
| 47 | +**Running Tyk Gateway with Podman (rootless):** |
| 48 | + |
| 49 | +```bash |
| 50 | +podman run -d --name tyk-gateway \ |
| 51 | + -p 8080:8080 \ |
| 52 | + -v $PWD/tyk.standalone.conf:/opt/tyk-gateway/tyk.conf:Z \ |
| 53 | + tykio/tyk-gateway:latest |
| 54 | +``` |
| 55 | + |
| 56 | +The `:Z` suffix is required on SELinux-enabled systems (RHEL, Fedora) to relabel the bind-mounted volume so the container can access it. |
| 57 | + |
| 58 | +**Alias Podman as Docker (optional):** |
| 59 | + |
| 60 | +If your scripts call `docker`, you can alias Podman: |
| 61 | + |
| 62 | +```bash |
| 63 | +alias docker=podman |
| 64 | +``` |
| 65 | + |
| 66 | +### Docker Compose and Podman Compose |
| 67 | + |
| 68 | +Tyk's demo repositories use standard `compose.yaml` files that work with both Docker Compose and Podman Compose. |
| 69 | + |
| 70 | +```yaml |
| 71 | +# Minimal example: Gateway + Redis |
| 72 | +services: |
| 73 | + redis: |
| 74 | + image: redis:7-alpine |
| 75 | + gateway: |
| 76 | + image: tykio/tyk-gateway:latest |
| 77 | + ports: ["8080:8080"] |
| 78 | + volumes: |
| 79 | + - ./tyk.standalone.conf:/opt/tyk-gateway/tyk.conf:ro |
| 80 | + depends_on: [redis] |
| 81 | +``` |
| 82 | +
|
| 83 | +```bash |
| 84 | +# Docker |
| 85 | +docker compose up -d |
| 86 | + |
| 87 | +# Podman |
| 88 | +podman compose up -d |
| 89 | +``` |
| 90 | + |
| 91 | +## Running Tyk in Kubernetes |
| 92 | + |
| 93 | +Use Tyk's Helm charts for production Kubernetes deployments. The charts work across EKS, GKE, AKS, OpenShift (CRI-O), Rancher, and VMware Tanzu without modification. |
| 94 | + |
| 95 | +```bash |
| 96 | +helm repo add tyk-helm https://helm.tyk.io/public/helm/charts/ |
| 97 | +helm repo update |
| 98 | +helm install tyk tyk-helm/tyk-stack -n tyk --create-namespace -f values.yaml |
| 99 | +``` |
| 100 | + |
| 101 | +For full installation instructions, see the [Tyk Self-Managed Kubernetes guide](/tyk-self-managed/install/kubernetes) or the [Tyk Stack Helm Chart reference](/product-stack/tyk-charts/tyk-stack-chart). |
| 102 | + |
| 103 | +## Building images |
| 104 | + |
| 105 | +Both `docker build` and `podman build` produce OCI-compliant images that run on containerd, CRI-O, or Docker Engine without modification. |
| 106 | + |
| 107 | +```bash |
| 108 | +# Build with Docker |
| 109 | +docker build -t your-registry/tyk-gateway:TAG . |
| 110 | + |
| 111 | +# Build with Podman (RHEL 8+) |
| 112 | +podman build -t your-registry/tyk-gateway:TAG . |
| 113 | +``` |
| 114 | + |
| 115 | +OCI images are supported by all major registries (ECR, ACR, Google Artifact Registry, Docker Hub). For production, pin images by digest rather than by tag for reproducible deployments. |
| 116 | + |
| 117 | +## FAQ |
| 118 | + |
| 119 | +<AccordionGroup> |
| 120 | + |
| 121 | +<Accordion title="Do I need to rebuild Tyk images when moving from Docker to containerd or CRI-O?"> |
| 122 | +No. Docker-built images are OCI images and run unchanged on containerd and CRI-O. |
| 123 | +</Accordion> |
| 124 | + |
| 125 | +<Accordion title="Does Podman change how Tyk runs?"> |
| 126 | +Functionally, no. Images are identical. On RHEL, apply SELinux volume labels (`:Z` / `:z`) to bind mounts and be aware of rootless defaults. |
| 127 | +</Accordion> |
| 128 | + |
| 129 | +<Accordion title="Can I use Docker Compose files with Podman?"> |
| 130 | +Yes. Use `podman compose` or point Docker Compose at Podman's Docker-compatible socket. See the [Podman documentation](https://docs.podman.io/en/latest/markdown/podman-compose.1.html) for details. |
| 131 | +</Accordion> |
| 132 | + |
| 133 | +<Accordion title="How do I check which runtime my cluster uses?"> |
| 134 | +Run the `kubectl` one-liner in the [Supported runtimes](#supported-runtimes) section above. |
| 135 | +</Accordion> |
| 136 | + |
| 137 | +</AccordionGroup> |
0 commit comments