連載
» 2017年02月01日 05時00分 UPDATE

超入門Docker:第3回 Dockerコマンドの使い方

Dockerの概要を知るための超入門。今回はDockerコマンドを使ってイメージやコンテナを管理してみる。

[打越浩幸,デジタルアドバンテージ]
「超入門Docker」のインデックス

連載目次

本入門連載では、システム管理者やシステムエンジニアの方々を主な対象として、IT業界でよく使われる技術や概念、サービスなどの解説をコンパクトにまとめておく。



 前回はDocker for Windowsを例に挙げてDockerの基本的な使い方を説明した。今回は、dockerコマンドの使い方についてまとめておく。

 dockerコマンドで利用できるサブコマンドには次のようなものがある。

分類 機能概要
イメージ管理 コンテナとして利用するイメージの構築や管理、設定などを行う
コンテナ管理 コンテナの起動や停止、再開、削除などを行う
レジストリ管理 Docker Hubなどに接続してコンテナイメージを取得したり、操作したりする
ネットワーク管理 コンテナのネットワーク設定などを操作する
システム管理 Dockerシステム全体を管理する
ボリューム管理 コンテナで使用するストレージを管理する
クラスター管理 Docker Swarmクラスターやノードを管理する
Dockerコマンドの主な用途

 以下では、最低限知っておきたい主要なコマンドについて見ていく。

Dockerイメージの管理

 Dockerコンテナを起動するためには、元となるイメージが必要となる。そのイメージを準備したり、実行が終了したイメージを削除したり、新しいイメージを作成したりするのがこのイメージ管理コマンドである。

■docker images
 docker imagesはローカル(リポジトリという) に保存されているDockerイメージの一覧を調べるためのコマンドである。

■docker inspect
 docker inspectはイメージファイルの詳細情報を表示させるためのコマンドである。コンテナ起動時に何を実行するようになっているか、などが分かる。

■docker history
 docker historyはイメージのレイヤー構成などを表示するコマンドである(レイヤーについては第1回の「Dockerイメージの履歴管理」を参照)。

■docker commit
 現在のイメージファイルをベースにして、新しいイメージを作成するためのコマンドである。新イメージとして保存しておくと、カスタマイズや設定変更などを行ったコンテナを以後、簡単に起動できるようになる。

■docker build
 Dockerfileに基づいて、新しいイメージを作成するためのコマンドである。詳細は後述の「Dockerイメージを作成する」の節を参照のこと。

■docker rmi
 docker rmiは不要になったローカルのイメージを削除するコマンドである。

Dockerコンテナの実行管理

 Dockerイメージが用意できたら、docker runでコンテナとして実行する。以下に主な実行管理のためのコマンドを示しておく。

■docker run
 docker runは指定したイメージを起動するためのコマンドである。実際にはイメージを取得するための「docker pull」や、イメージから新しいコンテナを作成する「docker create」、コンテナ中でプログラムを起動する「docker start」などのコマンドを合成したものである。起動時にCPUの使用率や使用メモリ量などを制限したり、バックグラウンド実行させたりなど、さまざまなオプションを指定できる。

 なおデフォルトでは、コンテナは実行が終了しても残っているので(実行結果などを確認できるようにするため、すぐには削除されない)、不要ならdocker rmでクリーンアップする。

■docker start/stop/pause/kill/restart/rm
 これらのコマンドはコンテナの起動や終了、一時停止、終了、再開、削除などを制御するために使われる。

■docker ps/stats/top
 これらのコマンドは、コンテナ実行状況などを確認するために使われる。

Dockerリポジトリを操作する

■docker pull
 docker pullはDockerのレジストリ(イメージの集積所。後述)などからイメージをダウンロードしてくるために使われる。

■docker search
 docker pullはDockerのレジストリなどからイメージを検索するために使われる。

 以下、dockerコマンドの使用例を示しておく。

C:\>docker search ruby …「ruby」イメージの検索
NAME                         DESCRIPTION                                     STARS  OFFICIAL  AUTOMATED
ruby                         Ruby is a dynamic, reflective, object-orie...   883    [OK]
jruby                        JRuby (http://www.jruby.org) is an impleme...   50     [OK]
heroku/ruby                  Docker Image for Heroku Ruby                    17     [OK]
abevoelker/ruby              Docker images for lots of MRI Ruby and JRu...   14     [OK]
cloudgear/ruby               Smallest Ruby image with build dependencie...   12     [OK]
…(中略)…

C:\>docker pull ruby …「ruby」イメージをダウンロードする
Using default tag: latest
latest: Pulling from library/ruby
5040bd298390: Already exists
fce5728aad85: Already exists
76610ec20bf5: Already exists
52f3db4b5710: Pull complete
73c0dc2c700a: Pull complete
351e66c43585: Pull complete
05338302b02a: Pull complete
b2e9476686fe: Pull complete
Digest: sha256:af6f904e58ba58cabce8f5853972320b9f7ef0f4922a8a7f0ddf6f8863be6f3c
Status: Downloaded newer image for ruby:latest

C:\>docker images …「ruby」イメージの確認
REPOSITORY       TAG     IMAGE ID      CREATED        SIZE
ruby             latest  ef296fcb8c7c  5 days ago     681 MB …ダウンロードした「ruby」イメージ
bash             latest  4da20a356582  6 days ago     12.2 MB
clojure          latest  073eca6605b0  7 days ago     659 MB
docker/whalesay  latest  6b362a9f73eb  20 months ago  247 MB

C:\>docker run -it ruby …「ruby」イメージの実行
irb(main):001:0> puts "Hello, world\n" …rubyプログラムのコード
Hello, world …実行結果
=> nil
irb(main):002:0>

C:\>docker ps -a …実行結果のコンテナ(終了後のプロセス)の確認
CONTAINER ID  IMAGE  COMMAND  CREATED                 STATUS                   PORTS  NAMES
998714f95ef6  ruby   "irb"    Less than a second ago  Exited (0) 6 seconds ago        gallant_mclean

C:\>docker rm 9987 …実行後のコンテナの削除。Dockerを使うと、システムにインストールすることなくさまざまなプログラムを実行できるし、終了後も簡単にクリーンアップできる
9987

C:\>



Dockerイメージを作成する

 Dockerでは、「Dockerfile」という名前のファイルに書き込んだコマンド列を使って新しいイメージを作成できる。これにより、例えば環境構築作業を常に同じ手順で再現できるようになる。

 Dockerfileには実行するべきコマンドや設定、環境変数の設定などを書き込んでおき、これをdocker buildコマンドで実行する。するとその指示に基づいて、新しいイメージが自動的に構築される。

 次の例は「docker/whalesay」というイメージをベースにして、更新プログラムを適用後にfortuneパッケージを追加させるという指示である。コンテナとして起動された場合は、fortuneプログラムの出力をcowsayプログラム(クジラの絵で吹き出し表示するプログラム。whalesayイメージ中に含まれている)に渡すようになっている。

※Dockerfileの例
FROM docker/whalesay:latest
RUN apt-get -y update && apt-get install -y fortunes
CMD /usr/games/fortune -a | cowsay



 これをビルドして実行すると次のようになる。

C:\whalesay2>docker build -t whalesay2 .  …新しいイメージをビルドする
Sending build context to Docker daemon 2.048 kB
Step 1/3 : FROM docker/whalesay:latest
latest: Pulling from docker/whalesay
e190868d63f8: Pull complete
…(以下省略)…
C:\whalesay2>docker images  …新しいイメージの確認
REPOSITORY       TAG      IMAGE ID       CREATED                  SIZE
whalesay2        latest   aad00b4a9ffb   Less than a second ago   277 MB  …作成されたイメージ
docker/whalesay  latest   6b362a9f73eb   20 months ago            247 MB

C:\whalesay2>docker run whalesay2  …実行してみる
 ________________________________________
/ To err is human, to repent, divine, to \
| persist, devilish.                     |
|                                        |
\ -- Benjamin Franklin                   /
 ----------------------------------------
    \
     \
      \
                    ##        .
              ## ## ##       ==
           ## ## ## ##      ===
       /""""""""""""""""___/ ===
…(以下省略)…



DockerレジストリとDockerハブ

 Dockerのイメージは互換性があるため、他のユーザーが作成したイメージを使ったり、自分の作成したイメージを譲渡したりすることもできる。このためには「Dockerレジストリ」を利用する。これはDockerのイメージを交換するための場所/サービスである。

 Dockerレジストリサイトはプライベートで構築することもできるし、企業などが構築して公開しているものもある。Docker社では「Docker Hub」というサイトを運営しており、基本的なベースイメージの公開やユーザーによるイメージの交換などを支援している。

Docker Hubレジストリ Docker Hubレジストリ
Docker Hubレジストリには、さまざま用途に向けてカスタマイズしたDockerイメージが多数用意されている。これはDocker for Windowsに含まれるkitematicでDocker Hubの内容を見ているところ。


 今回はよく使われるDockerコマンドを紹介した。次回はWindows OSでサポートされているWindowsコンテナについて見ていく。

→第4回「Windowsプログラムを実行するWindowsコンテナ」へ

「超入門Docker」のインデックス

超入門Docker

Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。