Мало знаний, большой вызов! Эта статья участвует в "Необходимые знания для программистов«Творческая деятельность.
Эта статья также участвует"Проект "Звезда раскопок"", чтобы выиграть творческие подарочные пакеты и бросить вызов творческим поощрениям.
Столбец был кратко представлен выше
Terraform
Как и его установка, эта статья основана на учебных пособиях сообщества, написанииDocker
запускатьnginx
пример.
1. Подготовка окружающей среды
Терраформ и Докер
Перед официальным запуском примера мы должны убедиться, что среда установлена.Terraform
,docker
, первое относится к предыдущей статье внутри столбца,docker
Для установки обратитесь к этой статье "Статья TODO".
Provider
Конфигурация кеша плагина
существуетTerraform
Во всем процессе выполнения мы используемTerraform init
команда, инструмент проанализирует код, используемый в нашем кодеProvider
и попробуй скачатьProvider
Плагин локальный, если не делать особых настроек, каждое выполнениеinit
Попытаюсь загрузить плагины, и каждый проект сохранит свой собственный независимый плагин, что является пустой тратой места. Что с этим делать?
В этот момент мы можем использоватькеш плагина, Основной принцип заключается в том, что до тех пор, пока плагин успешно загружен один раз, он будет сохранен в указанном каталоге кеша плагинов, а другие проекты будут загружены снова, а кэшированное содержимое будет скопировано в каталог проекта, даже в системе. служба поддержки,Terraform
Этот путь кеша также имеет символическую ссылку, и содержимое плагина не копируется напрямую.
Есть два способа, первый способ - настроитьTF_PLUGIN_CACHE_DIR
Переменные среды:
#务必确保这个目录下已经创建好plugin-cache这个文件夹
export TF_PLUGIN_CACHE_DIR="$HOME/.terraform.d/plugin-cache"
Второй способ заключается в использованииCLI
конфигурационный файл, основанный наLinux
среде, в среде пользователя/home
Создайте каталог с именем".terraformrc"документ:
plugin_cache_dir = "$HOME/.terraform.d/plugin-cache"
Следует отметить, что необходимо обращать внимание на увеличение пространства пути кэша, и выборочно вручную очищать ненужныеProvider
плагин.
2. Настоящий бой
Цель этой практики состоит в том, чтобыTerraform
Развертывание на основе DockerNginx
среде и может успешно получить доступ кNginx
приветственная домашняя страница.
2.1 Определение ресурсов
Здесь мы используемGithub
предметы на
[терраформ-провайдер-докер] GitHub.com/KR EU в качестве гостя…
который предоставилProvider
Плагины, запись файлов ресурсовmain.tf
.
terraform {
#定义所需的Provider
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 2.13.0"
}
}
}
# 配置docker provider
provider "docker" {}
#创建一个docker镜像资源
resource "docker_image" "nginx" {
name = "nginx:latest"
keep_locally = false
}
#创建一个docker容器资源
#这部分的资源定义,类似"docker run --name nginx -p8080:80 -d nginx:latest"
resource "docker_container" "nginx" {
image = docker_image.nginx.latest
name = "tutorial"
ports {
internal = 80
external = 8000
}
}
#接下来还可以继续定义服务资源
2.2 Выполнение создания
Ресурсы об инфраструктуре определены, и следующим шагом является установкаTerraform
иdocker
Развернуть на сервере.
Во-первых, чтобы различать проекты и достичь цели изоляции ресурсов, мы сначала создаем новую папку в каталоге проекта:
#创建目录
$mkdir learn-terraform-docker-container
#进入目录
$cd learn-terraform-docker-container
затем загрузитеmain.tf
в текущую папку. Затем выполните в текущем каталогеTerraform init
Инициализировать среду.
$Terraform init
Советы: время, затраченное на начальный процесс среды, будет тесно связано с сетевой средой вашего сервера, терпеливо подождите, если это не удается, попробуйте еще несколько раз!
Как показано на рисунке, среда успешно инициализирована.Обратите внимание на локальный каталог, и есть еще несколько файлов и папок.
.terraform
Скрытые папки хранят наши загрузкиProvider
содержимое плагина,.terraform.lock.hcl
записаноprovider
Некоторая информация о зависимости для плагина. Если вы войдете в каталог плагинов кеша, который мы установили ранее, будет больше содержимого этого плагина.
Далее мы предварительно просматриваем развертывание ресурсов.terraform plan
.
$terraform plan
Результат выполнения выглядит следующим образом:
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# docker_container.nginx will be created
+ resource "docker_container" "nginx" {
+ attach = false
+ bridge = (known after apply)
+ command = (known after apply)
+ container_logs = (known after apply)
+ entrypoint = (known after apply)
+ env = (known after apply)
+ exit_code = (known after apply)
+ gateway = (known after apply)
+ hostname = (known after apply)
+ id = (known after apply)
+ image = (known after apply)
+ init = (known after apply)
+ ip_address = (known after apply)
+ ip_prefix_length = (known after apply)
+ ipc_mode = (known after apply)
+ log_driver = "json-file"
+ logs = false
+ must_run = true
+ name = "tutorial"
+ network_data = (known after apply)
+ read_only = false
+ remove_volumes = true
+ restart = "no"
+ rm = false
+ security_opts = (known after apply)
+ shm_size = (known after apply)
+ start = true
+ stdin_open = false
+ tty = false
+ healthcheck {
+ interval = (known after apply)
+ retries = (known after apply)
+ start_period = (known after apply)
+ test = (known after apply)
+ timeout = (known after apply)
}
+ labels {
+ label = (known after apply)
+ value = (known after apply)
}
+ ports {
+ external = 8000
+ internal = 80
+ ip = "0.0.0.0"
+ protocol = "tcp"
}
}
# docker_image.nginx will be created
+ resource "docker_image" "nginx" {
+ id = (known after apply)
+ keep_locally = false
+ latest = (known after apply)
+ name = "nginx:latest"
+ output = (known after apply)
+ repo_digest = (known after apply)
}
Plan: 2 to add, 0 to change, 0 to destroy.
Согласно выходному содержимому, вы можете видеть, что были добавлены два ресурса, включая изображения и контейнеры. Без изменений и уничтожения предметов.
Затем выполните ресурс развертыванияterraform apply
.
$terraform apply
Результат выполнения выглядит следующим образом:
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# docker_container.nginx will be created
+ resource "docker_container" "nginx" {
+ attach = false
+ bridge = (known after apply)
+ command = (known after apply)
+ container_logs = (known after apply)
+ entrypoint = (known after apply)
+ env = (known after apply)
+ exit_code = (known after apply)
+ gateway = (known after apply)
+ hostname = (known after apply)
+ id = (known after apply)
+ image = (known after apply)
+ init = (known after apply)
+ ip_address = (known after apply)
+ ip_prefix_length = (known after apply)
+ ipc_mode = (known after apply)
+ log_driver = "json-file"
+ logs = false
+ must_run = true
+ name = "tutorial"
+ network_data = (known after apply)
+ read_only = false
+ remove_volumes = true
+ restart = "no"
+ rm = false
+ security_opts = (known after apply)
+ shm_size = (known after apply)
+ start = true
+ stdin_open = false
+ tty = false
+ healthcheck {
+ interval = (known after apply)
+ retries = (known after apply)
+ start_period = (known after apply)
+ test = (known after apply)
+ timeout = (known after apply)
}
+ labels {
+ label = (known after apply)
+ value = (known after apply)
}
+ ports {
+ external = 8000
+ internal = 80
+ ip = "0.0.0.0"
+ protocol = "tcp"
}
}
# docker_image.nginx will be created
+ resource "docker_image" "nginx" {
+ id = (known after apply)
+ keep_locally = false
+ latest = (known after apply)
+ name = "nginx:latest"
+ output = (known after apply)
+ repo_digest = (known after apply)
}
Plan: 2 to add, 0 to change, 0 to destroy.
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
входитьyes
Явно для выполнения развертывания.
Развертывание завершено! Ошибок не возникло.
Затем проверьте, был ли создан контейнер докеров.nginx
.
$docker ps
Да, создание успешно, и тогдаcurl
Посетите, чтобы получить приветственную домашнюю страницу тоже!
Пока что деплоймент создан успешно, наблюдаем каталог проекта, там есть еще одинterraform.tfstate
файл, это файл состояния, это очень важно, не пытайтесь изменить его вручную!
2.3 Выполнить уничтожение
Выполнить уничтожение довольно просто, выполните его в каталоге проектаterraform destroy
команда сделает.
$terraform destroy