WordPressやNextcloudなどのアプリケーションをDockerで利用する際、データベースサーバーが必要になる場面が多々あります。特にMySQLは、その高い汎用性と信頼性から、多くのプロジェクトで利用されています。本記事では、Dockerを使ってMySQLコンテナを設定し、仮想環境上で簡単にデータベースを起動する方法を、最新の情報をもとに解説します。
本記事の読者層は以下の方を想定しています。
- Dockerを利用してアプリケーションを開発したい方
- Docker上でMySQLを利用したい方
- 簡単に仮想環境でデータベースを構築したい方
Dockerのインストール
まず、Dockerがインストールされていることを確認してください。まだインストールされていない場合は、次の公式ドキュメントを参考にインストールを行いましょう。
インストール確認方法
Dockerが正しくインストールされているか確認するには、以下のコマンドをターミナルで実行します。
$ sudo $ docker --version
表示されるバージョン番号がインストールされているDockerのバージョンです。例えば、以下のように表示されます。
Docker version 20.21, build 123abc456
MySQLをDockerで利用する方法
ここからは、DockerでMySQLを利用する具体的な手順を解説していきます。本記事では、Ubuntu 18.04 LTS環境においてDockerを使用しますが、他のLinuxディストリビューションやWindows、macOSでも手順はほぼ同じです。
使用環境
- Docker バージョン: 20.21
- MySQL バージョン: 5.7(最新のMySQLイメージを使用します)
Docker HubからMySQLイメージを取得する
まず、Docker HubからMySQLの最新イメージをダウンロードします。Docker Hubは、公式のコンテナイメージを提供しているリポジトリです。
https://hub.docker.com/_/mysql
以下のコマンドでMySQLのイメージを取得します。
$ sudo docker pull mysql:latest
mysql:latestと指定することで、最新バージョンのMySQLイメージをダウンロードできます。成功すると、ダウンロードされたイメージが以下のように確認できます。
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest a3a2968869cf 4 days ago 538MB
nextcloud latest eff70b1472d7 5 days ago 994MB
コンテナの基本的コマンド
本記事では、このMySQLのイメージを使用してDockerの基本的なコマンドの使い方を解説します。
# | コマンド | 意味 |
---|---|---|
1 | docker pull | docker hubでイメージのダウンロード |
2 | docker run | dockerのコンテナ化 |
3 | docker ps | 実行中コンテナのリスト |
4 | doker image | docker hubでダウンロードしたイメージリスト |
5 | docker stop | コンテナの停止 |
6 | docker rm | コンテナの削除 |
MySQLコンテナの起動方法
次に、MySQLコンテナを起動します。以下のコマンドを実行してください。
$ sudo docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=(passwd) -d mysql
cd40147de5fcf91245b2ced3f0da483db39c4638a91a6716d376b355d2529c62
--name some-mysql
はコンテナに付ける名前です。-e MYSQL_ROOT_PASSWORD=(passwd)
は、MySQLのrootユーザーのパスワードを指定しています。-d
はバックグラウンドでコンテナを実行するオプションです。
起動後、コンテナリストを確認して、MySQLコンテナが正しく起動しているか確認します。
$ sudo docker ps -a
以下のような出力が得られれば、MySQLコンテナが正しく起動しています。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cd40147de5fc mysql "docker-entrypoint.s…" About a minute ago Up About a minute 3306/tcp, 33060/tcp some-mysql
MySQLのコンテナの停止と削除
MySQLコンテナを停止するには、以下のコマンドを使用します。
$ sudo docker stop some-mysql
コンテナを削除する場合は、コンテナが停止している必要があります。以下のコマンドで削除します.
$ sudo docker rm some-mysql
削除方法は以下の通りです。Dockerのコンテナを「docker stop」で止めからでないと、「docker rm」で削除できません。
実行中コンテナのリスト
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cd40147de5fc mysql "docker-entrypoint.s…" About a minute ago Up About a minute 3306/tcp, 33060/tcp some-mysql
6af0d5c90363 nextcloud "/entrypoint.sh apac…" 2 days ago Up 2 days 0.0.0.0:8080->80/tcp, :::8080->80/tcp friendly_banach
STATUSが「up」となっているため、駆動しています。
$ % sudo docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest a3a2968869cf 4 days ago 538MB
nextcloud latest eff70b1472d7 5 days ago 994MB
コンテナ内に入って操作する
MySQLの設定やその他の操作を行うために、コンテナ内に入るには以下のコマンドを実行します。
$ sudo docker exec -it a3a2968869cf /bin/bash
or
$ sudo docker exec -it some-mysql /bin/bash
Docker内でテキストエディタ等をインストールするためには、「apt-get update」コマンドを入力後に apt-get install でソフトをインストールします。
$ apt-get update
$ apt-get install vim
コンテナ内でMySQLクライアントにアクセスするには、次のようにします。
$ mysql -u root -p
ここで、MYSQL_ROOT_PASSWORD
で設定したパスワードを入力します。
Dockerネットワークの作成
複数のコンテナを連携させて利用する場合、Dockerネットワークを作成する必要があります。以下のコマンドで新しいネットワークを作成します。
$ sudo docker network create network1
70e825fbadf7ce7aab8eae4d1cfc5ac48d5d649a45429aa3a00c2601c58ec3f7
作成したネットワークを確認するには、以下のコマンドを使用します。
出力例:
$ sudo docker network ls
NETWORK ID NAME DRIVER SCOPE
f2780d0f51c7 bridge bridge local
2507fa523fea host host local
70e825fbadf7 network1 bridge local
8f5f8a931f18 none null local
作成したネットワークをMySQLコンテナに適用するには、--net
オプションを追加してコンテナを起動します。
$ sudo docker run --name some-mysql --net=my-network -e MYSQL_ROOT_PASSWORD=myrootpass -e MYSQL_DATABASE=mydb -e MYSQL_USER=myuser -e MYSQL_PASSWORD=mypassword mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
Docker用のMySQLの起動
以下のようにmysqlを起動します。
$ sudo docker run --name some-mysql --net=network1 -e MYSQL_ROOT_PASSWORD=myrootpass -e MYSQL_DATABASE=ownclouddb -e MYSQL_USER=owncloudur -e MYSQL_PASSWORD=onwcloudpass mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --defaut-authentication-plugin=myrootpass
mySQLのデータベース設定
- MYSQL_ROOT_PASSWORD=myrootpass
- MYSQL_DATABASE=ownclouddb
- MYSQL_USER=owncloudur
- MYSQL_PASSWORD=onwcloudpass
mySQLのデータベース用文字列設定
- character-set-server=utf8mb4
- collation-server=utf8mb4_unicode_ci
- defaut-authentication-plugin=myrootpass
としておきます。
次に、コンテナ内のbashプロンプト上でmysqlを立ち上げます。
$ bash-4.4# mysql -u root -p
ここで、パスワードが求められますが、上記で「MYSQL_ROOT_PASSWORD=myrootpass」と指定してありますのでこれを利用します。
これ以降は普通のmySQLの設定と同じです。
細かいmySQLの利用方法については以下の記事をご参照ください。
まとめ
DockerでMySQLをセットアップし、データベースを迅速に起動・停止する方法を解説しました。Dockerを利用することで、MySQLを簡単に仮想環境で構築でき、柔軟な開発環境を手に入れることができます。ぜひ、この記事を参考にして、自分のプロジェクトにDockerとMySQLを導入してみてください。
DockerにてmySQLを起動する場合、
- (1) Docker pull mysql→Docker rum mysql
- Docker stop mysql→Docker rm mysql
という手続きが必要である。
次回の記事をご期待下さい。どうぞよろしくお願いいたします。
コメント