Packer
https://gyazo.com/904b1040d988a2b37e52e50b7969673d
brewで入れたmrsekut.icon
まだなんでdockerだけではダメでわざわざpackerが必要なのか理解していないmrsekut.icon
packerをわざわざ使う理由があまりない
code: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"
AMIを作るならこれが楽だろう
Packerについて調べると軒並み若干古いのはなぜ?mrsekut.icon
2018年ぐらいの記事がよく出てくる
いったん「AMI を作るときに使うツール」みたいに捉えて良いかなmrsekut.icon
前提知識が乏しいので細かいところをかなり捨象していく
マシンイメージとは、仮想マシン(VM)、コンテナ、あるいは物理サーバー上で実行される完全なシステムイメージのことで、オペレーティングシステム(OS)、アプリケーション、アプリケーションの設定などが含まれます。
AWSが提供するAMIに環境構築をしたイメージを作成する
例えば、以下のような毎度やってる環境構築を再利用できるようにする
管理用アカウントの作成
開発環境のinstall
サーバのセットアップ
など
用語
JSON形式のテンプレートを使って構成する
特定の環境上でmacine imageの起動、設定適用、作成を行う
provisioner
machine imageの中にソフトウェアのインストールや設定を行う
テンプレートにシェルコマンドを列挙する感じmrsekut.icon
post-processor
builderの実行結果を元に新しいartifcatを作る
artifactsを圧縮したり、cloudにアップロードしたり、イメージにタグ付けしたり
artifact
Packer独自の抽象化されたMachine Imageの概念
最終生成物
packer {}
docker pluginを入れる
code:hcl
packer {
required_plugins {
docker = {
version = ">= 1.0.8"
source = "github.com/hashicorp/docker"
}
}
}
aws pluginを入れて作ると、packer build後に、AMIが作成されてアップロードもされる
コンソールからアクセスできる
source {}
code:hcl
source "docker" "ubuntu" {
image = "ubuntu:jammy"
commit = true
}
docker builderを使用
ubuntu:jammyイメージを基盤とする
build {}
code:hcl
build {
name = "learn-packer"
sources = [
"source.docker.ubuntu"
]
}
sourcesに複数書けば複数のソースを対象に、複数のイメージをビルドする
provisioner
code: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.icon