generated at
Packer







brewで入れたmrsekut



まだなんでdockerだけではダメでわざわざpackerが必要なのか理解していないmrsekut


with DockerのtutorialぐらいならDockerfileで完結する
packerをわざわざ使う理由があまりない
Dockerfile
FROM ubuntu:jammy ENV FOO="hello world" RUN echo "Adding file to Docker Container" \ && echo "FOO is $FOO" > example.txt RUN echo "This provisioner runs last"
with AWSのtutorialではebsを対象にカスタムAMIを作ってる
AMIを作るならこれが楽だろう






Packerについて調べると軒並み若干古いのはなぜ?mrsekut
2018年ぐらいの記事がよく出てくる


いったん「AMI を作るときに使うツール」みたいに捉えて良いかなmrsekut
前提知識が乏しいので細かいところをかなり捨象していく

自動化されたMachine Imageの作成ツール
Dockerなどのコンテナ技術との違い #??
マシンイメージとは、仮想マシン(VM)、コンテナ、あるいは物理サーバー上で実行される完全なシステムイメージのことで、オペレーティングシステム(OS)、アプリケーション、アプリケーションの設定などが含まれます。

AWSが提供するAMIに環境構築をしたイメージを作成する
例えば、以下のような毎度やってる環境構築を再利用できるようにする
管理用アカウントの作成
開発環境のinstall
サーバのセットアップ
など


用語
ベンダーが提供するMachine Imageを元にartifactを作成する
JSON形式のテンプレートを使って構成する
特定の環境上でmacine imageの起動、設定適用、作成を行う
provisioner
machine imageの中にソフトウェアのインストールや設定を行う
テンプレートにシェルコマンドを列挙する感じmrsekut
post-processor
builderの実行結果を元に新しいartifcatを作る
artifactsを圧縮したり、cloudにアップロードしたり、イメージにタグ付けしたり
artifact
Packer独自の抽象化されたMachine Imageの概念
最終生成物


packer {}
docker pluginを入れる
hcl
packer { required_plugins { docker = { version = ">= 1.0.8" source = "github.com/hashicorp/docker" } } }
aws pluginを入れて作ると、packer build後に、AMIが作成されてアップロードもされる
コンソールからアクセスできる
source {}
hcl
source "docker" "ubuntu" { image = "ubuntu:jammy" commit = true }
docker builderを使用
ubuntu:jammy イメージを基盤とする
build {}
hcl
build { name = "learn-packer" sources = [ "source.docker.ubuntu" ] }
sourcesに複数書けば複数のソースを対象に、複数のイメージをビルドする
provisioner
hcl
provisioner "shell" { environment_vars = [ "FOO=hello world", ] inline = [ "echo Adding file to Docker Container", "echo \"FOO is $FOO\" > example.txt", ] }

pluginのdownload
構文チェックなど
imageのbuild







サポートしているプラットフォームが多い
AWS、GCP、Azure、VMware、Docker
DigitalOcean、Google Compute Engine、Docker、OpenStack、VirtualBox、VMware、QEMU


Packerの画像検索したらシモいのが出てきてびっくりしたなmrsekut