🐳

GitHub ActionsでDockerイメージからのファイル抽出

に公開

背景

GitHub ActionsでDockerfileからDockerイメージのビルドを行います。
DockerfileのFROM命令で指定するベース・イメージ内のファイルを事前に抽出し編集した上で、COPY命令でベース・イメージ内のファイルを変更します。

このベース・イメージ内のファイルの事前抽出をするためにDockerを利用できる環境が必要になりますが、諸事情により用意できないためファイルの抽出部分をGitHub Actionsで実施しました。
この記事はその備忘録です。

ファイル構成

GitHub Actionsのワークフローを手動で実行するためのワークフローファイル(export-docker-image-tarball.yml)を作成します。

% tree -aF .github
.github/
└── workflows/
    └── export-docker-image-tarball.yml

2 directories, 1 file

作成したワークフローファイル

以下のファイルを作成しました。

export-docker-image-tarball.yml
name: Export Docker Image Tarball
run-name: Export docker image tarball
on: workflow_dispatch
jobs:
  Export-Docker-Image-Tarball:
    runs-on: ubuntu-latest
    steps:
      - run: docker pull amazonlinux:2023.2.20231011.0
      - run: docker images
      - run: docker run --name amazonlinux --detach amazonlinux:2023.2.20231011.0
      - run: docker ps
      - run: docker export amazonlinux > amazonlinux-20231011.tar
      - name: Save tarball
        uses: actions/upload-artifact@v3
        with:
          path: amazonlinux-20231011.tar

このワークフローファイルを使ってワークフローを手動で実行し、出力されたアーティファクトをダウンロードすることで、手元で修正が必要なファイルを編集できるようになります。

以下に上記のワークフローファイルについてもう少しだけ記載しますが、簡単なワークフローファイルなので折りたたんでいます。

export-docker-image-tarball.ymlの内容

ワークフローの起動契機設定

以下の部分でworkflow_dispatchを設定し、手動でのみワークフローが実行されるように設定しています。

on: workflow_dispatch

Dockerイメージからファイルを抽出するまでの流れ

docker pullでファイルを抽出したいDockerイメージをダウンロードします。

      - run: docker pull amazonlinux:2023.2.20231011.0

ファイルの抽出にdocker exportを使用するため、docker runでダウンロードしたDockerイメージを使用してDockerコンテナを起動します。

      - run: docker run --name amazonlinux --detach amazonlinux:2023.2.20231011.0

docker exportで起動したDockerコンテナを指定し、tarballとして出力します。

      - run: docker export amazonlinux > amazonlinux-20231011.tar

出力したtarballをアーティファクトとして保存します。

      - name: Save tarball
        uses: actions/upload-artifact@v3
        with:
          path: amazonlinux-20231011.tar

Discussion