初めてのイメージ作りとプッシュ

説明

ここまでに todo リストのアプリ を更新してきたので、このアプリケーションに対応するコンテナーイメージを生成して、Docker Hub 上にて共有することにします。 そのためには、以下のことを行っていく必要があります。

  1. Docker アカウントを使ってサインイン
  2. Docker Hub 上でのイメージリポジトリの生成
  3. コンテナーイメージのビルド
  4. Docker Hub へのイメージのプッシュ

この実践的なガイドに進んでいくにあたり、確認しておくべき基本的な考え方について、以下に見ておくことにしましょう。

コンテナーイメージ

コンテナーイメージについてよく分かっていないなら、以下のように考えてください。 つまりコンテナーイメージとはパッケージが標準化されたものであり、そこにはアプリケーションの実行に必要なファイル、設定、依存パッケージがすべて含まれているものです。 このようなパッケージは他者への配布や共有を容易にしてくれます。

Docker Hub

Docker イメージを共有したいなら、それを保存しておく場所が必要になります。 ですからレジストリの登場となります。 レジストリにはいろいろなものがありますが、Docker Hub はデフォルトの信頼できるレジストリです。 Docker Hub はご自身のイメージを保存する場所となると同時に、他の人が作ったイメージを検索することができます。 そうやって探し出したイメージは直接実行したり、ご自身のイメージのベースとして利用することもできます。

コンテナーを使った開発 では Docker Hub から入手した以下のイメージを利用しました。 すべては Docker 公式イメージ です。

  • node - Node 環境を提供するものであり、開発作業のベースとして利用します。このイメージは最終イメージのベースとしても利用されます。
  • mysql - MySQL データベースを提供し、todo リストのアイテムを保持します。
  • phpmyadmin - MySQL データベースへのウェブインターフェースである phpMyAdmin を提供します。
  • traefik - Traefik を提供します。これは最新の HTTP リバースプロキシーおよびロードバランサーであり、ルーティングルールに基づいてリクエストを適切なコンテナーに振り分けます。

Docker 公式イメージDocker Verified Publishers, Docker Sponsored Open Source Software イメージの内容をいろいろ探ってみて、実行やビルドができるものにどのようなものがあるのかを確認してみてください。

ためしてみよう

この実践ガイドでは、Docker Hub へのサインインと Docker Hub リポジトリへのイメージプッシュの方法について学びます。

Docker アカウントを使ったサインイン

Docker Hub にイメージをプッシュするには、Docker アカウントを使ってサインインしておくことが必要です。

  1. Docker ダッシュボードを開きます。

  2. 右上隅の Sign in (サインイン) を選びます。

  3. アカウントが未生成の場合はこれを生成して、サインイン手続きを完了させます。

サインインを行えば Sign in (サインイン) ボタンはプロファイルアイコンに変わります。

イメージリポジトリの生成

アカウントを生成していれば、イメージリポジトリを生成することができます。 Git リポジトリというものがソースコードを収納しているのと同じように、イメージリポジトリはコンテナーイメージを保持します。

  1. Docker Hub にアクセスします。

  2. Create repository (リポジトリの生成) を選びます。

  3. Create repository (リポジトリの生成) ページにおいて以下の情報を入力します。

    • Repository name (リポジトリ名) - getting-started-todo-app
    • Short description (簡易な説明) - 簡単な説明文を好きなように記述します。
    • Visibility (可視性) - Public (パブリック) を選ぶことで、開発している todo アプリを他者でもプルできるようにします。
  4. Create (生成) を選んでリポジトリを生成します。

イメージのビルドとプッシュ

リポジトリの準備ができたので、イメージのビルドとプッシュを行っていきます。 重要なこととして、そもそもビルドしたイメージは Node イメージを拡張したものでした。 これはつまり、Node や yarn のインストールや設定などは行う必要がありません。 アプリケーション独自の作業を行うことだけに集中すればよいといいことです。

イメージ/Dockerfile とはなにか?

まだ十分に理解できていない方は、コンテナーイメージというものが、所定のプロセスの実行に必要なものすべてを含んだ単一のパッケージであると考えてください。 今の場合、Node 環境、バックエンドコード、コンパイル済みの React コードが含まれているわけです。

イメージを使ってコンテナーを実行させるマシンでは、アプリケーションを実行することができるわけですが、ビルドの際にはマシンにインストールされている以外のものはまったく不要です。

Dockerfile はテキストベースのスクリプトであり、イメージをどのようにビルドするのかを指示する命令が記述されてます。 作業を簡単に進めるため、以下のリポジトリではあらかじめ Dockerfile を用意しています。


  1. まずはじめに、ローカルマシンに対してクローンを行うか ZIP ファイル をダウンロードします。

    $ git clone https://github.com/docker/getting-started-todo-app
    

    プロジェクトがクローンできたら、クローンによって新たに生成されたディレクトリに移動します。

    $ cd getting-started-todo-app
    
  2. 以下のコマンドを実行してプロジェクトをビルドします。 DOCKER_USERNAME の部分は自身のユーザー名に置き換えます。

    $ docker build -t <DOCKER_USERNAME>/getting-started-todo-app .
    

    たとえば Docker ユーザー名が mobydock であった場合、以下のようにコマンド実行します。

    $ docker build -t mobydock/getting-started-todo-app .
    
  3. ローカルにイメージが生成されたことを確認するため docker image ls コマンドを実行します。

    $ docker image ls
    

    以下のような出力が得られるはずです。

    REPOSITORY                          TAG       IMAGE ID       CREATED          SIZE
    mobydock/getting-started-todo-app   latest    1543656c9290   2 minutes ago    1.12GB
    ...
    
  4. イメージをプッシュのため docker push コマンドを実行します。 DOCKER_USERNAME の部分は自身のユーザー名に置き換えます。

    $ docker push <DOCKER_USERNAME>/getting-started-todo-app
    

    アップロード速度により、プッシュにはある程度の時間がかかります。

  1. Visual Studio Code を開きます。 File (ファイル) メニューにおいて Open Folder (フォルダーを開く) を選びます。 Clone Git Repository (Git リポジトリのクローン) を選んで以下の URL https://github.com/docker/getting-started-todo-app をペーストします。

    リポジトリのクローン方法を示した VS Code のスクリーンショット
  2. Dockerfile 上にて右クリックして、メニュー項目の中から Build Image... (イメージのビルド) を選びます。

    VS Code にて右クリック、"Build Image" メニューを選んだスクリーンショット
  3. ダイアログ画面が表示されるので、名前欄に DOCKER_USERNAME/getting-started-todo-app を入力します。 DOCKER_USERNAME の部分は自身の Docker ユーザー名に置き換えます。

  4. Enter を押すと、ビルド実行するディレクトリにてターミナル画面が開きます。 ビルドが完了したらターミナル画面は閉じてかまいません。

  5. VS Code の Docker Extension を開くために、左側ナビメニュー内の Docker ロゴを選びます。

  6. 生成したイメージを探し出します。 イメージ名称は docker.io/DOCKER_USERNAME/getting-started-todo-app となっているはずです。

  7. イメージを展開して、イメージのタグ (あるいはいくつかあるバージョン) を確認します。 タグ名として latest があるはずです。 このタグはイメージに対して与えられるデフォルト名です。

  8. latest 上で右クリックして Push... (プッシュ) オプションを選びます。

    Docker Extension を使い右クリック目ny-によりイメージプッシュするスクリーンショット
  9. Enter を押して、Docker Hub に対してイメージがプッシュされることを確認します。 アップロード速度により、プッシュにはある程度の時間がかかります。

    アップロードが終了したら、ターミナル画面を閉じてかまいません。


まとめ

これより先に進む前に、もう一度、ここで行った内容を思い起こしてください。 ほんの数分の中で、アプリケーションをパッケージ化したコンテナーイメージをビルドし、それを Docker Hub にプッシュすることができました。

先に進んでいく際には以下のことを覚えておいてください。

  • Docker Hub は信頼できるコンテンツを探し出せる有用なレジストリです。 Docker では Docker 公式イメージ、Docker Verified Publishers、Docker Sponsored Open Source Software から構成される、信頼性の高いさまざまなイメージを提供しています。 それを直接利用するか、あるいは自身のイメージのベースとして利用してください。

  • Docker Hub は独自のアプリケーションを配布するマーケットプレースを提供しています。 アカウント生成やイメージ配布はどなたでも行うことができます。 生成したイメージをパブリックに配布することができると同時に、プライベートリポジトリとすれば承認ユーザーのみがイメージにアクセスできるようになります。

その他のレジストリの利用

Docker Hub はデフォルトのレジストリですが、レジストリは Open Container Initiative によって標準化されており、相互運用が可能となっています。 このことから各企業や組織は独自のプライベートリポジトリを運用することが可能となっています。 信頼性の高いコンテンツは Docker Hub からそのようなプライベートリポジトリにミラーリング (またはコピー) がよく行われています。

次のステップ

イメージのビルドができるようになったので、ここから先は開発者であるあなたがなぜ Docker を学ぶ必要があるのか、日々のタスクにとってどのように役立てることができるのかについて説明していきます。