概要
今までで、Windows10でDockerが使える状態を作り、DockerHubからImageを取得し、Containerを起動する流れを「自己整理」してきました。
今回は、Apache HttpdとMariaDBを触ってみようと思います。
(毎度ですが、Dockerfileは出てきません。)
まとめは下記
前提条件
- Windows10にDocker Desktopがインストールされている状態
httpd(Apache httpd)
Webサーバーのアプリとしては代表的な「Apache HTTPD」です。
提供されているタグ情報を見ると、「2.2系」は、とっくにサポート終了しているので提供は「2.4系」だけですね。
ベースになるOSは、「bullseye(つまりDebian11)」か「alpine(Alpine Linux)」の2系統のようです。
毎度ですが、「latest」が「bullseye」側になっているので、DebianベースのImageを使いましょう。
Imageの取得
pullコマンドを使って、httpdのImageを取得します。
PS C:\> docker pull httpd:latest
latest: Pulling from library/httpd
42c077c10790: Pull complete
77a357ba66a8: Pull complete
e9e2f87fc2ce: Pull complete
0b3c9bceb738: Pull complete
de91965861a5: Pull complete
Digest: sha256:f899e432292e4ee92772d35e43b2e3dcf30042b1c6385d33f00a9300c69ee729
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest
Imageの一覧を確認します。
PS C:\> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest b260a49eebf9 4 days ago 145MB ←←←←
ubuntu latest 27941809078c 11 days ago 77.8MB
hello-world latest feb5d9fea6a5 8 months ago 13.3kB
Containerの生成と起動
それでは、Containerを生成して起動してみます。
PS C:\> docker run -d -p 8080:80 httpd
4581c939aae3c339d52477a344ad634f32af80fc7acfb560c0013d32d731b8b9
見慣れないオプションが出てきましたね。
まず「-d」はデタッチドモードです。
要は「バックグラウンドで動いておいてね」というオプションです。
そして「-p 8080:80」は、Containerのポート番号を指定するオプションです。
この場合、外部から8080へアクセスしてきたものを、Containerの80へ渡してね。ということです。
実行されると、下記のようなダイアログが出るので「アクセスを許可する」をクリックします。
さて、それではWebブラウザを開いて、「http://localhost:8080 」へアクセスしてみましょう。
動作してますね。
デタッチドモードで動作してるので、ずーっと起動しっぱなしです。
ここをクリックすることで、ブラウザで表示確認も可能です。
Containerを停止する
デタッチドモードで動作しっぱなしなので、停止するにはContainerの状況を確認します。
PS C:\> docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4581c939aae3 httpd "httpd-foreground" 10 minutes ago Up 10 minutes 0.0.0.0:8080->80/tcp bold_ritchie
PS C:\> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4581c939aae3 httpd "httpd-foreground" 10 minutes ago Up 10 minutes 0.0.0.0:8080->80/tcp bold_ritchie
「container ls」でも「ps」でもどちらでもOKです。
「--all」を付けなくても、稼働中なので表示されます。
Containerの停止は「stop」コマンドを使います。
PS C:\> docker stop 4581c939aae3
4581c939aae3
停止しました。
Docker Desktop側も見てみます。
ちゃんと停止してますね。
Containerを起動する
前回学びましたね。
再度「run」すると、もう一個Containerができちゃうぞ。と・・・・
なので「start」を使います。
PS C:\> docker start 4581c939aae3
4581c939aae3
PS C:\> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4581c939aae3 httpd "httpd-foreground" 15 minutes ago Up 3 seconds 0.0.0.0:8080->80/tcp bold_ritchie
ポイントは、startの時は「デタッチドモード」や「ポート指定」などはもう不要だということです。
Containerを生成するときのオプションなので、生成済みのContainerの起動には付けなくていいということですね。
ちゃんと動いてますね。
MariaDB
ご存じのMySQLではなく、MariaDBです。
「latest」になってるのは「10.8.3-jammy」ですね。
Imageの取得
pullコマンドを使って、MariaDBのImageを取得します。
PS C:\> docker pull mariadb:latest
latest: Pulling from library/mariadb
405f018f9d1d: Already exists
7a85079b8234: Pull complete
579c7ff691b1: Pull complete
4976663b5d6d: Pull complete
169024b1fb13: Pull complete
c0ffe8ce897f: Pull complete
b583c09d23c3: Pull complete
9b9f0c08d08f: Pull complete
9cd51f984586: Pull complete
d9f506bb8aca: Pull complete
24d689f79ba4: Pull complete
Digest: sha256:88fcb7d92c7f61cd885c4d309c98461f3607aa6dbd57a2474be86e1956b36d13
Status: Downloaded newer image for mariadb:latest
docker.io/library/mariadb:latest
Imageの一覧を確認します。
PS C:\> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest b260a49eebf9 4 days ago 145MB
mariadb latest ea81af801379 11 days ago 383MB
ubuntu latest 27941809078c 11 days ago 77.8MB
hello-world latest feb5d9fea6a5 8 months ago 13.3kB
Containerの生成と起動
早速、「run」で起動します。
どれかはオプションで指定しろや。って・・・
One of MARIADB_ROOT_PASSWORD, MARIADB_ALLOW_EMPTY_ROOT_PASSWORD, or MARIADB_RANDOM_ROOT_PASSWORD (or equivalents, including *_FILE), is required. The other environment variables are optional.
PS C:\> docker run -p 3306:3306 -e MARIADB_ROOT_PASSWORD=my-secret-pw -d mariadb
0f9346bd7598d80349bce4cc83eb17df0225ab124fe178d1945df6911c453127
docker: Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:3306 -> 0.0.0.0:0: listen tcp 0.0.0.0:3306: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
む?
MariaDB/MySQLの標準ポート番号3306が有効にできないだと?
、、、、あ、このPCにMySQLをインストールして動かしてるわ・・・ポート競合か・・・
Docker Desktopで見ると、Containerを作ったところまでで終わってるのね。
失敗作なんで削除して、ポート番号を「3306 → 3808(適当)」に変更して、Containerを作りなおすことにしよう。
PS C:\> docker run -p 3808:3306 -e MARIADB_ROOT_PASSWORD=my-secret-pw -d mariadb
759f00f551ff09067ebf088407e2ad7de88aae01a71356d3d579eb79e2dc9757
PS C:\> docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
759f00f551ff mariadb "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:3808->3306/tcp crazy_ritchie
4581c939aae3 httpd "httpd-foreground" 14 hours ago Up 14 hours 0.0.0.0:8080->80/tcp bold_ritchie
89b3f9ec5f9b ubuntu:latest "bash" 34 hours ago Exited (0) 34 hours ago magical_hellman
起動しましたね。
Docker Desktop側を見るとこんな感じです。
さて、どうやって確認してみようか・・・
せっかく「MySQLがすでに入っていてポートが競合した」ので、MySQLのツールを使って接続してみますか・・・
まず、MySQL Workbenchを起動します。
MySQL Workbenchは、グラフィカルにMySQLを操作できるツールです。
https://dev.mysql.com/downloads/workbench/
まず「MySQL Connections」の右側にある「+」マークをクリックしてコネクションを作ります。
- Connection Name:適当でいいです。今回は「MariaDB Test」にしてみました
- Port:標準の「3306」を「3808」に変更したので、書き換えます
Containerを作成するときに設定したパスワードを入力します。(MARIADB_ROOT_PASSWORD=my-secret-pwの「my-secret-pw」です)
なんか警告でますが、スルーします。(Ver10.8.3を検知したけど、このWorkbenchにはちゃんと適合はしてねーぞ。ってやつ)
「Continue Anyway」ボタンを押します。
「いや、私は、MySQLインスコしてないんで標準の3306でContainer作ったんだけど、確認させてよ・・・・」
その場合は、こんな感じで進めます。
(というか、「-p 3808:3306」を使わなかった人。つまり、外部からの使用はしないよ。という人も含めます)
一番簡単なのは、Docker DesktopからTerminalを開いてアクセスする方法。
開いたTerminalで「mysql -u root -p」と入力してEnter。Passwordを入力するとMariaDBのコンソールになる。
同じようなものですが、「exec」コマンドを使ってやるのもありです。
execコマンドは最低2つ以上の引数を記載しないといけないので、「mysql」コマンド書いてますが、Docker Desktop側みると「/bin/sh」でもいいみたいですね。
PS C:\> docker exec -it 759f00f551ff mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 17
Server version: 10.8.3-MariaDB-1:10.8.3+maria~jammy mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
余談ですが、MySQLと同じなので、終了は「\q」です。
MariaDB [(none)]> \q
Bye
Containerを停止する / Containerを起動する
Containerの停止や起動は、httpdのときと同じです。
だんだんDockerの「自己整理」が出来てきました。
次回は、とうとう「Dockerfile」を使ったり、「Docker-compose」を使ったりしはじめようと思います。