Featured image of post PACKERがHCL2をサポートしたのでDOCKERイメージを作成してみる

PACKERがHCL2をサポートしたのでDOCKERイメージを作成してみる

いつの間にかサポートされてました

記述したコード

Packerとは

  • HashiCorpが開発しているCLIツール
  • マルチクラウドに対応したゴールデンイメージの作成ができる
  • 設定ファイルの書式はJson or HCL2
  • バージョン1.5からHCL2に対応した

参照

HCL2で記述するメリット

  • TerraformもHCL2で記述するため共通の書式を利用できる
  • 設定ファイルを用途に合わせて分割できる
  • コードの途中でコメントを追加できる

Packerのバージョン

1
2
$ packer version
Packer v1.5.5

設定ファイル一覧

1
2
3
4
5
6
$ tree
.
├── README.md
├── build.pkr.hcl
├── sources.pkr.hcl
└── variable.pkr.hcl

variable.pkr.hcl

  • variableを利用してコード内で利用する変数を定義する

sources.pkr.hcl

  • ビルド時に利用するイメージを利用する
  • Json形式で記述する際のBuildersに相当する

build.pkr.hcl

  • ビルドを行う際の処理を記述する
  • sourcesでsources.pkr.hclに書いた設定を複数読み込むことが可能
  • その他Jsonで記述する際と同様にprovisionerでShellの他、Ansibleなどと連携可能

ファイル内容

variable.pkr.hcl

1
2
3
4
5
6
7
8
9
variable "image_nginx" {
  type    = string
  default = "nginx:latest"
}

variable "image_php-fpm" {
  type    = string
  default = "php:7.3-fpm"
}

sources.pkr.hcl

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*
{
  "type": "docker",
  "image": "nginx:latest",
  "commit": true
}
*/
source "docker" "nginx" {
  image  = var.image_nginx
  commit = true
}

/*
{
  "type": "docker",
  "image": "php:7.3-fpm",
  "commit": true
}
*/
source "docker" "php-fpm" {
  image  = var.image_php-fpm
  commit = true
}

build.pkr.hcl

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
build {
  sources = [
    "source.docker.nginx",
    "source.docker.php-fpm"
  ]

  provisioner "shell" {
    inline = [
      "hostname && cat /etc/os-release"
    ]
  }
}

ビルド実行

1
$ packer build ./

現時点での問題

Built with Hugo
Theme Stack designed by Jimmy