質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

2回答

1283閲覧

Dockerでbuildをする度にアプリケーションのインストールで時間が掛かってしまう

mimi_129

総合スコア63

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

1クリップ

投稿2022/03/27 06:13

前提

タイトルの通りです。
Docker内でChromeをインストールしてGoで使用しているのですが、
Goの環境構築と同様のDockerFileにChromeをインストールする記述があるので、
Goのプログラムを修正した後にdocker-compose buildを行うと、
Chromeをインストールするwgetも同時に走り、
ここがボトルネックになってbuildに時間が掛かってしまいます。

アプリケーションをインストールする部分だけbuildの際に、
毎回走らない様にするにはどうすれば良いのでしょう?

こういったケースは一般的にはどの様に対応されているんですかね?
開発の最中に動作確認に時間がかかるので困っています。

何か分かる方がいればよろしくお願いします。

FROM golang:latest COPY ./go/app /app/go # 切り替え WORKDIR /app/go/handler RUN rm go.mod # 初期化 RUN go mod init github.com/XXX/XXX/go/app/handler # モジュール取得 # RUN go get github.com/sclevine/agouti \ # && go get github.com/labstack/echo/v4 \ # && go get github.com/labstack/echo/v4/middleware \ # && go get github.com/joho/godotenv \ # && go get github.com/lib/pq \ # && go get github.com/jinzhu/gorm RUN go mod tidy RUN rm handler # ビルド RUN go build -o handler . RUN touch handler RUN pwd RUN ls -lt # 切り替え WORKDIR /app/go RUN rm go.mod # 初期化 RUN go mod init github.com/XXX/XXX # モジュール取得 # RUN go get github.com/XXX/XXX/go/app/handler RUN go mod tidy RUN rm main # ビルド RUN go build -o main . RUN touch main # unzip取得 RUN apt-get update && apt-get install -y unzip # chrome取得 RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add \ && wget http://dl.google.com/linux/deb/pool/main/g/google-chrome-unstable/google-chrome-unstable_93.0.4577.18-1_amd64.deb \ && apt-get install -y -f ./google-chrome-unstable_93.0.4577.18-1_amd64.deb # chromedriver取得 ADD https://chromedriver.storage.googleapis.com/93.0.4577.15/chromedriver_linux64.zip /usr/local/go/bin/ RUN cd /usr/local/go/bin/ \ && unzip chromedriver_linux64.zip RUN pwd RUN ls -lt CMD ["/app/go/main"]

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

あまりイメージできていないので、流してもらってよいですが、開発しているgoのソースコードはずっとコンテナの中にいる状況ですか?
そもそもdocker imageのビルドは開発が完了して行う作業だと思っているので、開発中はgoのソースコードをホストOSにマウントして出して、開発が終わったらコンテナに入って手動でgoのプログラムをビルドして実行し、動作を確認すると思います。(自分なら)
(そもそもgo runコマンドならビルドしなくてもよいですが)

後は、個人的な考えとして、dockerは本番環境用、開発はvirtualboxの様な環境で開発したほうが便利かと思います。
dockerはスリムで便利ですが、基本1コンテナ1プロセスの考え方なので、開発する際には扱いが面倒な気がします。(開発中はいくつものプログラムを一つの仮想VM上で動かしたい)

投稿2022/03/28 02:14

YuuT

総合スコア673

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

最終的にイメージ内にどのファイルが必要なのかよくわかりませんが、マルチステージビルドを使って、

FROM golang:latest as chrome RUN apt-get update && apt-get install -y unzip RUN wget ... ADD https://chromedriver.storage.googleapis.com/... FROM golang:latest COPY ./go/app /app/go ... COPY --from=chrome 必要なものをコピー

とかですかね。

あとは最終的には Docker イメージに固定化するとしても、
今開発中なのであれば頻繁に変わる Go 部分は現時点では Dockerfile 内に含めず docker-compose で volume mount 化し、Docker イメージはほぼ固定、とするのもいいのかもしれません (Go のビルドは別途必要ですが)。

投稿2022/03/27 07:29

68user

総合スコア2005

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問