Back to Opentofu

Building a Docker Image with OpenTofu

website/docs/intro/install/docker.mdx

1.11.63.6 KB
Original Source

Building a Docker Image with OpenTofu

:::warning Important Change

Previously, OpenTofu provided official Docker images that could be used directly. Starting with OpenTofu 1.10, direct usage of the official images is no longer supported. This page now focuses on how to build your own Docker image with OpenTofu included.

If you were previously using docker run ghcr.io/opentofu/opentofu, you will need to build your own image following the instructions below.

:::

Building your own image

If you need OpenTofu in a Docker container, you will need to build your own image. You can do this in two ways:

  1. Use a multi-stage build to copy the tofu binary from the minimal OpenTofu image to your image.
  2. Use the standalone installation script to install tofu into your container image.

Method 1: Using a multi-stage build

The minimal OpenTofu images contain only the tofu binary at /usr/local/bin/tofu. You can use these images in a multi-stage build to copy the binary into your own image.

Available minimal image tags:

  • ghcr.io/opentofu/opentofu:minimal - Latest version
  • ghcr.io/opentofu/opentofu:1-minimal - Latest 1.x version
  • ghcr.io/opentofu/opentofu:1.9-minimal - Latest 1.9.x version
  • ghcr.io/opentofu/opentofu:1.9.1-minimal - Specific version

Example Dockerfile using Alpine Linux:

Dockerfile
FROM ghcr.io/opentofu/opentofu:minimal AS tofu

FROM alpine:3.20

# Copy the tofu binary from the minimal image
COPY --from=tofu /usr/local/bin/tofu /usr/local/bin/tofu

# Add any other tools or dependencies you need
RUN apk add --no-cache git curl

# Your application setup
WORKDIR /workspace

Example using Ubuntu:

Dockerfile
FROM ghcr.io/opentofu/opentofu:minimal AS tofu

FROM ubuntu:24.04

# Copy the tofu binary
COPY --from=tofu /usr/local/bin/tofu /usr/local/bin/tofu

# Install dependencies
RUN apt-get update && apt-get install -y \
    git \
    curl \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /workspace

Method 2: Using the installation script

You can also use the OpenTofu installation script to install the binary directly in your container image.

Step 1: Download the installation script

First, download the installation script following the standalone installation instructions and place it next to your Dockerfile.

Step 2: Install OpenTofu in your image

Example Dockerfile using the installation script:

Dockerfile
FROM alpine:3.20

# Copy the installation script
COPY install-opentofu.sh /tmp/install-opentofu.sh

# Install dependencies needed for the script
RUN apk add --no-cache bash curl gpg gpg-agent

# Run the installation script
RUN chmod +x /tmp/install-opentofu.sh && \
    /tmp/install-opentofu.sh --install-method standalone --install-path /usr/local/bin && \
    rm /tmp/install-opentofu.sh

# Add your other dependencies
RUN apk add --no-cache git

WORKDIR /workspace

For Ubuntu-based images:

Dockerfile
FROM ubuntu:24.04

# Copy the installation script
COPY install-opentofu.sh /tmp/install-opentofu.sh

# Install dependencies
RUN apt-get update && apt-get install -y \
    curl \
    gpg \
    && rm -rf /var/lib/apt/lists/*

# Run the installation script
RUN chmod +x /tmp/install-opentofu.sh && \
    /tmp/install-opentofu.sh --install-method standalone --install-path /usr/local/bin && \
    rm /tmp/install-opentofu.sh

# Add your other dependencies
RUN apt-get update && apt-get install -y \
    git \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /workspace

Verifying your image

After building your image, verify that OpenTofu is correctly installed:

bash
docker build -t my-opentofu-image .
docker run --rm my-opentofu-image tofu --version