バナー画像

GitHubのdockerについてまとめています。

GitHubでDockerイメージを公開する

GitHubではCI(継続的インテグレーション)の一環として、DockerHubやGitHub PackagesなどのレジストリにDockerのコンテナイメージを公開出来ます。以下は、ビルド後にDocker Hubへのイメージ公開を行うためのyamlファイルの例です。

name: Publish Docker image
on:
  release:
    types: [published]
jobs:
  push_to_registry:
    name: Push Docker image to Docker Hub
    runs-on: ubuntu-latest
    steps:
      - name: Check out the repo
        uses: actions/checkout@v2
      - name: Log in to Docker Hub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
      - name: Push to Docker Hub
        uses: docker/build-push-action@v2
        with:
          push: true
          tags: my-docker-hub-namespace/my-docker-hub-repository:latest

参考)Dockerイメージの公開 – GitHub Docs

YAMLファイルのstepsに以下を記述することで、ビルド時にDockerHubへのイメージ公開をおこなっています。

GitHubから、Dockerにコンテナイメージを自動公開するための認証

Dockerにコンテナレジストリにイメージを公開するためには、GitHubにて個人アクセストークン(PAT)で、read:packages、write:packages、delete:packagesを選択します。

コンテナイメージのダウンロードとメタデータを読むためにread:packages、コンテナイメージのアップロードのためにwrite:packages、コンテナイメージの削除のためにdelete:packagesの権限が必要になります。

参考)イメージの構築と実行 — Docker-docs-ja 19.03 ドキュメント

PATを生成したら、Docker側でDockerとGitHubのアカウントをリンクします。

DockerのSettings→Linked Accountsにて、GitHubの「Connect」をクリックします。

DockerとGitHubの連携を承認する画面が表示されます。Authorize dockerをクリックします。

必要に応じて、パスワードを入力します。

アカウントのリンクが完了すると、Linked AccountsのGitHubの欄にリンク付されたカウント名が表示されます。

GitHub Packages Container regstryにコンテナイメージを公開

YAMLファイルのstepsに処理を追加することで、複数のレジストリにイメージを公開することも可能です。GitHub自体にも、Dockerイメージを公開するサービスGitHub Packages Container regstryというサービスがあります。

参考)GitHubによるDockerコンテナレジストリ「GitHub Packages Container registry」が正式サービスに - Publickey

参考)コンテナレジストリの利用 – GitHub Docs

GitHub Packages Container regstryでは、DockerやOCIのイメージをhttps://ghcr.ioを使用するコンテナレジストリに保存して管理できます。2021年6月現在、コンテナレジストリでは以下のコンテナフォーマットをサポートしています。

以下は、ghcr.ioにコンテナイメージをプッシュするコマンドです。

$ docker push ghcr.io/OWNER/IMAGE_NAME:latest

公開したイメージをpullする場合は、ダイジェストSHA値を指定します。

# dockerイメージのダイジェストSHA値を調べる
$ docker inspect ghcr.io/OWNER/IMAGE_NAME
# 必要に応じローカルでのイメージを削除
$ docker rmi  ghcr.io/OWNER/IMAGE_NAME:latest
# イメージのあとにダイジェストSHA値をつけてイメージをプル
$ docker pull ghcr.io/OWNER/IMAGE_NAME@sha256:82jf9a84u29hiasldj289498uhois8498hjs29hkuhs

以下は、コンテナイメージのビルドの手順です。ビルド後、イメージIDを使ってホスティング先でのタグ付を行います。

# コンテナイメージ hello_dockerのビルド
$ docker build -t hello_docker .
# dockerイメージのIDを調べる
$ docker images
> REPOSITORY                                            TAG                 IMAGE ID            CREATED             SIZE
> ghcr.io/my-org/hello_docker         latest              38f737a91f39        47 hours ago        91.7MB
> ghcr.io/my-username/hello_docker    latest              38f737a91f39        47 hours ago        91.7MB
> hello-world                                           latest              fce289e99eb9        16 months ago       1.84kB
#イメージIDを使用して、イメージ名をホスティング先でタグ付け
$ docker tag 38f737a91f39 ghcr.io/OWNER/NEW_IMAGE_NAME:latest

なお、コンテナイメージのビルドをおこなうには、Dockerfileにビルド方法を記述しておく必要があります。以下は、Dockerfileのサンプルです。

# 親イメージとして公式イメージを使う
FROM node:current-slim

# 作業用(working)ディレクトリを指定
WORKDIR /usr/src/app

# ホスト上のファイルを現在の場所にコピー
COPY package.json .

# イメージのファイルシステム内でコマンドを実行
RUN npm install

# 実行時、コンテナが特定のポートをリッスンするよう Docker に通知
EXPOSE 8080

# コンテナ内で指定したコマンドを実行
CMD [ "npm", "start" ]

# 残りのソースコードをホスト上からイメージのファイルシステム上にコピー
COPY . .

【関連記事】
DockerでRuby on Rails開発環境を作りアプリをGitHubに公開する 

まとめ

ポテパンダの一言メモ
  • GitHubのビルド時に、Dockerにてコンテナイメージを自動公開することが可能
  • ビルド時に複数のコンテナレジストリでイメージを公開できる
  • GitHubにもて、コンテナレジストリサービスGitHub Packages Container regstryがある

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。