如何在执行命令以在该容器中运行服务器后从容器创建映像?

时间:2017-10-31 20:38:16

标签: node.js docker

我有一个名为nodeserver1的正在运行的容器。我发出以下命令来实际运行节点服务器 docker exec -d nodeserver1 nodejs ipshow.js 现在我如何从nodeserver1创建一个图像,以便下次从这个图像构建容器时,我不需要发出exec命令。 我试图使用docker commit <container id> <some-new-name>提交它,但是当我运行新容器时,它不会启动节点服务器。

1 个答案:

答案 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从其他图像中获取工件。