Dockerの概要を知るための超入門。今回はDockerコマンドを使ってイメージやコンテナを管理してみる。
本入門連載では、システム管理者やシステムエンジニアの方々を主な対象として、IT業界でよく使われる技術や概念、サービスなどの解説をコンパクトにまとめておく。
前回はDocker for Windowsを例に挙げてDockerの基本的な使い方を説明した。今回は、dockerコマンドの使い方についてまとめておく。
dockerコマンドで利用できるサブコマンドには次のようなものがある。
分類 | 機能概要 |
---|---|
イメージ管理 | コンテナとして利用するイメージの構築や管理、設定などを行う |
コンテナ管理 | コンテナの起動や停止、再開、削除などを行う |
レジストリ管理 | Docker Hubなどに接続してコンテナイメージを取得したり、操作したりする |
ネットワーク管理 | コンテナのネットワーク設定などを操作する |
システム管理 | Dockerシステム全体を管理する |
ボリューム管理 | コンテナで使用するストレージを管理する |
クラスター管理 | Docker Swarmクラスターやノードを管理する |
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 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 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では、「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 Hub」というサイトを運営しており、基本的なベースイメージの公開やユーザーによるイメージの交換などを支援している。
今回はよく使われるDockerコマンドを紹介した。次回はWindows OSでサポートされているWindowsコンテナについて見ていく。
→第4回「Windowsプログラムを実行するWindowsコンテナ」へ
Copyright© Digital Advantage Corp. All Rights Reserved.