第2回 Dockerを使ってみる:超入門Docker
Dockerの概要を知るための超入門。今回はDocker for WindowsをインストールしてDockerを使ってみる手順を紹介する。
本入門連載では、システム管理者やシステムエンジニアの方々を主な対象として、IT業界でよく使われる技術や概念、サービスなどの解説をコンパクトにまとめておく。
- 第1回「Dockerとは」
- 第2回「Dockerを使ってみる」(本記事)
- 第3回「Dockerコマンドの使い方」
- 第4回「Windowsプログラムを実行するWindowsコンテナ」
前回はDocketの概念や基本的な機能について説明した。今回はWindows OS上にDocker環境をインストールして、基本的な動作確認をしてみよう。
Docker for WindowsをインストールしてLinuxコンテナを実行する
Dockerは、もともとはLinuxのコンテナ技術をベースとしたプロセス実行環境である。そのため、Dockerを動作させるためにはLinux OS(のコンテナ機能)が必要となる。Dockerを利用するために何らかのLinuxディストリビューションをインストールしたマシンを用意してもよいが、Docker for Windowsを使えばWindows OS上でもDocker環境を構築できる。
- 「Docker for Windows」(Docker.com)
Docker for Windowsの使用例
Docker for Windowsを使うと、Windows OS上でもLinuxコンテナを実行できる(モードを切り替えればWindowsコンテナの管理も可能)。なおDockerはコマンドラインのツールで管理するのが基本だが、Kitematicというアドオン(画面左上)を使うと、GUIで操作することもできる。
これはWindows 10上でLinuxコンテナを実行できるようにするためのソフトウェアである。Windows 10(64bit版、Proエディション以上が必要)の仮想化環境「Hyper-V」上にLinuxコンテナ実行用の軽量OS(MobyLinux)をインストールして、その上でLinuxコンテナを実行する。Windows標準のHyper-Vを使うため、Windowsユーザーには操作や管理が簡単になるし、Hyper-Vを使う他の開発ツール(Visual Studioなど)とも親和性が高い。開発やテスト環境ではこれはありがたいだろう。
このツールの概要やインストール方法についてはここでは詳しく述べないので、以下の記事を参照していただきたい。
なお、Windows 10やWindows Server 2016でサポートされている「Windowsコンテナ」は、「Linuxコンテナ」とは異なるものである。これについては第4回(2017/02/02公開予定)で紹介する。
Docker操作の基本
Dockerはサーバ(コンテナ実行用のエンジン)とクライアント(管理ツール)に分かれたツールである。
Docker for Windowsをインストールすると、docker.exeというコマンドがインストールされる。Dockerの管理は、基本的にはこのコマンドに引数を付けて実行することによって行う。例えば「docker version」というコマンドラインを実行すると、インストールされているDocker環境のバージョン情報などを得られる。
C:\>docker version …Dockerのバージョンの確認。Dockerが正常にインストールされ起動されているかどうかをチェックしてみる
Client:
Version: 1.13.0 …Dockerクライアントのバージョン
API version: 1.25
Go version: go1.7.3
Git commit: 49bf474
Built: Tue Jan 17 21:19:34 2017
OS/Arch: windows/amd64
Server:
Version: 1.13.0 …Dockerサーバのバージョン
API version: 1.25 (minimum version 1.12)
Go version: go1.7.3
Git commit: 49bf474
Built: Wed Jan 18 16:20:26 2017
OS/Arch: linux/amd64 …Linuxコンテナがサポートされている
Experimental: true
C:\>
Dockerを使った開発/実行手順
docker.exeコマンドを使ったDockerの利用手順は大体次のようになる。
最初に「docker images」コマンドで利用できるイメージを確認し、不足していたら「docker search」「docker pull」コマンドなどでDockerレジストリから必要なイメージを入手したり、Dockerfileというスクリプトファイルと「docker build」コマンドで新しいイメージを構築したりする。
Dockerイメージが用意できたら、「docker run」コマンドで起動し、「docker ps」コマンドで実行中のコンテナを確認する。コンテナの実行を一時的に停止したり、強制的に終了させたりもできる。Dockerのコンテナは独立したネットワークを持つプロセスとして動作するため、外部と通信させたければ、「docker port」コマンドコマンドなどで外部からもアクセスできるように、ネットワークのポートフォワードの設定を行う。
一度実行したコンテナは終了後もイメージとして残っているので次回は素早く起動できるし、「docker commit」コマンドを実行すれば新しいイメージとして保存しておくことができる。残っているディスクイメージを完全に削除したい場合は「docker rm」コマンドで削除する。Dockerイメージそのものを削除したい場合は「docker rmi」コマンドを実行する。
hello-worldコンテナを実行してみる
まずはDockerがどのようなものかを知るために、公式のリポジトリから「hello-world」というイメージをダウンロードして実行してみよう。
C:\>docker run hello-world …hello-worldコンテナの起動
Unable to find image 'hello-world:latest' locally …このコンテナはまだローカルに存在しないので自動ダウンロードされる
latest: Pulling from library/hello-world 78445dd45222: Pull complete
Digest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7
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.
…(以下省略。Dockerの使い方などが表示されている)…
C:\>docker images …イメージの確認
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 48b5124b2768 12 days ago 1.84 kB …ダウンロードされたイメージ
C:\>docker ps - …実行が終了したコンテナの情報を確認する
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3a8c2d45dfb1 hello-world "/hello" Less than a second ago Exited (0) 12 seconds ago practical_visvesvaraya …実行したコンテナ。既にExited(終了済み)状態
C:\>
「docker run hello-world」でコンテナを実行しようとしている時点では、このイメージはローカルにはないので、実行に先立って自動的にダウンロードされる。一度ダウンロードしておけば以後はローカルから直接起動できる。ダウンロード済みのイメージは「docker images」コマンドで確認できる。
hello-worldは、実行すると「Hello from Docker! 〜〜」というメッセージを表示して、すぐ終了するだけの簡単なコンテナである。
コンテナが実行中か、もしくは実行が終了したかどうかは、「docker ps」コマンドで確認できる(終了したプロセスは-aを付けないと表示されない)。
インタラクティブに使ってみる
次はbashシェルが入っているコンテナを起動して、bashをインタラクティブに実行してみよう。runコマンドに「-it」オプションを付けると、コンテナ内のプログラム(シェル)をインタラクティブに利用できる。
C:\>docker pull bash …明示的にイメージをダウンロードさせてみる
Using default tag: latest
latest: Pulling from library/bash
0a8490d0dfd3: Pull complete
cc8c264c5315: Pull complete
Digest: sha256:15fe4cc4fc9911ad4b9f6d3c7edd88ddd079e69b90dc7c2c156454d9a402d04b
Status: Downloaded newer image for bash:latest
C:\>docker images …ダウンロードしたイメージを確認する
REPOSITORY TAG IMAGE ID CREATED SIZE
bash latest 4da20a356582 33 hours ago 12.2 MB …サイズは12MBしかないため、非常に素早く起動できる
hello-world latest 48b5124b2768 12 days ago 1.84 kB
C:\>docker run -it bash …bashコンテナをインタラクティブに実行させてみる
bash-4.4# ps …すぐに起動する。psコマンドでコンテナ内のプロセスを確認してみる
PID USER TIME COMMAND
1 root 0:00 bash
8 root 0:00 ps …このコンテナ内にはプロセスは2つしかない。他のコンテナやホストからは隔離されている
bash-4.4# cat /etc/os-release …Linuxバージョンを確認してみる
NAME="Alpine Linux" …このbashはAlpine Linux 3.5上で動作している
ID=alpine
VERSION_ID=3.5.0
PRETTY_NAME="Alpine Linux v3.5"
HOME_URL="http://alpinelinux.org"
BUG_REPORT_URL="http://bugs.alpinelinux.org"
bash-4.4# exit …コンテナを終了させる
exit
C:\>
今回はDockerの簡単な使い方を紹介した。Dockerコンテナを実行する方法は、Hyper-Vのような仮想環境で仮想マシンを起動するのと比較すると非常に簡単である。ローカルのコマンドを起動するのと変わらない手順や(必要なリソースなどの)コストでコンテナを実行できる。
次回はもう少し進んだDockerの操作方法を紹介する。
→第3回「Dockerコマンドの使い方」へ
Copyright© Digital Advantage Corp. All Rights Reserved.