てんこ製作

Tenco Works

Dockerコマンドを使ってみる

仕事でDocker使いましょうって話になったのですが、てんこ実は今までDockerを使ったことがありませんでした。そこでDocker初級のてんこが勉強した結果をまとめてみるという記事を書いてます。 前回の記事ではDockerって何だろうということを中心にまとめましたが、今回は実際にDockerコマンドを使った実践編になります。

  • 第1回 Dockerの概要を勉強してみる
  • 第2回 Dockerコマンドを使ってみる ★本記事
  • 第3回 Docker Composeコマンドを使ってみる

絵で書くとこう

他にもいろいろ機能があるようですが、本記事ではまず基本的なところだけになります。

ざっくり絵でまとめてみるとこんな感じ。

HUB
HUB
docker pull
docker pull
docker image rm
docker image rm
Dockerイメージ
Dockerイメージ
docker create
docker create
docker start
docker start
docker stop
docker stop
       docker run
       docker run
Dockerコンテナ
Dockerコンテナ
docker rm
docker rm
docker ps
docker ps
コンテナ一覧
コンテナ一覧
docker image ls
docker image ls
イメージ一覧
イメージ一覧
Viewer does not support full SVG 1.1

前提

  • 自分でDockerイメージを作ろうという話は含みません。Docker Hubで公開されているDockerイメージを使う方法について書いてます。
  • Docker / Docker Composeはインストール済みの状態とします。
  • 記事はLinux(Ubuntu 20.04)にインストールしたDockerを使いながら確認しました。

大まかな流れ

  1. Docker Hubで目当てのDockerイメージを探します。
  2. Docker HubからDockerイメージをダウンロードします。
  3. Dockerコンテナを起動します。
  4. 使い終わったらDockerコンテナを停止します。
  5. もう今後も使うことがなければ、Dockerイメージを削除します。

dockerコマンドの使い方

MariaDBを例に説明していきます。

Docker Hubで目当てのDockerイメージを探す

docker searchというコマンドが使えます。後ろに検索キーワードを付けると、Docker Hubの中を検索キーワードで探してくれます。

$ sudo docker search mariadb
NAME                                   DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mariadb                                MariaDB is a community-developed fork of MyS…   3916      [OK]       
linuxserver/mariadb                    A Mariadb container, brought to you by Linux…   193                  
bitnami/mariadb                        Bitnami MariaDB Docker Image                    132                  [OK]
toughiq/mariadb-cluster                Dockerized Automated MariaDB Galera Cluster …   40                   [OK]
mariadb/server                         MariaDB Server is a modern database for mode…   35                   [OK]
colinmollenhour/mariadb-galera-swarm   MariaDb w/ Galera Cluster, DNS-based service…   32                   [OK]
(以下省略)

・・・なんですが。

ぶっちゃけブラウザでDocker Hubのサイト見た方が見やすいし探しやすいと思います。

hub.docker.com

トップ画面はいきなりサインインを求めてますが、最初はサインインまで必要は無いと思います。画面上部に検索バーがあるので「mariadb」で検索すると検索結果がすぐに表示されます。

検索結果を見ると、MariaDBのOFFICIAL IMAGEが検索トップに表示されると思います。

特に要件がなければ、「OFFICIAL IMAGE」とか「VERIFIED PUBLISHER」とか表示されているDockerイメージを使っておけば良いと思います。

ちなみにOFFICIAL IMAGEは、Docker社がDockerコミュニティの協力を得て作成しているDockerイメージ(つまりDocker社製)。VERIFIED PUBLISHERはDockerのパートナーチームと直接連携しているDockerのパートナー企業なんだそうです(この場合はMariaDB社製)。

使うDockerイメージを検索できたら、その名前を覚えておきましょう。今回は「mariadb」になります。

Docker HubからDockerイメージをダウンロードする

次に目当てのDockerイメージをダウンロードします。イメージのダウンロードには、docker pullコマンドを使います。先程Docker Hubで探したときのDockerイメージの名前を指定してダウンロードします。

$ sudo docker pull mariadb
Using default tag: latest
latest: Pulling from library/mariadb
83ee3a23efb7: Pull complete 
db98fc6f11f0: Pull complete 
f611acd52c6c: Pull complete 
aa2333e25466: Pull complete 
f53ac4b825fd: Pull complete 
c20afcf9b055: Pull complete 
54c5dc6dcf19: Pull complete 
b1c71d744483: Pull complete 
863a8cc01d1c: Pull complete 
5d1a793b093f: Pull complete 
477cd2b3eba8: Pull complete 
402454543166: Pull complete 
Digest: sha256:8040983db146f729749081c6b216a19d52e0973134e2e34c0b4fd87f48bc15b0
Status: Downloaded newer image for mariadb:latest
docker.io/library/mariadb:latest
$ 

ダウンロードされたDockerイメージの一覧は、docker image lsコマンドで見ることができます。

$ sudo docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
mariadb      latest    ade39f0469a3   4 weeks ago   407MB
$ 

Dockerコンテナを起動

次に、ダウンロードしたDockerイメージを使ってDockerコンテナを起動してみます。本当はDockerコンテナを作成→起動という流れらしいですが、docker runコマンドを使えば作成と起動を一発でやってくれます。

$ sudo docker run --name docker-mariadb -e MYSQL_ROOT_PASSWORD=password -p 3306:3306 -d mariadb
6dbeaec683e5d61ea17bf2b0b949ad403802603c33eccbd05732955cf4cc96e9
$ 

docker runするときにいろいろ起動オプションを付ける必要がありました。順に説明していきます。

--nameオプションは、作成・起動するDockerコンテナに名前を付けるオプションです。後々このコンテナを操作するのに使う名前なので、判別しやすい名前を付けておくのが良いと思います。

-eオプションは、作成・起動するコンテナに環境変数を設定するオプションです。Dockerコンテナ内のアプリに動作パラメータを渡すのに環境変数を使うという技が、他のDockerコンテナでも多用されているようです。今回例で取り上げているMariaDBのコンテナでも、rootのパスワードを設定するのに環境変数を利用しています。

-pオプションは、作成・起動するコンテナのネットワークポートを公開するためのオプションです。MariaDBはポート3306番でクライアントからのリクエストを待ち受けして処理します。だから3306番を公開しておかないとMariaDBに対して一切何もできません。

この例では-p 3306:3306という書き方をしていますが、前半の3306はlocalhost側のポート番号、後半の3306はコンテナ内で使うポート番号です。前半の3306を違う番号にすることで、ポートフォワーディングみたいにすることもできます。MariaDBやMySQLのコンテナを複数起動するときはlocalhost側の番号をずらして起動する、なんていうことができます。

-dオプションは、Dockerコマンドをバックグラウンドで稼働させるオプションです。このオプションを付けておけば、コンテナを起動してすぐコマンドプロンプトに戻ってきます。逆につけない場合、どうにかしてアプリが終了しないとコマンドラインに戻ってきません。MariaDBを-d無しで起動してみたらCtrl+CCtrl+Zも反応してくれなかったので、必ず付けておいたほうが無難ってことなんでしょう。

稼働中のコンテナをみるには、docker psコマンドを使います。

$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS              PORTS                    NAMES
6dbeaec683e5   mariadb   "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:3306->3306/tcp   docker-mariadb
$ 

MariaDBが実際に動いてるのを見たいので、MySQLクライアントでMariaDBに接続してみます。

$ mysql --host=localhost --protocol=tcp -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.5.5-10.5.8-MariaDB-1:10.5.8+maria~focal mariadb.org binary distribution

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> exit
Bye
$ 

ちゃんと繋がりました!

MySQLクライアントの挙動のせいでいろいろ起動オプションを付ける必要がありますが、ちゃんと動いているのは確認できました。

Dockerコンテナを停止・削除

このあとは、コンテナを使い終わったあとの後片付けです。

Dockerコンテナの作成と起動はdocker runコマンドでした。これはdocker createコマンド+docker startを一発で行うコマンドになります。

対して停止と削除に関しては一発で行うコマンドは無いようです。もしかしたら勉強不足で本当はあるのかもですが、Dockerのドキュメントを見る限りは無さそうに見えました。

まず、停止はdocker stopコマンドで行います。

以下は稼働コンテナを確認してから停止→もう一度確認している例です。

$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS       PORTS                    NAMES
cc4d5e061916   mariadb   "docker-entrypoint.s…"   5 hours ago   Up 5 hours   0.0.0.0:3306->3306/tcp   docker-mariadb
$ sudo docker stop docker-mariadb
docker-mariadb
$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
$ 

次に削除ですが、docker rmコマンドを使用します。

あともう一つ、停止中のコンテナも含めて一覧を表示するにはdocker ps -aコマンドを使います。

以下はコンテナの存在を確認してから削除→もう一度確認している例です。

$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
$ sudo docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED        STATUS                    PORTS     NAMES
cc4d5e061916   mariadb   "docker-entrypoint.s…"   29 hours ago   Exited (0) 24 hours ago             docker-mariadb
$ sudo docker rm docker-mariadb
docker-mariadb
$ sudo docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
$ 

Dockerイメージを削除

最後はDockerイメージの削除です。Dockerイメージを操作する系のはdocker imageコマンドを使います。Dockerイメージの一覧を見るときはdocker imags ls、Dockerイメージを削除するにはdocker image rmコマンドを使います。

$ sudo docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
mariadb      latest    ade39f0469a3   4 weeks ago   407MB
$ sudo docker image rm mariadb
Untagged: mariadb:latest
Untagged: mariadb@sha256:8040983db146f729749081c6b216a19d52e0973134e2e34c0b4fd87f48bc15b0
Deleted: sha256:ade39f0469a3fa0e5f907e4dd7861a4e77573b0757bd4055a7b4c52baea58590
Deleted: sha256:b1b7adb782f07a52a3253cdf1012ec84c362d9cadebde5f4d16728eb044d1ff5
Deleted: sha256:8398b71b9330481db3b3ff65995388232dff7c38abaed42310380139a982ee8d
Deleted: sha256:d4ee044faeb1ab6cb9d47b503edfe237d93ddf8408948787edce3499f5f00c84
Deleted: sha256:64a55ae1a08359d40c438d40182fc829ce62f829c8aba6800e761cd5a8b3f21a
Deleted: sha256:2046f66f36c3fd4700d1987f7b44539feda41ad26ff068ba55fa6ac2c6dc05b2
Deleted: sha256:15a72772e3108d31133aaaaeb49c2d97df0bab4a7621fcb13828b6417a878ed6
Deleted: sha256:bcd2f2ef38c1f6b71f6201fe852db2b19a1b41b43da6a52c0ca06eb269281023
Deleted: sha256:e0e0b9f11ca8d5e94db4118049b3f7ba7b839a04340e23ff1279200da0eafa10
Deleted: sha256:83c11f616b02bb0aa601964068da242429c5c92ca2558692c7d6c64138b5b39c
Deleted: sha256:0770b7f116f8627ec336a62e65a1f79e344df7ae721eb3e06e11edca85d3d1e7
Deleted: sha256:476e931831a5b24b95ff7587cca09bde9d1d7c0329fbc44ac64793b28fb809d0
Deleted: sha256:9f32931c9d28f10104a8eb1330954ba90e76d92b02c5256521ba864feec14009
$ sudo docker image ls
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
$ 

これできれいに後片付けもおしまいです。

さて次の記事はDocker Composeの実践編です。今回と同じ内容をDocker Composeでやってみたいと思います。