Automated build(DockerHubとGitHubの連携)

Automated build(DockerHubとGitHubの連携)

目次

はじめに
Gitコマンド・Dockerのインストール(Windows)
Docker HubとGitHubの連携
DockerHub上で新規リポジトリ作成
GitHubにプッシュ、自動ビルドの実行確認
さいごに

はじめに

DockerHubとの連携により、GithubやBitbucketといったソースコードのホスティングサービス上のリポジトリ変更がpushされたタイミングで、自動的にビルドを実行する仕組みがあります。
今回はその一例として、DockerHubとGitHubを連携させることで自動ビルドが実行できるAutomated build」という仕組みについて記載しようと思います。

仕組みとしては、GitHub上の連携設定をしたリポジトリに変更があった都度DockerHub側が変更された内容を反映した状態でイメージのビルドを自動で実行する機能になります。自動ビルドされたイメージ(Dockerfile)は、連携設定をしたDockerHubレジストリにプッシュされます。

自動的にビルドが実行されることで、手動でのビルド作業( ローカルでのdocker build・docker push等 )の必要がなく、効率的に作成したアプリケーションの更新を行うことが可能になります。


※Dockerfile、Dockerイメージなどの詳細につきましては本記事では割愛させて頂くため、公式ドキュメントのURLを下記に掲載させて頂きます。

公式ドキュメント:
https://docs.docker.jp/index.html

・Dockerfileについて:
https://docs.docker.jp/engine/reference/builder.html
・Dockerイメージについて:
https://docs.docker.jp/engine/userguide/dockerimages.html

1.Gitコマンド・Dockerのインストール(Windows)

今回はWindows版について記載します。(macなど他のOSについても流れは同じになります)

 ※Windows用のDockerについて、Windows HomeエディションではHyper-Vの機能が使えないため、
  以前はHomeエディションでDockerの実行が難しかったものの、最新のDockerのバージョンでは
  WSL2というLinuxカーネルを追加インストールすることで使用可能になっています。

① コマンドラインからGitを実行するため 、下記のサイトからGit for Windowsをインストールします。
https://git-scm.com/

② 続けて下記のサイトより、Windows版のDockerをインストールします。
https://docs.docker.com/docker-for-windows/install/

③ Dockerをインストール後、下記の2つの手順を実行します。

1. WSL2 Linuxカーネルのアップデート
下図のダイアログが表示されるので、下記リンク(https://docs.microsoft.com/ja-jp/windows/wsl/install-win10#step-4—download-the-linux-kernel-update-package)から
x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ」 をインストールします。

2.BIOSから仮想化機能を有効化
マザーボードのメーカーによって設定方法が異なるため、「BIOS」「仮想化」「メーカー名」等で検索し、公式サイトの記載手順を参考に仮想化機能の設定を有効化します。

※(例)ASUSの場合…https://www.asus.com/jp/support/FAQ/1038245/

2.Docker HubとGitHubの連携

① Docker Hubのサイトにアクセスし、新規にアカウントを作成します。
  https://hub.docker.com/

② アカウント作成後、 Docker Hub のトップページに行き、ページ右側のタブから「Account Settings」をク
  リックします。

③ Docker HubとGitHubを連携させるため、画面左側のタブ「Linked Accounts」を選択し、右下のGitHubの
  欄にあるConnectをクリックします。

④ GItHubアカウントのログイン画面が表示されるので、アカウント情報を入力します。
  これでDocker HubとGitHubの連携設定が完了しました。

3.DockerHub上で新規リポジトリ作成

① Docker Hubのトップ画面に戻り、下の「Create a Repository」からDockerHub上にリポジトリを新規作成
  します。

② 下記の項目をそれぞれ入力・選択し、一番下の「Create」ボタンをクリックします。

1.DockerHubアカウント名、リポジトリ
 先ほど作成したアカウントリポジトリを選択します。
2.Visibility
 「Public」を選択すると他のユーザーがソースコードを閲覧可能な状態になります。
  ※ 非公開にしたい場合は「Private」を選択してください。
3.Build Settings
 GitHubのアイコンを選択するとアカウントを選択する欄が出てくるので、自分のGitHubのアカウント
 と、Github上で作成したリポジトリを選択します。
  ※ここではサンプル用の空のリポジトリを選択しています。GitHub上で新規リポジトリを作成する方法に
   つきましては、下記の過去記事をご参照頂けますと幸いです。
4.BUILD RULES
 デフォルト設定では、選択したリポジトリのMasterブランチに自動ビルドが設定されますが、別のブランチを
 指定したい場合などはこの項目から変更ができます。


4.GitHubにプッシュ、自動ビルドの実行確認

① 自動ビルドの実行を確認するために、Githubのリポジトリに Dockerfile を新たに作成してみます。
もし、ローカルに3で連携設定をしたGitHubリポジトリのクローンがない場合は、下記のコードをコマンドラインから実行します。(GitHub上に存在するリポジトリのクローンをローカルに新規作成します。)
  ※ 対象リポジトリのURLはGitHubのトップページからコピー可能です。

git clone https://github.com/アカウント名/リポジトリ名

② 任意のテキストエディタに下記2行を貼り付け、ローカルのgitリポジトリが存在するディレクトリに
  Dockerfileを作成、拡張子なしで保存します。

今回はGitHubへのPush( Dockerfile の新規追加)をトリガーに、DockerHubの自動ビルドが実行されるかの確認を行うため、Docker Hub上に公開されている「dockersamples/static-site」というサンプルイメージを使用します。下記の内容は、サンプルイメージをベースにし、環境変数のAUTHORに”Author name”という値を入れてWEBページ上に表示させる、という内容になります。
https://hub.docker.com/r/dockersamples/static-site

FROM dockersamples/static-site
ENV AUTHOR="Author name"

③下記のコマンドをそれぞれ実行します。

git config --global user.name "GitHubアカウント名"
git config --global user.email "GitHubアカウントのメールアドレス"
git add Dockerfile
git commit -m "Add Dockerfile"
git push origin

上のコマンドを実行したことにより、GitHub上に「 Dockerfile 」が追加されたことが確認できます。

④ DockerHubのトップページから作成したリポジトリのページを開き、「Builds」タブを開きます。
  下図の通り、ビルドに実行するとSUCCESSと表示されます。

ビルドの状態が画面中央の「Build Activity」に表示されていますが、DockerfilleがGitHubのリポジトリに存在していない場合、自動ビルドが実行されても処理がエラーになります。(イメージが作成できないため)
③の手順でDockerfileをGitHubにプッシュしたことにより、最後のビルドが成功しています。

⑤ 最後に、コンソールから下記のコマンドを実行することでDockerコンテナが起動します。ローカルの8080番ポートを使用しているので、http://localhost:8080/にアクセスしてみると、Dockerfileに記述したサンプルイメージと環境変数の値(Author name)が表示されています。これで、GitHubのリポジトリ更新をトリガーに、Docker上で自動ビルドの実行がされたことを確認できました。

docker run -itd -p 8080:80 DockerHubアカウント名/test-repository

さいごに

初めてDocker Hubを触ってみましたが、公式のドキュメントもわかりやすく、比較的に簡単に設定ができました。次回以降の記事では、Dockerの動作や仕組みについて掲載できたらと思います。