NTTドコモ様_dカーシェア
NTTドコモ様_dカーシェア
2017.04.28
#6
最新バックエンド技術つまみ食い

絶対に挫折しない!オープンソースソフトウェア「Docker」入門編 #02

ヤスタカ

こんにちは、ヤスタカです。

シンゴジラの DVD が販売開始されて 5 回目の鑑賞を終えたところです。「無人在来線爆弾!」というセリフは、何度聞いても胸が高鳴りますね。

 
さて前回の「絶対に挫折しない Docker 入門」では そもそも Docker って何? おいしいの? ってところからインストールの手順、起動までを実践しました。

 
今回は、もう一歩踏み込んだ段階までご説明します。


 

前回までのおさらい

それでは、前回のおさらいから始めていきましょう!

まずは「コンテナ」「イメージ」「プロセス」の 3 つがなんだったか思い出していきましょう。この 3 つは今後もずっと出てくる概念なので、しっかりと覚えておいてください。

 
次にコンテナの起動の仕方です。

docker run ubuntu echo 'Hello, world'

 
Docker for Mac をインストールして起動後、上記コマンドをターミナル上で実行するとイメージがない場合はリポジトリから取得して、その後コンテナを起動、’hello, world’ の出力を実行してくれるのでした。

今回はこの Docker を操るコマンドをいろいろと紹介していきたいと思います。

 
Docker には Docker run 以外にもたくさんのコマンドがあり、主要なコマンドをひとつずつみていきたいと思います。やや単調になってしまうかもしれませんが、どんなコマンドがあるかを知っておかないと そもそもやりたいことができないので、少し我慢してお付き合いください。

それでは、次々に紹介していきましょー!

 

Dockerを操るコマンド群

Docker のコマンドは大まかに分けて「イメージ操作」「コンテナ操作」の 2 つに分けられます。
まずはじめに、イメージ操作を行うコマンドを見ていきましょう。

※[ ]内のコマンドは省略可能です。

 

Docker イメージを操作するコマンド群

イメージの取得[Docker pull]

以前紹介した Docker run というコマンドは「イメージの取得」「コンテナの生成」「コンテナの起動」までを一気に行ってくれる便利なコマンドでしたが、イメージだけを取得するということも勿論できます。イメージの取得には、こちらのコマンドを使います。

docker pull [オプション] イメージ名[:タグ名]

 
例えば ubuntu のイメージだけを取得する場合、

docker pull ubuntu

 
とすれば、イメージの取得だけを行います。また既にイメージが取得済みの場合は何もしません。イメージにタグ名まで指定して実行すると、そのタグが付与されているイメージを取得してきます。タグ名を省略した場合はデフォルトの latest(最新バージョン)を取得します。

 

イメージ一覧表示[docker images]

取得済みのDockerイメージを一覧表示したいときにはこちら。

docker images [オプション] [リポジトリ名]

 
-a オプションをつけると、中間イメージもすべて表示されます。

 

中間イメージとは
Docker イメージにはベースのイメージを修正する形で、いくつかのイメージが重なってひとつの Docker イメージになっているものがあります。その途中段階のイメージも、実はひとつのイメージとして取得されてきています。

 

イメージの検索[docker search]

Docker のイメージを Docker Hub から検索したいときは

docker search [オプション] 検索キーワード

 
です。

 
nginx で検索した結果はこんな感じでした。

% docker search nginx
NAME                                     DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                                    Official build of Nginx.                        5802      [OK]
jwilder/nginx-proxy                      Automated Nginx reverse proxy for docker c...   999                  [OK]
richarvey/nginx-php-fpm                  Container running Nginx + PHP-FPM capable ...   367                  [OK]
jrcs/letsencrypt-nginx-proxy-companion   LetsEncrypt container to use with nginx as...   167                  [OK]
million12/nginx-php                      Nginx + PHP-FPM 5.5, 5.6, 7.0 (NG), CentOS...   77                   [OK]
webdevops/php-nginx                      Nginx with PHP-FPM                              77                   [OK]
h3nrik/nginx-ldap                        NGINX web server with LDAP/AD, SSL and pro...   38                   [OK]
bitnami/nginx                            Bitnami nginx Docker Image                      26                   [OK]
evild/alpine-nginx                       Minimalistic Docker image with Nginx            15                   [OK]
webdevops/nginx                          Nginx container                                 7                    [OK]
blacklabelops/nginx                      Dockerized Nginx Reverse Proxy Server.          4                    [OK]
1science/nginx                           Nginx Docker images that include Consul Te...   4                    [OK]
ixbox/nginx                              Nginx on Alpine Linux.                          3                    [OK]
frekele/nginx                            docker run --rm --name nginx -p 80:80 -p 4...   3                    [OK]
servivum/nginx                           Nginx Docker Image with Useful Tools            2                    [OK]
dock0/nginx                              Arch container running nginx                    2                    [OK]
drupaldocker/nginx                       NGINX for Drupal                                2                    [OK]
xataz/nginx                              Light nginx image                               2                    [OK]
xutongle/nginx                           nginx http                                      1                    [OK]
tianon/nginx                             DEPRECATED; use nginx:*                         1                    [OK]
tozd/nginx                               Dockerized nginx.                               1                    [OK]
unblibraries/nginx                       Baseline non-PHP nginx container                0                    [OK]
c4tech/nginx                             Several nginx images for web applications.      0                    [OK]
funkygibbon/nginx                        nginx + openssl automated build, customisa...   0                    [OK]
watsco/nginx                             nginx:1.11-alpine                               0                    [OK]

 
stars はお気に入り数になるので、イメージを選択するときの参考までに。

 

イメージの削除[docker rmi]

取得してきたイメージを削除する場合は、こちらをお使いください。

docker rmi [オプション] イメージ名

 

Dockerコンテナを操作するコマンド

コンテナを操作するコマンドの説明に入る前に、コンテナのライフサイクルについて理解しておきましょう。その方が、コマンドで何をしようとしているかイメージがつきやすいかもしれません。

Docker のコンテナはイメージからの生成、起動、停止、削除というライフサイクルがあり、それぞれのコマンドが用意されています。

 

コンテナ一覧表示[docker ps]

コンテナの一覧を表示します。

docker ps [オプション]

 
そのままだと稼働しているコンテナしか表示してくれませんが、-a オプションを付けると起動中・停止中のコンテナすべてを表示してくれます。

 

コンテナの生成[docker create]

イメージを取得後、そのイメージからコンテナを生成するには、こちらのコマンドを使います。

docker create [オプション] イメージID [コマンド][引数]

 
docker run とは違い、コンテナを生成するだけで起動はしません。

 

コンテナの起動[docker start]

コンテナの生成が終わったら、生成されたコンテナを起動しましょう。

docker start [オプション] コンテナID

 

コンテナの生成&起動[docker run]

上記の create や start と比較して、コンテナの生成と起動を同時に行ってくれます。結局こっちのコマンドの方が便利なので、よく使うことが多いかと思います。

docker run [オプション]イメージ名[タグ名][引数]

 
オプションで -d を指定するとバックグラウンドで実行してくれます。

 

コンテナの停止[docker stop]

起動したコンテナを停止するコマンドです。

docker stop [オプション] コンテナID

 

コンテナの削除[docker rm]

コンテナを削除するコマンドです。

docker stop [オプション] コンテナID

 
複数あるコンテナをまとめて全部削除したいときは、こちらのコマンドを使ってください。

docker rm $(docker ps -aq)

 
これはなにをやっているかというと、docker rm の引数に docker ps -aq( Docker コンテナの一覧表示 -a オプションは起動中・停止中含めてすべてのコンテナを表示、-q オプションはコンテナ ID のみ表示)の結果をひとつずつ渡して実行しているのです。そのため、すべての Docker コンテナが削除されることになるのです。

 

まとめ

後半どんどんコマンドの説明が雑になってきましたね……。

でも大丈夫。よくわからなかったときは公式ドキュメントを読みましょう。(丸投げ……)

今回紹介した Docker イメージとコンテナを操作するコマンドはどれも基本的なものなので、とりあえずすべて覚えておきましょう。余裕があれば、きめ細かい Docker の設定ができるようになると思います。

Dockerコマンドのドキュメント

英語ver.
https://docs.docker.com/edge/engine/reference/commandline/docker/
日本語翻訳ver.
http://docs.docker.jp/engine/reference/commandline/index.html

 
次回の絶対に挫折しない Docker 入門 その3では、docker run のオプション設定あれこれやをご紹介していきます!