我有一个名为nodeserver1的正在运行的容器。我发出以下命令来实际运行节点服务器
docker exec -d nodeserver1 nodejs ipshow.js
现在我如何从nodeserver1创建一个图像,以便下次从这个图像构建容器时,我不需要发出exec命令。
我试图使用docker commit <container id> <some-new-name>
提交它,但是当我运行新容器时,它不会启动节点服务器。
答案 0 :(得分:1)
您可能希望使用多阶段构建:https://docs.docker.com/engine/userguide/eng-image/multistage-build/
这是一个从docker文档复制的无耻实例:
FROM golang:1.7.3
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 GOOS=linux go build -a -installsuffix cgo -o app .
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 golang:1.7.3 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 GOOS=linux 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"]
此处,密钥为COPY --from=builder /go/src/github.com/alexellis/href-counter/app .
。请注意它如何使用--from=builder
从其他图像中获取工件。