kzk-casino.com

一人前のITエンジニアを目指して

dockerについて勉強してみた 1 「ダウンロードと基本操作」

dockerについて勉強しようと思い、研修会に参加してきました。
これから何度かに分けて復習がてら書き留めていきたいと思います。

dockerについて

f:id:kzk_casino:20160626133843p:plain

まず、dockerとは何かというと、「オープンソースのコンテナ管理ソフトウェア」と言われます。

Webサーバなどのアプリケーション実行環境を「コンテナ」と呼ばれる技術を利用して
抽象化できるものがdockerです。

実行環境の抽象化というと、ハイパーバイザー型の仮想化を連想する事がこれまでは一般的でしたが、
ハイパーバイザー型の仮想化とコンテナを利用した仮想化ではその特徴に大きな差があります。

コンテナとは、

ホストOS上のカーネル機能を使い、複数のルート・ファイルシステムを実行すること

です。

つまり、コンテナは自分自身のリソース(プロセス・メモリ・デバイス・ネットワークスタック)を持った
ファイルシステムである、と言えます。

ハイパーバイザー型の仮想化と違い、コンテナ自身にゲストOSをインストールする事が不要なので

  • 仮想マシンより軽量
  • 高いポータビリティ性を持つ
  • 必要とするホストOSリソースが少ない

などの利点があります。

f:id:kzk_casino:20160626125258p:plain
いまさら聞けないDocker入門(1):アプリ開発者もインフラ管理者も知っておきたいDockerの基礎知識 - @IT

dockerをインストールする

ものは試しなので、実際に自分のMacにdockerを使用できる環境を作ってみましょう。
#ちなみにdockerはLinuxカーネルの技術を使っているので、OS XWindowsの上では動きません。(β版開発中ですが)


まず、Docker Toolboxをインストールします。
Docker Toolbox | Docker

すると、アプリケーション一覧に「Docker Quickstart Terminal」というものが出てくると思いますので
そちらを起動してください。
f:id:kzk_casino:20160626130743p:plain

ターミナルが立ち上がってきます。

f:id:kzk_casino:20160626131221p:plain

今裏では、Virtual Boxを利用してLinux仮想マシンを立ち上げ、その上にdockerホストが起動している形になります。

また、Docker Toolboxをインストールした際に様々なdockerコマンドも使用できるようになっております。

dockerを触ってみる

ではdockerコマンドを実行して、簡単なdockerの操作を行ってみたいと思います。

dockerのバージョンを確認

docker versionコマンドでバージョン確認を行えます。

$ docker version
Client:
 Version:      1.11.2
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   b9f10c9
 Built:        Wed Jun  1 21:20:08 2016
 OS/Arch:      darwin/amd64

Server:
 Version:      1.11.2
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   b9f10c9
 Built:        Wed Jun  1 21:20:08 2016
 OS/Arch:      linux/amd64

dockerはクライアント・サーバ型で稼働しているので、クライアント側とサーバ側のバージョンが確認できます。
この辺りはもう少し後で整理したいと思います。

docker コンテナの実行

docker run コマンドでコンテナを実行できます。
まず最初に簡単なhello worldを返すだけのコンテナを実行してみます。

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world

a9d36faac0fe: Pull complete
Digest: sha256:e52be8ffeeb1f374f440893189cd32f44cb166650e7ab185fa7735b7dc48d619
Status: Downloaded newer image for hello-world:latest

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

"Unable to find image ~"というメッセージが出ていますね。
これは、ローカルに”hello-world”というイメージが見つからないから、docker公式のイメージをダウンロードするよーという意味です。
コンテナを実行するには、イメージというものが必要なのですが、それがローカルにないので出た警告です。
イメージについては次回整理したいと思います。

dockerコンテナの確認

docker psコマンドで稼働しているコンテナ、停止したコンテナを確認できます。

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
b89551b6e44d        hello-world         "/hello"            5 minutes ago       Exited (0) 5 minutes ago                       naughty_yalow

稼働しているコンテナを表示するには、"docker ps"コマンドを使い、オプション"-a"を指定すると、停止したコンテナ含めすべてのコンテナを表示してくれます。

先ほど起動したhello-worldはすでに停止していることがわかります。
dockerのコンテナは、適切な引数を渡して起動しない限り、一度起動して指定された処理を実行するとすぐに停止してしまうという特徴があります。

docker イメージの確認

docker imagesコマンドでローカルに所有しているdocker imageを表示できます。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              693bce725149        2 weeks ago         967 B

先ほどダウンロードしたhello-worldイメージが表示されます。

dockerコンテナの削除

docker rm コマンドでdockerコンテナを削除することができます。
docker ps コマンドでコンテナIDを確認してから、そのIDを指定して削除します。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
b89551b6e44d        hello-world         "/hello"            10 minutes ago      Exited (0) 10 minutes ago                       naughty_yalow
$ docker rm b89551b6e44d
b89551b6e44d
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

コンテナが削除されたことがわかります。
起動しているコンテナを削除することは、オプション無しではできないので、一旦削除したいコンテナはdocker stopで停止させてから削除する方が安全でしょう。

dockerイメージの削除

ダウンロードしたイメージを削除するにはdocker rmiコマンドを使用します。
イメージIDを調べてから実行する必要があります。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              693bce725149        2 weeks ago         967 B
$ docker rmi 693bce725149
Untagged: hello-world:latest
Deleted: sha256:693bce72514984f01f217e878d143162b5f4c1b83b018e7e6dc7394f055e7cd5
Deleted: sha256:73136b8e0c4d588d7af58be522344e3cd4d54931a93d9b489d7063e23d30361e
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

まとめ

ここまでで、dockerの概要からコンテナのライフサイクルの基礎までをまとめてみました。

次は
dockerイメージについてと、より実践的なコンテナの活用について整理していきたいと思います。