1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker 入門者のアウトプットAdvent Calendar 2024

Day 10

GitHub Actions 上で docker build するだけ

Last updated at Posted at 2024-11-17

背景

割と最近 Docker を触るようになってきました。自作した Web アプリのデプロイ用 Dockerfile を作ったりなんかして。

で、「Dockerfile がちゃんとビルドできるか常に確かめる Actions Workflow も多分作れるよな?」と思ったのです。

ということで、(n番煎じかも分からん) 記事表題の通り。(※ 本記事では docker push はやりません)

GitHub Actions と Docker (cli) の基礎が分かっていれば、やることはとっても簡単。動作チェックされたサンプルコードとして見てもらえればと思います。

実装 (普通のビルド)

適当に GitHub リポジトリを作り、リポジトリルート直下に適当な Dockerfile を作ります。別の記事で作った、ubuntu に git 入れるだけのやつでやってみます。

FROM ubuntu:latest

RUN apt update
RUN apt install -y git

そして workflow 作成。Docker のセットアップは docker/setup-buildx-action@v3 を呼ぶだけで OK。

.github/workflows/docker-build.yml
name: Docker build test

on: push

jobs:
  docker-build:
    runs-on: ubuntu-latest

    steps:
    - name: Source checkout
      uses: actions/checkout@v4
    - name: Set up docker buildx
      uses: docker/setup-buildx-action@v3
    - name: Build docker image
      run: docker build -t built-image .

push して結果確認。

docker-actions-1-1.png

docker-actions-1-2.png

ビルドのログを確認できました。

イメージファイルを出力してみる

もうちょっと応用を効かせて、作ったイメージを Artifact として出力させてみます。

Docker のコマンドでイメージを tar に出力した後、actions/upload-artifact で出力します。

name: Docker build test

on: push

jobs:
  docker-build:
    runs-on: ubuntu-latest

    steps:
    - name: Source checkout
      uses: actions/checkout@v4
    - name: Set up docker buildx
      uses: docker/setup-buildx-action@v3
    - name: Build docker image
      run: docker build -t built-image .
+   - name: Export docker image
+     run: docker save -o built-image.tar built-image
+   - name: Save image as artifact
+     uses: actions/upload-artifact@v4
+     with:
+       name: built-image.tar
+       path: built-image.tar

push して確認。

docker-actions-2-1.png

docker-actions-2-2.png

無事イメージが出力されました。

実装 (もっとリッチなビルド)

(2024/11/22 追記)

自分で Artifact 出力とかしていましたが、もっと良いのが用意されているではありませんか。

name: Docker build test

on: push

jobs:
  docker-build:
    runs-on: ubuntu-latest

    steps:
    - name: Source checkout
      uses: actions/checkout@v4
    - name: Set up docker buildx
      uses: docker/setup-buildx-action@v3
    - name: Build docker image
-     run: docker build -t built-image .
+     uses: docker/build-push-action@v6
+     with:
+       context: .
+       push: false
+       cache-from: type=gha
+       cache-to: type=gha

(ここからビルド内容は、Git インストールじゃなくてまた別記事で作ったビルドになります。ビルド時間の差が分かりやすいし。)

push して結果を見てみると?

docker-build-action-1.png

ビルド結果が出力されているではありませんか。それに、いい感じにキャッシュしてくれる機能もあるようです。早速 Re-run all jobs してみると?

docker-build-action-2.png

ビルド時間が 36秒からたったの 3秒に!(まぁ変更無しだからそりゃ早いけど・・・)

勝手に「push は用無いし」と思ってたら、push しなくても色々ありました。他にも色々オプションがあるようで、Customizing を参照。

おわり

これで、Dockerfile が壊れていないか自動テストすることができます。

それだけでなく、docker push も活用すれば自動でイメージをアップデートすることもできるようです。 Docker 公式で色々 Actions を用意してくれているようなので、探ってみると色々便利なものが見つかるかも。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?