Docker(ドッカー)を勉強して説明してみた

Googleで「Docker」と検索し、表示された10件から分かったことをまとめました。その10件以外のページは(基本的には)読んでいません。なお、Dockerを使用するための基礎知識として不要と考えた内容は、ここでは省略しました。


この記事を書くために検索したときは、以下の10件が表示されていました。

  1. Docker – Build, Ship, and Run Any App, Anywhere
  2. Dockerのすべてが5分でわかるまとめ!(コマンド一覧付き) – paiza開発日誌
  3. Docker – ウィキペディア
  4. 超入門Docker:第1回 Dockerとは – @IT
  5. Dockerについて基本から最近追加された機能までまとめ – Qiita
  6. Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~ – SlideShare
  7. だいたい10分でざっくり押さえるDockerの基本 – WPJ
  8. GitHub – moby/moby: Moby Project – a collaborative project for the …
  9. Docker Compose — Docker-docs-ja 1.13.RC ドキュメント
  10. Docker (@Docker) | Twitter

では、始めましょう。


Dockerは、任意のアプリケーションのビルド、実行、デプロイを簡単に行うためのアプリケーションです。Linux、Windows、Mac上で動作し、Docker Inc.が開発しています。

Dockerコンテナ(仮想環境)

Dockerでは、あれこれ設定して、「Dockerコンテナ」と呼ばれる仮想環境を作成し、Dockerコンテナ内で任意のアプリケーションを動作させます。基本的には、1プロセスごとに、1つのDockerコンテナを作成し、アプリケーションを実行します。Dockerコンテナ内で動作するアプリケーションは、他のDockerコンテナやホストOSから(ある程度)独立して動作します。

Dockerと似たようなアプリケーションに、Oracle VM VirtualBox(https://www.virtualbox.org/)やVMware(https://www.vmware.com/)があります。これは、OSの上に「コンピュータ」(以下、仮想マシン)を作成するアプリケーションです。仮想マシンには、任意のOSをインストールする必要があります。

一方、Dockerには、改めてOSをインストールできません。Dockerコンテナで使用できるアプリケーションは、Dockerコンテナの種類によります。

Dockerの種類 Dockerコンテナの種類 使用できるアプリケーションの種類
Docker for Windows

Docker Toolbox

 

Linuxコンテナ Linuxアプリケーション
Windowsコンテナ Windowsアプリケーション
Docker Engine

Docker Client

Windows Serverコンテナ Windowsアプリケーション
Docker Engine

Docker Client

Hyper-Vコンテナ Windowsアプリケーション

使用できるDockerコンテナの種類は、Dockerの種類によって異なります。Dockerを試してみる範囲では、Linuxコンテナを作ることになると思います。

Dockerコンテナの作成

Dockerコンテナを作成する手順は以下のとおりです。手順2~3は、既存のDockerイメージを利用する場合は省略できます。

  1. Dockerをインストールする。
  2. テキストエディタでDockerfile(テキストファイル)を作成する。
  3. DockerfileからDockerイメージを生成する。
  4. DockerイメージをDocker Engineで実行する。
    仮想環境が実行されます。実行中の仮想環境のことを、Dockerコンテナと呼びます。

DockerfileからDockerイメージを生成したり、Dockerイメージを実行するには、「Dockerサーバー」を操作します。ユーザーがDockerサーバーを操作するときに使用するコマンドおよびGUIツールは、「Dockerクライアント」と呼ばれます。

Dockerを使用するためのツール

Dockerは複数のツールを組み合わせて使用します。主なツールは以下のとおりです。

ツール 種別 機能
Docker Toolbox インストーラ WindowsおよびMacでDockerを利用するためのインストーラです。VirtualBoxの仮想マシン上にLinuxをインストールし、そのLinuxでDockerサーバーを動作させることができます。
Docker for Mac インストーラ MacでDockerを利用するためのインストーラです。VirtualBoxは使用しません。
Docker for Windows インストーラ WindowsでDockerを利用するためのインストーラです。VirtualBoxは使用しません。
Docker Engine Docker本体 Dockerイメージ、Dockerコンテナを管理できます。
Docker Hub レジストリ Dockerイメージが保存されているサービスです。多くの「Dockerイメージ」が公開されており、誰でも自由に利用できます。
Kitematic GUIクライアント DockerサーバーをGUIで操作できます。

Dockerfileとは

Dockerfileは、次に説明するDockerイメージをカスタマイズするスクリプト機能です。Docker Hubなどのレジストリで配布されているDockerイメージをベースに、自分に都合が良いように追加アプリケーションをインストールしたり、必要なファイルをホストOSからコピーする場合に使用します。

追加でアプリケーションをインストールできることがDockerの良いところのひとつです。目的のアプリケーションを動作させるために必要なアプリケーションをすべてインストールしても、ホストOSには影響がありません。ただし、Dockerイメージを作成する際に、毎回アプリケーションをインストールすることになり、アプリケーションが多いと、その分の時間も必要になりますので、注意してください。

もちろん、一般に配布されているDockerイメージだけでなく過去に自分で作成したDockerイメージをベースにすることもできます。

Dockerfileの記述書式については、Dockerfile referenceを参照してください。ここでは、簡単なDockerfileの例(Dockerfile referenceから引用)を紹介します。

FROM busybox
ENV foo /bar
WORKDIR ${foo} # WORKDIR /bar
ADD . $foo # ADD . /bar
COPY \$foo /quux # COPY $foo /quux
  • Dockerイメージ「busybox」をベースにする。
  • ローカルのファイルを「/bar」にコピーする。
  • ローカルの「/bar」を「/quux」にコピーする。

Dockerイメージとは

Dockerイメージは、Dockerコンテナを作成するために必要なファイルです。Docker Hubなどのレジストリで配布されているDockerイメージもありますし、既存のDockerイメージをベースに、自分に都合が良いように追加アプリケーションをインストールしたり、必要なファイルをホストOSからコピーしたりできます。Dockerイメージを作成するには、Dockerfileをビルドします。

Dockerの実行

Dockerクライアントを利用して、Dockerサーバーを操作します。ここでは、コマンドを入力して操作する方法を説明します。

Linuxの場合は、ターミナルを起動して、コマンドを入力します。また、WindowsおよびMacで、Docker Toolboxをインストールした場合は、Docker Quickstart Terminalを起動して、以下のコマンドを入力します。以降、コマンドを入力する画面を「ローカルターミナル」と呼びます。

$ docker run hello-world

これで、「hello-world」という名前のDockerイメージからDockerコンテナが作成され、アプリケーションが実行されます。

ここで、以下のコマンドを入力すると、ubuntuの/bin/bashが起動し、Dockerコンテナのファイルを操作できるようになります。

$ docker run -it ubuntu /bin/bash

実行中のDockerコンテナの一覧は、ローカルターミナルで以下のように入力すると確認できます。

$ docker ps

また、Dockerコンテナを強制終了するには、ローカルターミナルで以下のように入力します。

$ docker kill hello-world

終了したDockerコンテナは削除する必要があります。これもローカルターミナルで実行します。

$ docker rm hello-world

Dockerコンテナで作成したデータ

Dockerコンテナを終了すると、Dockerコンテナで作成したデータは削除されます。データを残すには、DockerコンテナからホストOSのディスクにアクセスする「ボリューム」と呼ばれる機能を使用します。ボリュームは、DockerfileでVOLUMEを指定するか、Docker runでDockerコンテナを作成する際に-vオプションを付与すると、使用できます。

Dockerのネットワーク

Dockerコンテナは、仮想ネットワークを利用して他のDockerコンテナやホストOSと通信できます。Dockerコンテナから使用できるネットワークを確認するは、ローカルターミナルで以下のように入力します。

$ docker network ls
ネットワーク名 役割
bridge Dockerコンテナ同士、またはDockerコンテナとホストOS間の通信に使用します。
host DockerコンテナとホストOS間の通信に使用します。
none ネットワークを使用しません。

Dockerコンテナを作成する際に–netオプションを付与すると、Dockerコンテナが利用するネットワークを指定できます。

Docker Compose

Dockerでは、基本的には、1プロセスごとに、1つのDockerコンテナを作成し、アプリケーションを実行します。しかし、アプリケーションによっては、複数のアプリケーションが連携して動作する場合もあります。そのような場合は、Docker Composeを作成すると、1コマンドで複数のDockerコンテナを作成でき、便利です。

Moby project

Mobyは、Mobyコンポーネントを組み合わせて、必要なシステムを組み立てることを目的にしたオープンソースプロジェクトです。Dockerによって作成されており、今後、DockerはMobyを使用して組み立てられる予定です。

1 Trackback / Pingback

  1. WEB+DB PRESS (ウェブDBプレス) Vol.100「第2章 自然言語処理」(P.24)をやってみた – 有限会社ビートラスト

Comments are closed.