Chapter01 What is Docker?

はじめに

ここではインストールされたDockerが正しく動作するか、Hello Worldの文字を表示させることで確認します。

DockerでHello Worldを実行する

まずはDocker HubからDockerイメージを取得するためにログインを行います。

➜ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: xxxxxxxxxxxxxxx
Password: xxxxxxxxxxxxxxx
Login Succeeded

下記のコマンドでhello-worldイメージをdocker runで実行します。docker runは、コンテナを作成し、実行するコマンドです。何やら色々と表示されれば、問題なく動作していることが確認できます。

➜ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete 
Digest: sha256:d58e752213a51785838f9eed2b7a498ffa1cb3aa7f946dda11af39286c3db9a9
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

和訳するとこのような感じのメッセージになります。

この一覧の作業でDockerが行ったことを確認していきます。まず、Dockerクライアント(ローカルPCからのコマンド)がDockerデーモンにhello-worldのイメージを探すように指示します。Dockerデーモンはローカル環境にhello-worldのイメージがないので、Docker HubというDocker社がイメージを公開しているところに探しに行き、hello-world:latestarrow-up-rightのイメージを取得します。Dockerデーモンはそのhello-world:latestのイメージをもとにコンテナを構築し、デフォルトコマンドであるこの文字の出力を行っています。イメージがローカルにある場合は、Docker Hubに探しにいくのではなく、ローカルのイメージを利用します。

docker runは、イメージを取得するdocker pull、イメージからコンテナを作成するdocker create、 コンテナを起動するdocker startの3つのコマンドを1つにまとめたものです。そのため、docker runを使わなくても、この3つのコマンドを実行すれば同じことができます。

Ubuntuコンテナを構築する

野心的なことを試すにはUbuntuのコンテナを実行してみようと、ありますのでやってみましょう。docker runでubuntuのイメージを指定し、実行します。先程と同じように、ローカルにはイメージがないので、Docker Hubに探しにいき、Ubuntuのイメージarrow-up-rightを取得し、デフォルトコマンドに指定されているbashを実行しています。-itは、オプションでstdinという入力チャネルを開け(-i)、レイアウトがキレイに表示(-t)されるようにするものです。

Dockerイメージとはコンテナの実行に必要はファイルをまとめたシステムみたいなものです。Ubuntuのこのイメージであれば、a4a2a29f9ba4127c9761dcbad13bf203e9054039240d2e0bの4つのイメージレイヤーで構成されています。何らかの変更が加わると新たなイメージレイヤーが作られます。

単純にbashが使えるかどうを確認するため、バージョンの確認をしてみます。

docker psで起動しているコンテナの状態を確認します。STATUSUpになっているので起動中であることも確認できます。

コンテナから抜け出すときはexitで抜けることができます。

Dockerが正しくインストールされているかどうかの確認を通じて、Dokerを動かしてみました。Dockerではイメージからコンテナを構築することで、環境の統一を図り、イメージが更新されたら、そのイメージを使ってコンテナを構築することで、複数の環境でも同一に動作できるような仕組みを作ることが可能になります。

不要なコンテナとイメージを削除してみます。停止しているコンテナの確認はdocker ps -aで行い、コンテナの削除はdocker rm <CONTAINER ID> ...で実行します。

不要なイメージの削除はdocker rmiです。rmではなく、rmiの点に注意。docker imagesで取得しているイメージの一覧が確認できます。

イメージの削除はdocker rmi <IMAGE ID> ...で実行します。

Webサーバーとしてコンテナを構築する

次はWebサーバーとして有名なNginxのイメージarrow-up-rightを使って、WebサーバーとしてDockerコンテナを起動してみます。--nameでコンテナに名前を付けることができます。-pはポート80番でブラウザからHTTPでのアクセスを行うために記載します。<ホスト側のポート>:<コンテナ側のポート>として記述します。コロン前のホスト側のポートが外部に公開するポート番号で、コロン後ろはコンテナにマッピングするポート番号です。80:80というのは、コンテナを起動している80番ポートにアクセスすれば、コンテナ内部の80番ポートで待っているNginxに通信できます。

これを実行すると、コンテナを起動している手元のPCがWEBサーバーとして機能するようになります。-dをつけるとデタッチドモードでコンテナを起動できますが、ここでは特に必要ないので、オプションはつけません。デタッチドモード出ない場合、フォアグラウンドでの実行になるので、コマンドラインが専有されて、新たな操作は別のコマンドラインのウインドウから行うことになります。

http://www.localhost:80でブラウザからアクセスすると、Nginxが起動していることがわかります。

別のターミナルを立ち上げて、コンテナの状態を確認します。PORTSの部分では、80番ポートを転送し、NAMESではwebserverという名前のサーバーが機能していることがわかります。

WebサーバーもDockerイメージを利用すれば簡単に構築することができます。コンテナを停止して、不要なコンテナとイメージを削除しておきます。コンテナを停止するには、docker stop <CONTAINER ID>で実行できます。STATUSをみるとExitedになっていることが確認できます。

コンテナを停止したら、コンテナとイメージを削除しておきます。

以上がDockerの基本的な使い方のイメージでした。次のチャプターでは、Dockerコマンドに焦点をあてて、使い方をまとめていきます。

Last updated