2017-10-31 16 views
0

私はnodeserver1という名前の実行中のコンテナを持っています。ノードサーバーを実際に実行するために次のコマンドを発行しました docker exec -d nodeserver1 nodejs ipshow.js 次回このイメージからコンテナを作成するときにexecコマンドを発行する必要がないように、nodeserver1からイメージを作成するにはどうすればよいですか。 docker commit <container id> <some-new-name>を使用してコミットしようとしましたが、新しいコンテナを実行するとノードサーバーが起動しません。あなたはおそらく、多段ビルドを使用したいそのコンテナでサーバーを実行するコマンドを実行した後に、コンテナからイメージを作成する方法はありますか?

答えて

1

https://docs.docker.com/engine/userguide/eng-image/multistage-build/

はここでドッキングウィンドウのドキュメントからコピーした例shamelessyです:

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を使用して、他のイメージからアーティファクトをフェッチする方法に注目してください。

+1

+1。キーは、ビルドファイルの最後にあるCMDコマンドです。ドッカーコンテナをコミットするだけで、コンテナの起動時にドッカーにファイルが実行されることはありません。これは、ビルドファイルの一部であるか、ドッカー(exec)またはドッカーの作成指示の一部です。 –

+0

@ChrisMitchell:あなたが意味することを誤解しているかもしれませんが、私はあなたがCMDの前にCOPYコマンドを意味したと思います。私が間違っている場合は私を修正してください。 – Stefano

+0

CMDコマンドはありません。コンテナが起動するときに何を実行するかをドッカーに指示する命令。こちらをご覧ください:https://docs.docker.com/engine/reference/builder/#cmd –

関連する問題