LoginSignup
0
0

More than 1 year has passed since last update.

Dockerで色々やってみる(Containerいじくり編)2

Last updated at Posted at 2022-06-18

概要

今までで、Windows10でDockerが使える状態を作り、DockerHubからImageを取得し、Containerを起動する流れを「自己整理」してきました。

今回は、Apache HttpdとMariaDBを触ってみようと思います。
(毎度ですが、Dockerfileは出てきません。)

まとめは下記

前提条件

  • Windows10にDocker Desktopがインストールされている状態

httpd(Apache httpd)

Webサーバーのアプリとしては代表的な「Apache HTTPD」です。

image.png

提供されているタグ情報を見ると、「2.2系」は、とっくにサポート終了しているので提供は「2.4系」だけですね。
ベースになるOSは、「bullseye(つまりDebian11)」か「alpine(Alpine Linux)」の2系統のようです。
image.png

毎度ですが、「latest」が「bullseye」側になっているので、DebianベースのImageを使いましょう。

Imageの取得

pullコマンドを使って、httpdのImageを取得します。

powershell
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の一覧を確認します。

powershell
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を生成して起動してみます。

powershell
PS C:\> docker run -d -p 8080:80 httpd
4581c939aae3c339d52477a344ad634f32af80fc7acfb560c0013d32d731b8b9

見慣れないオプションが出てきましたね。

まず「-d」はデタッチドモードです。
要は「バックグラウンドで動いておいてね」というオプションです。

そして「-p 8080:80」は、Containerのポート番号を指定するオプションです。
この場合、外部から8080へアクセスしてきたものを、Containerの80へ渡してね。ということです。

実行されると、下記のようなダイアログが出るので「アクセスを許可する」をクリックします。
image.png

さて、それではWebブラウザを開いて、「http://localhost:8080 」へアクセスしてみましょう。
image.png

動作してますね。

Docker Desktop側も見てみましょう。
image.png

デタッチドモードで動作してるので、ずーっと起動しっぱなしです。
image.png

ここをクリックすることで、ブラウザで表示確認も可能です。

Containerを停止する

デタッチドモードで動作しっぱなしなので、停止するにはContainerの状況を確認します。

powershell
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」コマンドを使います。

powershell
PS C:\> docker stop 4581c939aae3
4581c939aae3

停止しました。
Docker Desktop側も見てみます。
image.png

ちゃんと停止してますね。

Containerを起動する

前回学びましたね。
再度「run」すると、もう一個Containerができちゃうぞ。と・・・・

なので「start」を使います。

powershell
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の起動には付けなくていいということですね。

image.png

ちゃんと動いてますね。

MariaDB

ご存じのMySQLではなく、MariaDBです。

image.png

MariaDBの提供タグは、結構多いですね。
image.png

「latest」になってるのは「10.8.3-jammy」ですね。

Imageの取得

pullコマンドを使って、MariaDBのImageを取得します。

powershell
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の一覧を確認します。

powershell
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.

powershell
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を作ったところまでで終わってるのね。
image.png

失敗作なんで削除して、ポート番号を「3306 → 3808(適当)」に変更して、Containerを作りなおすことにしよう。

powershell
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側を見るとこんな感じです。

image.png

MariaDBはVolumeも作成されるみたいですね。
image.png

さて、どうやって確認してみようか・・・
せっかく「MySQLがすでに入っていてポートが競合した」ので、MySQLのツールを使って接続してみますか・・・

まず、MySQL Workbenchを起動します。

MySQL Workbenchは、グラフィカルにMySQLを操作できるツールです。
https://dev.mysql.com/downloads/workbench/

image.png

まず「MySQL Connections」の右側にある「+」マークをクリックしてコネクションを作ります。
image.png

  • Connection Name:適当でいいです。今回は「MariaDB Test」にしてみました
  • Port:標準の「3306」を「3808」に変更したので、書き換えます

「OK」ボタンを押します。
image.png

コネクションができたので、選択して実行します。
image.png

Containerを作成するときに設定したパスワードを入力します。(MARIADB_ROOT_PASSWORD=my-secret-pwの「my-secret-pw」です)
image.png

なんか警告でますが、スルーします。(Ver10.8.3を検知したけど、このWorkbenchにはちゃんと適合はしてねーぞ。ってやつ)
「Continue Anyway」ボタンを押します。

image.png
無事、MariaDBに接続しましたね・・・

「いや、私は、MySQLインスコしてないんで標準の3306でContainer作ったんだけど、確認させてよ・・・・」

その場合は、こんな感じで進めます。
(というか、「-p 3808:3306」を使わなかった人。つまり、外部からの使用はしないよ。という人も含めます)

一番簡単なのは、Docker DesktopからTerminalを開いてアクセスする方法。
image.png

開いたTerminalで「mysql -u root -p」と入力してEnter。Passwordを入力するとMariaDBのコンソールになる。
image.png

同じようなものですが、「exec」コマンドを使ってやるのもありです。
execコマンドは最低2つ以上の引数を記載しないといけないので、「mysql」コマンド書いてますが、Docker Desktop側みると「/bin/sh」でもいいみたいですね。

powershell
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」です。

sh
MariaDB [(none)]> \q
Bye

Containerを停止する / Containerを起動する

Containerの停止や起動は、httpdのときと同じです。

だんだんDockerの「自己整理」が出来てきました。
次回は、とうとう「Dockerfile」を使ったり、「Docker-compose」を使ったりしはじめようと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0