24.01.17 최초 작성
multistage build수행# syntax=docker/dockerfile:1
FROM golang:1.16
WORKDIR /go/src/github.com/alexellis/href-counter/
COPY app.go ./
RUN go get -d -v golang.org/x/net/html \
&& CGO_ENABLED=0 go build -a -installsuffix cgo -o app .
# syntax=docker/dockerfile:1
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY app ./
CMD ["./app"]
#!/bin/sh
echo Building alexellis2/href-counter:build
#href-counter 이미지 빌드
docker build -t alexellis2/href-counter:build . -f build.Dockerfile
#컨테이너 생성
docker container create --name extract alexellis2/href-counter:build
#컨테이너에 있는 실행파일 host로 복사
docker container cp extract:/go/src/github.com/alexellis/href-counter/app ./app
#컨테이너 삭제 (실행파일은 host에 남아있음)
docker container rm -f extract
echo Building alexellis2/href-counter:latest
#실행환경 빌드 (실행파일 들어감)
docker build --no-cache -t alexellis2/href-counter:latest .
#실행파일 삭제
rm ./app
# syntax=docker/dockerfile:1
# 빌드 실행 (0단계)
FROM golang:1.16
WORKDIR /go/src/github.com/alexellis/href-counter/
RUN go get -d -v golang.org/x/net/html
COPY app.go ./
RUN CGO_ENABLED=0 go build -a -installsuffix cgo -o app .
# 빌드한 실행파일 복사해옴 (1단계)
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=0 /go/src/github.com/alexellis/href-counter/app ./
CMD ["./app"]
FROM <~~> AS <설정할 이름> : 단계의 이름 설정# syntax=docker/dockerfile:1
FROM golang:1.16 AS builder
WORKDIR /go/src/github.com/alexellis/href-counter/
RUN go get -d -v golang.org/x/net/html
COPY app.go ./
RUN CGO_ENABLED=0 go build -a -installsuffix cgo -o app .
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /go/src/github.com/alexellis/href-counter/app ./
CMD ["./app"]
docker build --target builder -t my/counter:latest
# syntax=docker/dockerfile:1
# 빌드 환경 구축
FROM alpine:latest AS builder
RUN apk --no-cache add build-base
# 구축한 빌드 환경 기반으로 컴파일
FROM builder AS build1
COPY source1.cpp source.cpp
RUN g++ -o /binary source.cpp
# 구축한 빌드 환경 기반으로 컴파일
FROM builder AS build2
COPY source2.cpp source.cpp
RUN g++ -o /binary source.cpp
BUILDKIT은 지정한 단계와 다른 단계와의 의존성을 파악해 빌드
기존의 build는 어떤 단계를 지정 시 앞선 단계롤 모두 실행함
DOCKER_BUILDKIT=1 docker build --no-cache -f Dockerfile --target stage2을 통해 실행
# syntax=docker/dockerfile:1
FROM ubuntu AS base
RUN echo "base"
FROM base AS stage1
RUN echo "stage1"
FROM base AS stage2
RUN echo "stage2"