DockerHub の Automated Build が有償化され、無償ユーザでは利用出来なくなってしまいました。 そこで GitHub に Push されたら GitHub Action でコンテナイメージをビルドし、DockerHub に登録する手順をメモしておきます。
前提
GitHub のデフォルト・ブランチ名は main
へ変更してあります。 また、今回の例では GitHub と DockerHub で以下のリポジトリ名を利用するものとします。
Service | Repository |
---|---|
GitHub | hello-world-docker |
DockerHub | hello-world |
DockerHub
Step.1
まず、DockerHub 側でリポジトリを作成します。 Create Repository
をクリックします。
Step.2
リポジトリ名を入力したら Create
をクリックし、リポジトリを作成します。
Step.3
Account Settings
をクリックします。
Step.4
GitHub Action から DockerHub へアクセスする為の Access Token を作成します。 Security
メニューにある New Access Token
をクリックします。
Step.5
Access Token Description
には識別しやすい名前を入力しておきます。 今回はシンプルに GitHub
としました。 Generate
をクリックします。
Step.6
Access Token が生成されます。 これは後の手順で GitHub に登録しますので控えておきます。 Copy and Close
をクリックします。
GitHub
Step.7
DockerHub と対になる (Dockerfile を登録する) リポジトリを GitHub に作成します。 GitHub へアクセスし、Repoisitories
→ Create
をクリックします。
Step.8
リポジトリ名を入力したら Create repository
をクリックします。
Step.9
リポジトリが作成されました。 作成されたリポジトリが選択されたままの状態で Settings
をクリックします。
Step.10
Secrets
をクリックします。
Step.11
New repository secret
をクリックします。
Step.12
DockerHub 側のユーザ名と、作成した AcceeToken を下記として登録します。
- DOCKER_USERNAME
- DOCKER_PASSWORD
まず、Name
には DOCKER_USERNAME
を、Value
には DockerHub 側のユーザ名を入力します。 入力が完了したら Add secret
をクリックします。
Step.13
同様に、次は Name
へ DOCKER_PASSWORD
を、Value
には DockerHub 上で生成した Access Token を入力します。 入力が完了したら Add secret
をクリックします。
Step.14
DOCKER_USERNAME
と DOCKER_PASSWORD
が登録されました。
ローカル PC
Step.15
ここからローカル PC で作業します。 GitHub 上に作成したリポジトリをクローンします。
git clone git@github.com:sig9org/hello-world-docker.git
cd hello-world-docker/
次に GitHub Action を保存するディレクトリ (.github/workflows/
) を作成します。
mkdir -p .github/workflows/
GitHub Action を定義した YAML ファイルを保存します。
cat << 'EOF' > .github/workflows/build.yml
name: Push to Docker registry
on:
push:
branches:
- main
jobs:
push:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Login to Docker Hub
uses: actions-hub/docker/login@master
env:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
DOCKER_REGISTRY_URL: docker.io
- name: Build :latest
if: success()
run: docker build -t sig9/hello-world:latest .
- name: Deploy :latest
if: success()
uses: actions-hub/docker@master
with:
args: push sig9/hello-world:latest
EOF
Docker イメージをビルドする為の Dockerfile を登録します。 今回は Alpine をベースに Hello, World!
を返すだけ、という内容です。
cat << EOF > Dockerfile
FROM alpine:latest
CMD echo "Helo, World!"
EOF
ファイルを登録し、コミットしたらリポジトリに push します。
git add .github/ Dockerfile
git commit -m 'My first commit.'
git push origin main
GitHub
Step.16
push されたファイルが GitHub 上に登録されていることを確認します。
Step.17
リポジトリの Actions
を確認すると .github/workflows/
に登録されたファイル (今回は build.yml
) が GitHub Action として登録され、実行中であることが分かります。
Step.18
しばらくすると (Dockerfile のビルドが終わり) GitHub Action が完了します。 もしエラーが出ている場合はエラー内容を確認し、デバッグします。
DockerHub
Step.19
DockerHub の該当リポジトリを確認すると GitHub Action によってビルドされた Docker イメージが latest
タグで登録されていることが分かります。
ローカル PC
Step.20
ビルドしたイメージを実行してみます。
# docker run sig9/hello-world:latest
Unable to find image 'sig9/hello-world:latest' locally
latest: Pulling from sig9/hello-world
97518928ae5f: Pull complete
Digest: sha256:f48e960e67ad17315d7de28133975964cdb442447e02dc4a9cc80e633696f3c0
Status: Downloaded newer image for sig9/hello-world:latest
Helo, World!
コメント