仕事でDocker使いましょうって話になったのですが、てんこ実は今までDockerを使ったことがありませんでした。そこでDocker初級のてんこが勉強した結果をまとめてみるという記事を書いてます。 前回の記事ではDockerって何だろうということを中心にまとめましたが、今回は実際にDockerコマンドを使った実践編になります。
- 第1回 Dockerの概要を勉強してみる
- 第2回 Dockerコマンドを使ってみる ★本記事
- 第3回 Docker Composeコマンドを使ってみる
絵で書くとこう
他にもいろいろ機能があるようですが、本記事ではまず基本的なところだけになります。
ざっくり絵でまとめてみるとこんな感じ。
前提
- 自分でDockerイメージを作ろうという話は含みません。Docker Hubで公開されているDockerイメージを使う方法について書いてます。
- Docker / Docker Composeはインストール済みの状態とします。
- 記事はLinux(Ubuntu 20.04)にインストールしたDockerを使いながら確認しました。
大まかな流れ
- Docker Hubで目当てのDockerイメージを探します。
- Docker HubからDockerイメージをダウンロードします。
- Dockerコンテナを起動します。
- 使い終わったらDockerコンテナを停止します。
- もう今後も使うことがなければ、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のサイト見た方が見やすいし探しやすいと思います。
トップ画面はいきなりサインインを求めてますが、最初はサインインまで必要は無いと思います。画面上部に検索バーがあるので「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+C
もCtrl+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でやってみたいと思います。