自由気ままに書いちゃおう

好きなことをつらつらと・・・

【docker】DockerHubを利用したコンテナイメージの操作

今回はDockerHubを利用したコンテナもしくはコンテナイメージの操作についてです。

■DockerHub上から利用したいコンテナイメージを探す

まずは、コンテナイメージを探します。
ここでは、MySQLのコンテナイメージを探してみたいと思います。

1.トップ画面の「Explore」をクリックします。

f:id:guri2o1667:20201102193210p:plain


2.検索窓に「mysql」と入力しEnterキーを押します。

f:id:guri2o1667:20201102193400p:plain

 

3.Filters欄から「Official Images」をクリックします。

f:id:guri2o1667:20201102193310p:plain



4.表示された「mysql」をクリックします。

f:id:guri2o1667:20201102193503p:plain

5.画面右側に表示されているdockerコマンドをコピーします。

※docker pull mysql の部分をコピーします。
f:id:guri2o1667:20201102193543p:plain

 

■DockerHub上で見つけたMySQLコンテナイメージをpull

1.以下コマンドを実行します。

docker pull mysql

f:id:guri2o1667:20201102193822p:plain


2.プロンプトが戻ってきて、最終行に「docker.io/library/mysql:latest」と表示されていることを確認します。

f:id:guri2o1667:20201102194221p:plain

3.前の手順でpullしたコンテナイメージを確認します。

docker images

f:id:guri2o1667:20201102194310p:plain

 

■pullしたMySQLコンテナイメージを起動

1.以下コマンドを実行します。

docker run --name mysql1 -e MYSQL_ROOT_PASSWORD=P@ssw0rd -d mysql:latest

f:id:guri2o1667:20201102195116p:plain

--name コンテナ名・・・ 任意に付けるコンテナ名

-e  環境変数・・・ 変数の設定。ここではMYSQL_ROOT_PASSWORDというmysqlユーザとしてrootのパスワードの設定を行っています

-d・・・ バックグラウンドでmysqlコンテナを起動

mysql:latest ・・・ docker imagesコマンドで確認したTAG列の内容を指定します。

※コマンド実行後文字の羅列が表示されますが、これは「コンテナID」というものです。

■runしたMySQLコンテナイメージの状態確認

1.以下コマンドを実行します。

docker ps -a

f:id:guri2o1667:20201102195703p:plain

docker runコマンド実行後に出力されたコンテナIDの一部が「CONTAINER ID」に表示されます。
実行結果の右側部分が切れてしまっていますが、続きは以下の画像です。
「NAMES」欄に設定したmysql1が表示されています。
後ほど、NAMES列の値(ここでは、mysql1)を利用します。

f:id:guri2o1667:20201102200408p:plain

■runしたMySQLコンテナイメージへの接続(コンテナへのログイン)

ここでは、バックグラウンドで起動したMySQLへの接続(コンテナへのログイン)を行い、
簡単なSQLコマンドを実行してみようと思います。

1.以下コマンドを実行します。

docker exec -it mysql1 bash

f:id:guri2o1667:20201102200539p:plain

接続がうまくいくと、上記の通りrootのプロンプトが表示されます。
docker execコマンドにより、指定したコンテナに対してコマンドを実行することができます。
そのため、bashを末尾につけることで、「MySQLコンテナのbashコマンドを実行する」という意味になります。
-itは現時点ではbashコマンドを実行するためのおまじない程度の理解で大丈夫です。


2.環境変数の情報を確認するため、以下コマンドを実行します。

env

f:id:guri2o1667:20201102200646p:plain

MYSQL_VERSIONやdocker runコマンドで設定したMYSQL_ROOT_PASSWORD等の情報を確認できます。

3.mysqlにログインするため、以下コマンドを実行します。

mysql -u root -p

※上記実行後、「Enter password:」が表示されたりmysqlのrootユーザのパスワードを入力します。

f:id:guri2o1667:20201102200917p:plain

4.簡単なSQLコマンドを実行します。

show databases

f:id:guri2o1667:20201102201013p:plain

MySQL内のデータベース一覧を確認することができました。

5.MySQLデータベースから抜けるため、以下コマンドを実行します。

quit

f:id:guri2o1667:20201102201551p:plain

MySQLデータベースから抜けることができました。
続いてMySQLコンテナからも抜けてみます(ログアウトしてみます)

6.「Ctrl」を押したまま、「P」⇒「Q」の順で押します。
※操作的には「Ctrl+P」⇒「Ctrl+Q」って感じです。
※成功すると、「read escape sequence」と表示され、通常のWindowsのプロンプトに戻ります。

f:id:guri2o1667:20201102201809p:plain

 

■runしたMySQLコンテナにローカルPCから接続

ここでは、バックグラウンドで起動したMySQLへローカルPCから接続を行い、
簡単なSQLコマンドを実行してみようと思います。
※今までは直接MySQLにログインしていましたので、ローカルPCからネットワーク接続を行ってみたいと思います。

ローカルPCからはMySQL Workbenchを利用しMySQLコンテナに接続することにします。
また、ローカルPCからの接続時にポートフォワードを利用し、
ポート3300で接続した際に3306へポートフォワードされる設定でMySQLコンテナを起動させます。

1.以下コマンドを実行します。

docker run --name mysql1 -p 3300:3306 -e MYSQL_ROOT_PASSWORD=P@ssw0rd -d mysql:latest

f:id:guri2o1667:20201102203519p:plain

2.念のため、docker ps コマンドで起動状態を確認します。

f:id:guri2o1667:20201102203555p:plain

尚、PORTS列をみると、「0.0.0.0:3300 -> 3306/tcp」と表示されており、
127.0.0.1:3300で接続すると3306に転送されるようになっております。

3.MySQL Workbenchにて接続情報を登録します。

f:id:guri2o1667:20201102203758p:plain


4.「Test Connection」をクリックし、以下画面が出力されることを確認します。

f:id:guri2o1667:20201102203840p:plain

5.簡単なSQLコマンドを実行します。

f:id:guri2o1667:20201102203920p:plain

問題なく、データベース情報が表示されました。

■runしたMySQLコンテナの停止および削除

ここでは、起動中のMySQLを停止し、その後に削除したいと思います。

1.現在の起動状態を確認するため、以下コマンドを実行します。

docker ps -a

f:id:guri2o1667:20201102204709p:plain

2.停止するため、以下コマンドを実行します。

docker stop mysql1
docker ps -a

f:id:guri2o1667:20201102204800p:plain

3.停止したMySQLを削除するため、以下コマンドを実行します。

docker rm mysql1
docker ps -a

f:id:guri2o1667:20201102204942p:plain

※docker rm コマンドにより、docker ps -a からも表示されなくなることが確認できました。

以上です。