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

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

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

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

Q&A

解決済

2回答

3885閲覧

docker buildコマンドの実行完了までの所要時間を短縮/省略/効率化したい

fukazume

総合スコア78

Docker

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

0グッド

0クリップ

投稿2020/09/02 00:30

編集2020/09/02 00:35

##質問
例えばキャッシュのように、一度実行したdocker buildでダウンロードした完全に同一のインストール用パッケージを2回目以降のbuildで再度ダウンロードしなくてもよいようにしてbuildコマンドの実行完了までの所要時間を短縮/省略/効率化など、できたりしないでしょうか?

実践的なノウハウなど、アドバイスいただけると誠にありがたく存じます。ご不明な点などございましたら、適宜追記してまいりますので、どうぞよろしくお願い申し上げます。

##背景
現在、以下のDockerfileをコマンドプロンプト上のdocker buildコマンドでイメージ作成しているのですが、コンテナの環境を整備するために多くのapt-get installをしているため、build実行完了まで30分~1時間など非常に時間がかかります。また、開発に使うPCのネットワーク環境も遅めでダウンロード速度も低調です。

Dockerfile

1FROM ubuntu:20.04 2RUN apt-get update -y 3RUN apt-get install -y tzdata 4RUN apt-get upgrade -y 5# RUN apt-get install -y vim 6RUN apt-get install -y python3 python3-pip 7RUN apt-get install -y chromium-browser 8RUN apt-get install -y chromium-chromedriver 9RUN apt-get install -y python3-selenium

##環境
Windows 10
Docker Desktop v2.3.0.4(46911)
Docker Engine v19.03.12

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

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

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

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

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

dameo

2020/09/02 13:02

Docker Registryを自前で用意して、 https://github.com/google/go-containerregistry/blob/master/cmd/crane/ 上記コマンドを使うと、途中の差分イメージを入れ替える事ができます。よく分からないで使うとぶっ壊れますけど...ご参考までに。数年前にお試しで使ったことありますが、今は使ってません。
fukazume

2020/09/03 01:26

情報を共有いただき、ありがとうございます!ぜひとも参考にさせていただきます!
guest

回答2

0

ベストアンサー

ビルド時間を短縮させる方法はいくつもあります。

・HDDからSSDに変更する(効果絶大!)
・キャッシュを有効的に活用されるようにDockerfileを記述する。
https://qiita.com/pottava/items/452bf80e334bc1fee69a
・buildkitを使う。
https://www.slideshare.net/AkihiroSuda/buildkit
・場合によってはマルチビルドステージングの活用
同一Dockerfile内でソースをビルドしてからアプリの動作環境を構築している場合に有用。しかも、イメージサイズが小さくなるし、セキュアにもなる。

ここに上記のものすべて説明されています。
https://tech.plaid.co.jp/improve_docker_build_efficiency/#dockerfile--1

上記のDockerfileを以下のようにRUNのコマンドを連結させることでイメージレイヤを少なくすることも効率化の手法になります。そうすることで下記のapt-get一連のコマンドに変更がなければ、そのイメージレイヤがキャッシュとして再利用されます。

Dockerfile

1FROM ubuntu:20.04 2 3RUN apt-get update -y && \ 4 apt-get upgrade -y && \ 5 apt-get install -y tzdata python3 python3-pip chromium-browser chromium-chromedriver python3-selenium

投稿2020/09/02 14:39

comefigo

総合スコア1045

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

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

fukazume

2020/09/03 01:20

多角的な観点からリンクをご紹介くださり、ありがとうございます!「RUNのコマンドを連結させる方法」なども存じ上げませんでした。早速実践させていただきました!深く感謝申し上げます!
guest

0

例えばキャッシュのように

まず頻繁に今のベースイメージ(ubuntu:20.04)からビルドしなおしているのであれば、ほぼ変更が無いようなところまでを先に別のイメージとして作ってしまい、そちらをベースイメージにすればいいんじゃないの?と思いますが。

一度その中間イメージを作成してしまえば、ローカルにはキャッシュされてるし、複数のPCで使う場合もDocker Hubにアップロードしておけばそのイメージのダウンロードだけで済むんで。

実践的なノウハウなど、アドバイスいただけると誠にありがたく存じます。

質問の範囲が広すぎると思うので、とりあえず

Docker development best practices
Best practices for writing Dockerfiles

あたりを読んでください。

投稿2020/09/02 01:32

gentaro

総合スコア8949

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

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

fukazume

2020/09/03 01:18

中間イメージと言う概念を存じ上げませんでした。参考にさせていただきます!ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問