如何从我的系统中自动删除中间阶段Docker容器?

时间:2018-02-25 12:26:25

标签: docker dockerfile

我有Dockerfile,我已经致力于git repo。我试图分阶段构建容器,只保存最后的容器阶段,其中安装了静态转二进制文件。

然而,"分期"容器似乎保存到我的系统中。我试图使用--rm标志自动删除它但没有成功。

这是我的Dockerfile

# Use golang alpine3.7 image for build
FROM golang:1.10.0-alpine3.7
# Maintainer information
LABEL Maintainer="Kimmo Hintikka"
# set working directory to local source
WORKDIR /go/src/github.com/HintikkaKimmo/kube-test-app
# Copy kube-test-app to currect working directory
COPY kube-test-app.go .
# build golang binary from the app source
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o kube-test-app .


# Use Alpine 3.7 as base to mach the build face
FROM alpine:3.7
# Maintainer information
LABEL Maintainer="Kimmo Hintikka"
# Install ca-certificates for HTTPS connections
RUN apk --no-cache add ca-certificates
# Set working directory
WORKDIR /root/
# Copy binary from previous stage. --from=0 means the index of the build action
COPY --from=0 /go/src/github.com/HintikkaKimmo/kube-test-app/kube-test-app .
# Run the binary
CMD [ "./kube-test-app" ]

这是我用来构建它的命令。

docker build --rm github.com/hintikkakimmo/kube-test-app -t kube-test-app

这可以成功构建,但也会创建一个额外的无标记TAG <none>容器,这是我构建的第一阶段。

~/go/src/github.com/hintikkakimmo/kube-test-app(master*) » docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
kube-test-app       latest              f87087bf2549        8 minutes ago       11.3MB
<none>              <none>              1bb40fa05f27        8 minutes ago       397MB
golang              1.10.0-alpine3.7    85256d3905e2        7 days ago          376MB
alpine              3.7                 3fd9065eaf02        6 weeks ago         4.15MB
alpine              latest              3fd9065eaf02        6 weeks ago         4.15MB

我的Docker版本是:

~ » docker --version               kimmo.hintikka@ie.ibm.com@Kimmos-MacBook-Pro
Docker version 17.12.0-ce, build c97c6d6

2 个答案:

答案 0 :(得分:4)

你应该像这样构建它:

docker build --rm -t kube-test-app .

如果您找到了dockerfile,则找到或指定dockerfile的路径

docker build --rm -t kube-test-app -f path/to/dockerfile .

-t是标记,您构建的泊坞窗图片的名称

要删除除图像和运行容器以外的所有内容,请使用docker system prune

删除图片docker rmi -f image_name

答案 1 :(得分:0)

我采取了另一种方法。我在中间容器上设置了标签:

FROM golang:1.14.2 AS builder
LABEL builder=true

运行构建文件时,我只需追加一条命令即可查找并销毁包含该标签的图像:

docker build . -t custom-api:0.0.1 && \
  docker rmi `docker images --filter label=builder=true -q`