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

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

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

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

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

Q&A

解決済

1回答

321閲覧

docker-compose v1 で build した結果新しいイメージが作成されたかどうかを取得したい

advanceboy

総合スコア8

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

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

0グッド

0クリップ

投稿2022/10/05 04:21

編集2022/10/05 04:26

使用中の環境

Docker version 20.10.11
docker-compose version 1.29.2
ホストOS: Ubuntu 20.04LTS

※: 使用中の IaC が対応していない事情で、 Docker Compose CLI (v2) が使用できません


目的

雑に docker-compose でサービスを動かしている環境で、 イメージの取得と再ビルドを行い、 その結果いずれかのイメージに更新があればコンテナの再起動を、定期的に自動で行いたいと考えています。
イメージをビルドするマシンと、コンテナを実行するマシンは同じです。

前提状況

docker-compose.yml では、以下のようにイメージを直接利用するものと、手元でビルドして利用するものが混在しています。

services: aaa1: build: ./aaa aaa2: build: ./aaa bbb: image: alpine:latest
FROM alpine:latest RUN apk add --no-cache jq

試した事

イメージを直接利用するものについては、以下のように標準出力から新イメージの取得の有無で判別できそうだという事までたどり着きました。

shell

1$ docker-compose pull --no-parallel | grep "Downloaded newer image"

一方、自前でビルドするほうについては、 docker-compose build --pull と実行した場合に、最終イメージがキャッシュされたかに関わらず、以下のようになってしまうため、更新されたイメージが作成されたかどうかの判別ができずに悩んでいます。

Successfully built xxxxxxxxxxxx Successfully tagged dir_aaa1:latest

質問

docker-compose で build した結果、新しいイメージが作成されたかどうかを取得する方法はありませんか?

上述の理由から、 新イメージの取得・ビルド後の新しいイメージの有無・再起動 をワンライナーで書けるのが望ましいです。

また、 この更新コードは cron 実行したいので、 /bin/sh (POSIX シェル) で動いた方が少しうれしいですが、 bash でも構いません。

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

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

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

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

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

guest

回答1

0

自己解決

docker-compose.ymlDockerfile 等のファイルが更新されない場合に限定して考えたところ、 build で新しいイメージが作成されるのは、 ベースイメージが更新された場合だけとなります。

別途 pull される可能性を無視すれば、 pull か build のいずれかで新しいイメージが pull されていれば、 docker-compose で立ちあげるコンテナのイメージが更新されたと言えそうです。

shell

1$ { docker-compose build --pull; docker-compose pull --no-parallel; } | grep "Downloaded newer image" && docker-compose up -d

全てのシチュエーションで満足できる物ではありませんが、ひとまず概ね希望する結果は得られたので、これを自己解決とさせていただきます。

もし、より良い方法がありましたら、教えていただけると幸いdす。

投稿2022/10/05 16:41

advanceboy

総合スコア8

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問