MySql Настройка в Linux Docker Контейнер через Terraform - PullRequest
0 голосов
/ 13 марта 2020

Требование: необходимо автоматизировать MySQL установку и создание базы данных на Linux (Ubuntu) Docker Контейнер через форму Terra. Я делаю все это на своем локальном компьютере, и ниже приведена конфигурация формы Terra.

Файл формы Terra:

resource "docker_container" "db-server1" {
  name  = "db-server"
  image = docker_image.ubuntu.latest
  ports {
    internal = 80
    external = 9093
  }

  provisioner "local-exec" {
      command = "docker container start dbs-my"
  }
  provisioner "local-exec" {
      command = "docker exec dbs-my apt-get update"
  }
  provisioner "local-exec" {
      command = "docker exec dbs-my apt-get -y install mysql-server"
  }
}

Но в контейнере нет службы mysql, когда я пытаюсь запустить команду mysql, я получаю сообщение об ошибке ниже:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

1 Ответ

0 голосов
/ 13 марта 2020

Использование Terraform для этого вообще немного необычно; вы можете посмотреть другие Docker -инструменты, такие как Docker Compose, чтобы настроить это. В этом примере также есть несколько анти-паттернов: вам обычно следует избегать установки программного обеспечения в работающих контейнерах и избегать выполнения длинных последовательностей императивных команд через Terraform, и обычно бесполезно запускать пустой образ ubuntu Docker как is.

Вместо этого вы можете запустить Docker Hub mysql image :

resource "docker_image" "mysql" {
  name = "mysql:8"
}

resource "random_password" "mysql_root_password" {
  length = 16
}

resource "docker_container" "mysql" {
  name = "mysql"
  image = "${docker_image.mysql.latest}"
  env {
    MYSQL_ROOT_PASSWORD = "${random_password.mysql_root_password.result}"
  }
  mounts {
    source = "/some/host/mysql/data/path"
    target = "/var/lib/mysql/data"
    type = "bind"
  }
  ports {
    internal = 3306
    external = 3306
  }
}

Если вы хотите выполнить дополнительную настройку созданной базы данных, вы мог бы использовать MySQL провайдера

provider "mysql" {
  endpoint = "127.0.0.1:3306" # the "external" port
  username = "root"
  password = "${random_password.mysql_root_password.result}"
}

resource "mysql_database" "db" {
  name = "db"
}
...