2017-09-13 6 views
0
FROM golang:1.8 

RUN apt-get -y update && apt-get install -y curl 

RUN go get -u github.com/gorilla/mux 

RUN go get github.com/mattn/go-sqlite3 

RUN curl -sL https://deb.nodesource.com/setup_6.x | bash - && \ 
    apt-get install -y nodejs 

COPY . /go/src/beginnerapp 

WORKDIR ./src/beginnerapp/beginner-app-react 

RUN npm run build 

RUN go install beginnerapp/ 

WORKDIR /go/src/beginnerapp/beginner-app-react 

VOLUME /go/src/beginnerapp/local-db 

WORKDIR /go/src/beginnerapp 

ENTRYPOINT /go/bin/beginnerapp 

EXPOSE 8080 

最初に、golangプロジェクトとreactjsコードはイメージに存在しないため、(js)/ install(golang)をビルドする前にコピーする必要があります。ファイルをイメージにコピーする前に、そのプロセスをビルド/インストールする方法がありますか?理想的には、golang実行可能ファイルとreactjsプロダクションビルドをコピーするだけです。Dockerfile:必要なファイルのみをイメージにコピーする前に、プロジェクトをビルドするにはどうすればよいですか?

+0

のための記事の下に読んでください! –

+0

"ゴラン:FROM golang:1.8"イメージに "go install"をビルドし、別のイメージ "FROM alpine"にコピーする( – itiic

+0

)@JinnaBalu私は、golang実行ファイルとreactjsコンテナのサイズを最小限に抑えます。チャンスをつかんだときには、私はショットを出すために、多段階のビルドが必要です。 – irregular

答えて

1

はいこれはマルチステージビルドを使用して可能です。あなたのドッカーファイルに複数のFROMを置くことができ、最後のFROMを使用してメインイメージが構築されるという考え方です。以下はあなたが必要なフォルダをコピーする前に構築したいなぜサンプル擬似構造

FROM node:latest as reactbuild 
WORKDIR /app 
COPY . . 
RUN webpack build 

FROM golang:latest as gobuild 
WORKDIR /app 
COPY . . 
RUN go build 

FROM alpine 
WORKDIR /app 
COPY --from=gobuild /app/myapp /app/myapp 
COPY --from=reactbuild /app/dist /app/dist 

で詳細

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

+0

例ではかなり頻繁に 'alpine'が使用されています。それはコンテナの中で最も軽量なイメージなのですか?他の理由はありますか? – irregular

+0

明るく、スクラッチイメージよりも少し機能が豊富です。あなたは基本的なunixコマンドを得る –

関連する問題