Использование OpenTofu в качестве образа Docker
OpenTofu доступен в виде образов контейнеров OCI и распространяется через общедоступный реестр GitHub Packages.
Не используйте образ контейнера OCI в качестве базового образа. Это не поддерживается и перестанет работать в OpenTofu 1.10. Вместо этого следуйте приведённым ниже инструкциям по созданию собственного образа OpenTofu.
Версии
Образы размещены в виде пакетов в организации OpenTofu на GitHub. Список доступных версий см. здесь.
Мультиплатформенные образы доступны с помощью следующих тегов:
-
latest: последняя доступная версия OpenTofu, -
Major: конкретная основная версия OpenTofu, -
Major.Minor: конкретная младшая версия OpenTofu, -
Major.Minor.Patch: конкретная версия исправления OpenTofu,
Кроме того, начиная с OpenTofu версии 1.9.1 мы предоставляем следующие минимальные теги для создания пользовательского образа:
-
minimal: минимальный образ, содержащий только исполняемый файл OpenTofu в/usr/local/bin/tofu -
Major-minimal: минимальный образ конкретной основной версии OpenTofu, -
Major.Minor-minimal: минимальный образ конкретной младшей версии OpenTofu, -
Major.Minor.Patch-minimal: минимальный образ конкретной версии исправления OpenTofu.
Чтобы загрузить образы для конкретной платформы (amd64, arm, arm64, 386), используйте:
-
<Version>-<Platform>: версия OpenTofu для конкретной платформы. -
<Version>-minimal-<Platform>: минимальная версия OpenTofu для конкретной платформы.
Использование
Если вы столкнулись с ограничением частоты запросов GitHub, создайте персональный токен доступа и войдите в реестр.
В приведённых ниже примерах в папке, из которой вы запускаете команду docker, должен находиться как минимум один файл .tf.
Чтобы загрузить образ из реестра GitHub Packages:
docker pull ghcr.io/opentofu/opentofu:latest
Чтобы запустить OpenTofu в контейнере Docker:
# Init providers plugins
docker run \
--workdir=/srv/workspace \
--mount type=bind,source=.,target=/srv/workspace \
ghcr.io/opentofu/opentofu:latest \
init
# Creating plan file
docker run \
--workdir=/srv/workspace \
--mount type=bind,source=.,target=/srv/workspace \
ghcr.io/opentofu/opentofu:latest \
plan -out=main.plan
# Applying plan file
docker run \
--workdir=/srv/workspace \
--mount type=bind,source=.,target=/srv/workspace \
ghcr.io/opentofu/opentofu:latest \
apply "/srv/workspace/main.plan"Создание собственного образа
Образ OCI, опубликованный OpenTofu, предназначен для использования в качестве базового инструмента командной строки. Если вам нужны дополнительные инструменты в образе или вы хотите создавать службы на основе OpenTofu, необходимо создать собственный образ. Это можно сделать двумя способами:
- Создать образ на основе минимального образа (
ghcr.io/opentofu/opentofu:minimalили аналогичного) и использовать многоэтапную сборку, чтобы скопировать исполняемый файлtofuв свой образ. - Использовать автономный сценарий установки, чтобы установить
tofuв образ контейнера.
Способ 1: использование многоэтапной сборки
Если вы хотите использовать Alpine Linux, ваш Dockerfile/Containerfile может выглядеть так:
FROM ghcr.io/opentofu/opentofu:minimal AS tofu FROM alpine COPY --from=tofu /usr/local/bin/tofu /usr/local/bin/tofu # Your other build instructions
Рекомендуем зафиксировать версию на уровне конкретного хеша SHA слоя и обновлять её только при необходимости, чтобы воспользоваться преимуществами проверки целостности.
Способ 2: использование сценария установки
Шаг 1: получение сценария установки
OpenTofu публикует сценарии установки для POSIX/Powershell. С их помощью можно безопасно установить OpenTofu в образ контейнера. Следуйте инструкциям по автономной установке, чтобы получить сценарий установки и поместить его рядом с вашим Dockerfile/Containerfile.
Шаг 2: создание этапа установки
Затем можно создать этап загрузки в файле Dockerfile/Containerfile. Подробнее о многоэтапных сборках читайте в документации Docker.
FROM alpine:3.20 AS tofu ADD install-opentofu.sh /install-opentofu.sh RUN chmod +x /install-opentofu.sh RUN apk add gpg gpg-agent RUN ./install-opentofu.sh --install-method standalone --install-path / --symlink-path -
Шаг 3: создание собственного образа
Теперь можно добавить образ ниже этапа установки и скопировать в него исполняемый файл tofu:
FROM alpine:3.20 AS tofu ADD install-opentofu.sh /install-opentofu.sh RUN chmod +x /install-opentofu.sh RUN apk add gpg gpg-agent RUN ./install-opentofu.sh --install-method standalone --install-path / --symlink-path - ## This is your stage: FROM ubuntu COPY --from=tofu /tofu /usr/local/bin/tofu # Add your commands here
Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.9/intro/install/docker/