2.9.26.6.1 Terraform
Установка Terraform
Установка Docker
Настройка провайдера
Пример запуска контейнера nginx с помощью Terraform
Настройка nginx
Инициализация проекта
Развертывание инфраструктуры
Проверка работы
Управление контейнером
Окружение
- Версия ОС: 7.3
- Конфигурация ОС: Рабочая станция, Сервер графический
- Редакция ОС: Стандартная
- Архитектура: x86_64
- Версия ПО: terraform-1.11.4-1
Terraform — это инструмент управления состоянием инфраструктуры. С его помощью можно автоматически создавать и управлять серверами, сетями, контейнерами и другими ресурсами.
В данной инструкции рассматривается пример запуска контейнера nginx с использованием Terraform и Docker.
Установка Terraform
Для установки программы через терминал выполните следующую команду (потребуются права администратора):
sudo dnf install terraform
Для проверки выполните команду:
terraform version
Установка Docker
Подробную информацию по установке docker и настройке доступа к среде контейнеризации см. в нашей инструкции «Установка и настройка docker».
Настройка провайдера
Если есть ограничения доступа к реестру образов (registry) terraform, можно настроить зеркало.
Для настройки провайдера выполните следующие действия:
1. Создайте файл конфигурации Terraform ~/.terraformrc:
nano ~/.terraformrc
2. Добавьте в него следующий блок:
provider_installation {
network_mirror {
url = "https://terraform-mirror.yandexcloud.net/"
include = ["registry.terraform.io/*/*"]
}
direct {
exclude = ["registry.terraform.io/*/*"]
}
}
Пример запуска контейнера nginx с помощью Terraform
Все конфигурационные файлы для описания инфраструктуры Terraform должны размещаться в одном каталоге. По умолчанию Terraform включает в конфигурацию все файлы с расширением *.tf в текущем каталоге, независимо от их имен.
В данном примере Terraform используется для загрузки образа и запуска контейнера с веб-сервером nginx.
-
Создайте каталог, например, с именем learn-terraform-docker-container:
mkdir learn-terraform-docker-container -
Перейдите в рабочий каталог:
cd learn-terraform-docker-container -
В рабочем каталоге создайте файл с именем main.tf:
nano main.tf
-
Вставьте в него следующую конфигурацию Terraform:
terraform { required_providers { docker = { source = "kreuzwerker/docker" version = "~> 3.6" } } } provider "docker" {} resource "docker_image" "nginx" { name = "registry.red-soft.ru/ubi7/nginx:latest" keep_locally = false } resource "docker_container" "nginx" { image = docker_image.nginx.image_id name = "tutorial" command = ["nginx", "-g", "daemon off;"] ports { internal = 8080 external = 8000 } volumes { host_path = abspath("${path.module}/html") # путь на вашем компьютере container_path = "/opt/app-root/src" # путь внутри контейнера } }Параметры блока
volumes:-
host_path— каталог на вашем хосте, где лежат файлы сайта. Если вы хотите хранить файлы в другом каталоге, измените значениеhost_path. Например:host_path = "/home/user/my_site"; -
container_path— каталог внутри контейнера, куда они монтируются. Nginx в данном образе настроен отдавать файлы из/opt/app-root/src.
Механизм монтирования связывает эти два каталога: изменения файлов на хосте сразу становятся доступны внутри контейнера.
Блок
terraformсодержит настройки Terraform, включаяrequired_providers, который указывает необходимые провайдеры.Блок
providerнастраивает указанного провайдера, в данном случаеdocker. Пустые скобки означают, что провайдер будет использовать параметры по умолчанию.В конфигурации Terraform можно использовать несколько блоков провайдеров для управления ресурсами от разных провайдеров. Можно даже использовать разных провайдеров одновременно. Например, можно передать идентификатор образа Docker в сервис Kubernetes.
Блоки
resourceопределяют объекты инфраструктуры, которыми управляет Terraform — здесь этоdocker_imageдля образаnginxиdocker_containerдля контейнера на его основе.Поставщики Terraform управляют ресурсами, взаимодействуя между Terraform и целевыми API. При любых изменениях в целевых API или добавлении новых функций разработчики поставщиков могут обновлять и выпускать новые версии.
Процесс выполнения:
-
Terraform инициализирует провайдер Docker.
-
Загружает образ registry.red-soft.ru/ubi7/nginx:latest.
-
Создаёт контейнер tutorial на основе данного образа.
-
Пробрасывает порт 8080 контейнера на порт 8000 хоста.
-
Настройка nginx
Создайте каталог, в котором будут хранится файлы сайта:
mkdir -p html
Каталог html должен быть создан внутри рабочего каталога learn-terraform-docker-container, где находится main.tf.
Создайте файл сайта:
nano html/index.html
В файл добавьте следующее содержимое для первоначальной страницы:
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
Инициализация проекта
Инициализируйте рабочий каталог, содержащий файлы конфигурации. Для этого выполните команду:
terraform init
Пример вывода команды:
... Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work. If you ever set or change modules or backend configuration for Terraform, rerun this command to reinitialize your working directory. If you forget, other commands will detect it and remind you to do so if necessary.
Развертывание инфраструктуры
Подготовьте контейнер сервера nginx с конфигурацией в файле main.tf. Перед выполнением terraform apply убедитесь, что каталог, указанный в host_path, существует на хосте. Иначе контейнер не сможет его примонтировать.
Выполните команду:
terraform apply
Пример вывода команды:
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
docker_image.nginx: Creating...
docker_image.nginx: Creation complete after 0s [id=sha256:c0f4d804505eeaedd7b3d338f72b3e39b406fd11f10dd333b5bf0a5b7efcc190registry.red-soft.ru/ubi7/nginx:latest]
docker_container.nginx: Creating...
docker_container.nginx: Creation complete after 7s [id=98954a0aac90a8b2e8706a5b6c5ba748345f9fc4b83b3f58987584001ec5d019]
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
Когда Terraform запросит подтверждение, введите yes и нажмите ENTER.
Проверка работы
Убедитесь, что контейнер nginx запущен, открыв http://localhost:8000 в браузере или выполнив команду в терминале:
docker ps
Пример вывода команды:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a975e4ec01a5 a2ba0e3c9ed2 "container-entrypoin…" 2 minutes ago Up 2 minutes 0.0.0.0:8000->8080/tcp tutorial

Чтобы проверить, что файлы смонтированы, выполните:
docker exec -it tutorial ls -la /opt/app-root/src
Вы должны увидеть содержимое вашего каталога html.
Управление контейнером
Для остановки контейнера выполните команду:
docker stop tutorial
Для удаления контейнера и образа:
terraform destroy
Когда Terraform запросит подтверждение, введите yes и нажмите ENTER.
Более подробная информация о работе Terraform содержится в официальной документации.
Дата последнего изменения: 15.04.2026
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.