Skip to content

Dockerイメージの構築

コンテナ化された世界への旅を始めようとしているなら、最初に出会うのはDockerでしょう。このチュートリアルでは、Docker、Dockerfiles、Red Hat Quayコンテナレジストリで遊ぶためのツールを提供することで、迅速なスタートを切ることができます。

前提条件

見積もり時間

このチュートリアルを完了するには、約45分かかります。

Docker

まず最初に、Docker をインストールします。いくつかの方法がありますが、最初で最良の方法は、メインのDocker documentation siteに行くことです。最新バージョンのDockerを使用し、メンテナンスするようにし、特定のオペレーティングシステム用にインストールしてください。

このチュートリアルを書いている時点では、Dockerには主に2つのエディションがあります。ここでは、それぞれのバージョンについて少し触れてみたいと思います。Docker Community Edition (docker-ce)とDocker Enterprise Edition (docker-ee)です。どちらも利点があり、異なるユースケースを対象としています。このチュートリアルを一通り終えたら、docker-cedocker-eeのどちらが自分に合っているかを再検討することを強くお勧めします。

以下の手順とコマンドは、どちらのバージョンでも動作するはずですので、進めていきましょう。

Docker CLI

dockerのインストールが完了したら、コマンドプロンプトを立ち上げます。インストール中に、ドキュメントで実行を求められることがあるサニティチェックがあります。ここでは、すべてが期待通りに動作していることを確認するために、再度以下を実行してみます。

以下のような出力が表示されるはずです。(もしエラーが出たり、以下のようなものではない場合は、インストールが正しく設定されていないので、先に進む前に解決する必要があります)。

おめでとうございます。これでdockerインスタンスが動き出しました。早速、遊んでみましょう。

次に試していただきたいのは、以下のコマンドです。インターネットのアクセス状況によっては、実行に少し時間がかかるかもしれませんが、幸いにもあなたのマシンにキャッシュされますので、その後、少しずつ見直していきましょう。

これが実行されると、何が起こっているのかを説明しましょう。dockerコマンドを実行すると。公開されているDockerハブから最新のコピーを取得し、それを /bin/bash というシェルで実行することをDockerに伝えています。 このコマンドはインターネットに接続し、あなたが持っているバージョンを確認し、キャッシュイメージのSHAと照合し、もし持っていなければDocker Hubからダウンロードします。 わかりやすくするために、-itinteractiveとして実行し、コンテナのttyを作成します。 これで以下のように表示されるはずです。

おめでとうございます。これで、2つ目のDockerコンテナが起動しました。先に進んで exit と入力し、もう一度 docker コマンドを実行してください。

ルートが @2de726a5fcb8@583c6cec5d41 で異なることに気付きましたか?これは、この方法でコンテナをスピンアップすると、それらがエフェメラルになるからです。エフェメラルとは、実行している間だけ生き続けるという意味で、終了するとすぐに消えてしまいます。長寿命のコンテナを作る方法は、もう少し後にご紹介します。

それでは、コンテナの中でちょっと遊んでみましょう。CentOSマシンでは、yumがありますので、何かをインストールしてみましょう。

これで、コンテナ内で vim を実行できるようになりました!ぜひ試してみてください。

もし、vimを終了する方法がわからない場合は、:qと入力してください。と入力すると、コマンドプロンプトが再び表示されます。

ここでもう一度 exit と入力してください。

念のために言っておきますが、コンテナがなくなると、その中のすべての変更も消えてしまいます。

Dockerfile

さて、コンテナを起動して変更を加えることはできましたが、変更を維持するにはどうすればよいのでしょうか?いくつかの方法がありますので、ご自身で調べてみることをお勧めします。しかし、ここでは最も一般的な方法である、Dockerfileを使った方法を説明します。

コマンドプロンプトに戻って、新しいディレクトリを作り、お好みの$EDITORを使って、Dockerfileという新しいファイルを開いて、ディレクトリを変更します。

ここではDockerfilesのハイライトを紹介しますが、そのパワーに触れるためには、Best practices for writing Dockerfilesのドキュメントに目を通すことを強くお勧めします。

あなたのDockerfileに、以下のように書き出します。

ファイルを保存し、ファイル名が Dockerfile であることを確認してください。

前の4行の意味を説明しましょう。

  • FROM : centos:latest のDockerイメージからレイヤーを作成します。
  • RUN : コンテナに vim をインストールし、/vim というディレクトリを作成してコンテナをビルドします。
  • WORKDIR : コンテナの作業ディレクトリを通知します。
  • ENTRYPOINT : コンテナの起動時に実行されるコマンドで、上記のように /bin/bash の代わりに実行されます。

では、これをローカルにビルドしてみましょう。Dockerfileがあるディレクトリで以下を実行して、これが完成するのを見てみましょう。 を実行してみましょう。

注意:ハッシュが異なる eda2652aa25e になっているはずなので、その点に注意してください。

おめでとうございます。最初の Dockerfile とカスタマイズされた Docker コンテナを構築しました。

では、実際に動かしてみましょう。次のコマンドを実行してください。

すると、vim が起動するのがわかるはずです!そして、再びコマンドプロンプトが表示されます。これは何度でも実行することができ、毎回新しい vim のインスタンスが作成されますが、コンテナなので実際には何も保存できませんし、何も読むことができませんよね?これを修正しましょう。

ローカルディレクトリをコンテナにマウントするために、bind mountとvolumeを追加しましょう。マウントとボリュームについてもっと詳しく知りたい方は、Docker documentation about how to use volumesから始めることをお勧めします。難しい概念の1つですが、時間をかける価値はあります。

コマンドラインで hello という名前のファイルを作成し、その中に hello world という言葉を保存します。

それでは、ローカルディレクトリをコンテナにマウントしてみましょう。

「vim」の中で、「:e hello」と入力します。すると、hello worldと表示されるはずです。ご覧のように、ホストマシンで作成したファイルを開き、vimの入ったコンテナを作成し、ディレクトリをマウントして、ファイルを開くことができました!

よろしければ、iと入力して何かを打ち出してみてください。そして、終わったら :wq と入力してください。コンテナが終了して、コマンドラインで次のように入力できるようになります。

:明らかに、I added this line from my containerは私が書いたものです。あなたが書いたものは何でも表示されます。

すばらしい!では、このコンテナを世界に向けて発信する方法を考えてみましょう。

コンテナ登録

Red Hatが提供しているQuay.ioというものを紹介しましょう。これはクラウドベースでオープンソースのパブリックコンテナレジストリで、いくつかの優れた機能が組み込まれています。必要であれば自分でホストすることもできますが、この例では公開されているものを使用します。

まず、Quay.ioにアクセスし、アカウントを作成します。

では、ログインして、環境を整えましょう。

私のユーザ名は jjasghar です。ユーザー名をあなたのものに変更してください。素晴らしい!これでログインできました。

コンテナを作成してQuayにプッシュしたい場合は、実はとても簡単です。コマンドを見せてから説明しましょう。

ご覧の通り、先ほどと同じようにコンテナを構築しましたが、"タグ "として -t quay.io/jjasghar/vim:latest を追加しています。dockerには、別のレジストリに送り、次にデフォルトのDocker Hubに送り、そして_my_namespaceに送ることを伝えます。

ビルドが終わったら、docker push quay.io/jjasghar/vim:latestとするだけで、ビルドが完了します。(デフォルトでは、最初のコンテナをQuay.ioにプッシュする際には、それをパブリックにしなければなりません)。

https://quay.io/repository/jjasghar/vim?tab=settingsのウェブサイトをチェックして(jjasgharをあなたの名前空間に置き換えてください)、__Make public__をクリックします。これで、インターネットに接続できるあらゆるマシンにプルすることができます。

次に、以下のコマンドを実行して、コンテナをプルダウンしてみましょう。

成功です!これで、コンテナを作成してQuay.ioに公開する方法がわかりました。

まとめ

ここまで一緒に見ていただきありがとうございました。一般的な docker コマンドや Dockerfile の動作方法、そして最後にコンテナレジストリの使い方を理解していただけたと思います。ご質問やご意見がありましたら、Twitterで@jjasgharまでお気軽にお問い合わせください。

さて、このチュートリアルを終えて、Dockerとコンテナレジストリの使い方がわかったところで、次は何をすればいいのでしょうか?私たちのKubernetes learning pathを通過することで、コンテナやオーケストレーションに関する個人的な学習をさらに進めることができます。もしDockerをもう少し試してみたいという方は、以下のチュートリアルを試してみてください。