0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

StylezAdvent Calendar 2024

Day 5

OpenTofuでProxmox VEのCT(Container)を起動して、Dockerをインストールする

Last updated at Posted at 2024-12-04

毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。

0. はじめに

以下の記事を書きました。

OpenTofuでProxmox VEのCT(Container)を起動する #ProxmoxVE - Qiita
https://qiita.com/ynott/items/b6e72981d90564f982de

そうするとだんだん欲が出るもので、OpenTofuでプロビジョニングして、同時に何かインストールしてくれるといいんじゃない?

それに動かすのならDockerで動かせるとなお良いよね!って事で、以下のような対応をしました。

  1. ProxmoxでCT(LXC Container)を動かす
  2. このCTにDockerをインストールするために「非特権コンテナー」と「nested」にする
  3. Dockerをremote-execでインストールする

1. ProxmoxでCT(LXC Container)を動かすOpenTofuファイル

main.tf
terraform {
  required_providers {
    proxmox = {
      source = "telmate/proxmox"
      version = "2.9.11"
    }
  }
}

provider "proxmox" {
  pm_api_url = "https://proxmox.hogehoge.dev:8006/api2/json"
}

resource "proxmox_lxc" "ubuntu_container" {
  target_node  = "proxmox"
  hostname     = "ubuntu-22-04-lxc"
  ostemplate   = "local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.zst"
  password     = "your-root-password"
  unprivileged = true

  features {
    nesting = true
  }

  // 基本設定
  cores  = 2
  memory = 2048
  swap   = 512
  onboot = true
  ssh_public_keys = <<-EOT
    ssh-ed25519 <公開鍵>
  EOT

  // ストレージ
  rootfs {
    storage = "local-lvm"
    size    = "8G"
  }

  // ネットワーク
  network {
    name     = "eth0"
    bridge   = "vmbr0"
    ip       = "192.168.20.11/24"
    gw       = "192.168.20.1"
  }

  provisioner "remote-exec" {
    inline = [
      "apt-get update",
      "apt-get install -y docker.io",
      "systemctl enable docker",
      "systemctl start docker"
    ]
    connection {
      type     = "ssh"
      user     = "root"
      private_key = file("~/<秘密鍵のファイルパス>")
      host     = split("/", self.network[0].ip)[0]
    }
}

2. 非特権コンテナーでnestedにする

main.tfで以下の部分が、Dockerコンテナを動かすための指定部分です。

  unprivileged = true

  features {
    nesting = true
  }

3. Dockerをremote-execでインストールする

以下の部分が、Containerが起動した後に外からdockerをインストールします。

  provisioner "remote-exec" {
    inline = [
      "apt-get update",
      "apt-get install -y docker.io",
      "systemctl enable docker",
      "systemctl start docker"
    ]
    connection {
      type     = "ssh"
      user     = "root"
      private_key = file("~/<秘密鍵のファイルパス>")
      host     = split("/", self.network[0].ip)[0]
    }

4. 適用する

tofu init
tofu plan
tofu apply

すれば起動します。

5. まとめ

ProxmoxのCTは起動も早いので便利ですね。
これで、Dockerまで動くなんて最高でしょう。

6. 参照

TerraformからAnsibleのplaybookを実行する #AWS - Qiita
https://qiita.com/hayaosato/items/ee0d6eabb7b3d0a22136#remote-exec

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?