Buildah and Skopeo
설치
- Arch Linux
- Debian
sudo pacman -S buildah skopeo
sudo apt install buildah skopeo
/etc/containers/registries.conf
unqualified-search-registries = ['docker.io', 'quay.io', 'registry.fedoraproject.org']
Build
<project>
├── Dockerfile
├── containerize.sh
├── go.mod
├── go.sum
└── main.go
main.go
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}
ShellScript
containerize.sh
#!/usr/bin/env bash
set -x
build=$(buildah from golang:1.17)
build_root=$(buildah mount $build)
buildah copy $build . /app
buildah config --workingdir /app $build
buildah run $build go get -u github.com/gin-gonic/gin
buildah run $build env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -ldflags '-s' -o app
runtime=$(buildah from scratch)
buildah copy $runtime $build_root/app/app /usr/bin/
buildah config --cmd "app" $runtime
buildah commit $runtime ping:1.0.0
buildah rm $runtime
buildah unmount $build_root
buildah rm $build
buildah unshare sh containerize.sh
Dockerfile
FROM golang:1.17 AS build
COPY . /app
WORKDIR /app
RUN go mod tidy
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -ldflags '-s' -o app
FROM scratch AS runtime
WORKDIR /app
COPY /app/app /usr/bin/
CMD ["app"]
buildah bud --tag ping .
--file <path|url>
: Dockerfile의 경로를 설정할 수 있습니다.
Clean
buildah containers
buildah rm <container>
--all
: 모든 컨테이너를 삭제합니다.
buildah images
buildah rmi <image>
--all
: 모든 이미지를 삭제합니다.--prune
: 댕글링 이미지들을 삭제합니다.
login
skopeo login <url>