🐳
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