LoginSignup
7
5

More than 3 years have passed since last update.

Windows10 Home に Docker Desktop をインストールしてMySQLサーバを起動してSQLで動作確認するまでの手順2021/02

Last updated at Posted at 2021-02-28

Windows を最新にする

バージョンが降るとインストールできない場合があるので、最新かどうか確認します。
Windows キーを押して設定ボタン
image.png
を押します。
image.png
表示された設定画面の右上の Windows Update 部分をクリックします。
image.png
image.png

Docker ホームページを開く

下記 URL の Docker 公式ページを開きます。(英語ページです)
https://www.docker.com
image.png

インストーラーをダウンロード

Get Started ボタンを押します。
image.png

Docker Desktop の Download for Windows ボタンを押します。
image.png
image.png

インストーラーを実行

Docker Desktop Installer.exe がダウンロードされますので、
ダウンロードが完了したら実行します。
image.png

チェックは全てつけた状態で Ok ボタンを押します。
image.png

しばらく待ちます。
image.png

終了したら Close and restart ボタンを押して再起動します。
image.png

カーネル更新プログラムのインストール

再起動後以下の画面が出たら https://aka.ms/wsl2kernel のリンクを開きます。
※この画面は後で使うので消さないでおいておきます。
image.png

x64 マシン用 WSL2 Linux カーネル更新プログラムパッケージ のリンクをクリックします。
image.png
保存ボタンを押してダウンロードします。
image.png
ダウンロードした wsl_update_x64.msi を実行します。
image.png

Next ボタンを押します。
image.png

Finish ボタンを押します。
image.png

Restart ボタンを押します。
image.png

しばらく待つとDockerが起動します。
image.png

この画面は今回特に使わないので閉じます。

MySQLで動作確認

まずバージョン情報を見てみます。

Windows+R キーを押します。
image.png

cmd と入力して OK ボタンを押します。

image.png

Docker バージョン情報表示

docker version と入力し Enter キーを押して実行します。
image.png

ずらずらと情報が表示されます。
image.png

つぎに、試しにMySQLを動かしてみます。
以下のコマンドを入力して実行します。

MySQLサーバのDockerコンテナを起動

MySQLサーバの起動
docker run -e MYSQL_ROOT_PASSWORD=password mysql

image.png
ずらずらと表示が出てきて ready for connections. という行が表示されれば起動完了です。

docker run で docker コンテナという仮想サーバ的なものを起動します。
mysql というのが立ち上げるコンテナの種類になります。
-e MYSQL_ROOT_PASSWORD=password は環境変数の設定で MySQL の root ユーザのパスワードを指定しています。

次にサーバに入ってみます。
Windows+R キーでもう一つ別のコマンドプロンプトを起動します。
image.png

以下のコマンドで動作中のコンテナ一覧が確認できます。

Dockerコンテナ一覧表示

実行中Dockerコンテナ一覧を表示
docker ps

image.png

この一覧にある mysql の CONTAINTER ID をコピーしておきます。
※IDは毎回変わります。今回は 11576ddb996a です。

そのID を指定して以下のコマンドを実行します。

Dockerコンテナのシェルに入る

Dockerコンテナのシェルに入る
docker exec -it 11576ddb996a bash

image.png

そうすると root@11576ddb996a:/# が表示されます。
これは mysql サーバ内のシェルに入った状態です。

次に以下のコマンドでMySQLクライアントを起動します。

MySQLクライアント起動

MySQLクライアント起動
mysql -uroot -p

パスワードを聞かれるので環境変数で指定した password を指定します。

以下のように、mysql> が表示されればOKです。

MySQLクライアント起動後
root@11576ddb996a:/# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.23 MySQL Community Server - GPL

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>

データベース一覧

データベース一覧を表示してみます。

データベース一覧表示
show databases;
データベース一覧表示後
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

データベース作成

データベースを作成してみます。

データベース作成
create database testdb;
データベース作成結果
mysql> create database testdb;
Query OK, 1 row affected (0.04 sec)

データベース切り替え

testdbに入ります。

データベース切り替え
use testdb;
データベース切り替え結果
mysql> use testdb;
Database changed

テーブル作成

テーブルを作ってみます。

テーブル作成
create table test_users(id int auto_increment primary key, name varchar(10), birthday date);
テーブル作成結果
mysql> create table test_users(id int auto_increment primary key, name varchar(10), birthday date);
Query OK, 0 rows affected (0.04 sec)

レコード挿入

レコードを挿入してみます。

レコード挿入
insert into test_users(name,birthday) values('tanaka', '1990-01-02');
レコード挿入結果
mysql> insert into test_users(name,birthday) values('tanaka', '1990-01-02');
Query OK, 1 row affected (0.04 sec)

テーブル内容確認

テーブルの内容を確認します。

テーブル内容確認
select * from test_users;
テーブル内容確認結果
mysql> select * from test_users;
+----+--------+------------+
| id | name   | birthday   |
+----+--------+------------+
|  1 | tanaka | 1990-01-02 |
+----+--------+------------+
1 row in set (0.00 sec)

問題なく使えますね。(日本語を使っていないのは実は現状では扱えないためです。この後日本語も扱う方法を紹介します。)

後片付け

mysql> が表示されている状態で exit を実行し、MySQL クライアントを終了します。

root@11576ddb996a:/# が表示されている状態で exit を実行し、シェルを終了します。

コンテナ停止

次に以下のコマンドでMySQLサーバを停止します。
※ 11576ddb996a は コンテナID です。docker ps で確認できるものです。

Dokcerコンテナ停止
docker stop 11576ddb996a

停止されているか docker ps で確認します。

実行中コンテナ一覧
C:\Users\nakaz>docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

一覧が空になっているのでコンテナが停止したことが確認できました。

コンテナの起動

再度起動したいときは以下のコマンドを実行します。

コンテナ起動
docker start 11576ddb996a

起動したいときにコンテナID がわからなくなった場合は、以下のコマンドで確認できます。

停止中も含めたコンテナ一覧
docker ps -a
停止中も含めたコンテナ一覧実行結果
C:\Users\nakaz>docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                     PORTS     NAMES
11576ddb996a   mysql     "docker-entrypoint.s…"   41 minutes ago   Exited (0) 4 minutes ago             naughty_curran

コンテナ削除

もしコンテナが不要になって消したい場合は以下のコマンドを実行します。

コンテナ削除
docker rm 11576ddb996a
コンテナ削除結果
C:\Users\nakaz>docker rm 11576ddb996a
11576ddb996a

コンテナ削除後確認

再度 docker ps -a を実行すると消えていることが確認できます。

コンテナ削除後確認結果
C:\Users\nakaz>docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

MySQL で日本語入力に対応する

先ほどのやり方だと MySQL で日本語が正しく扱えない状態ですので、日本語対応の環境を作ってみます。
また、タイムゾーンも世界標準時(UTC)となっているので日本時間にしてみます。

メモ帳を開いて以下の内容を入力します。

Dockerfile 作成

FROM mysql
RUN apt-get update && apt-get install -y locales-all
ENV LC_ALL="ja_JP.UTF-8" TZ="Asia/Tokyo"

image.png

FROM mysql は先ほど使っていた mysql のイメージを元にするという意味です。
RUN...の行は世界で使われている言語設定をインストールしています。その中に日本語も含まれています。
ENV...の行は言語設定(ロケール)を日本、タイムゾーンを東京に設定しています。

ファイル名は Dockerfile と入力してファイルの種類は「すべてのファイル」としてユーザフォルダに保存します。
image.png

Docker ファイルから Docker イメージを作成

コマンドプロンプトを開いて dir コマンドで Dockerfile があることを確認します。
image.png

以下のコマンドを実行して、Dockerfile から Docker イメージを作成します。
※もともと用意されているイメージ(mysql)に追加でインストールや設定を行ったもので新しいイメージを作ることができます。

Dockerイメージ作成
docker build -t mysqlj .

-t mysqlj で作成するイメージに名前を付けることができます。(ここでは mysqlj という名前を付けています。)

Dockerイメージ作成結果
C:\Users\nakaz>docker build -t mysqlj .
[+] Building 0.2s (6/6) FINISHED
 => [internal] load build definition from Dockerfile                                                               0.1s
 => => transferring dockerfile: 306B                                                                               0.0s
 => [internal] load .dockerignore                                                                                  0.0s
 => => transferring context: 2B                                                                                    0.0s
 => [internal] load metadata for docker.io/library/mysql:latest                                                    0.0s
 => [1/2] FROM docker.io/library/mysql                                                                             0.0s
 => CACHED [2/2] RUN apt-get update && apt-get install -y locales-all                                              0.0s
 => exporting to image                                                                                             0.0s
 => => exporting layers                                                                                            0.0s
 => => writing image sha256:9708290e1f00c169ec210361aa1dcebe60744b694b8eb3325bf7cf862e8af7b5                       0.0s
 => => naming to docker.io/library/mysqlj                                                                          0.0s

作成したイメージを使ってコンテナを起動

作成したイメージからコンテナを起動します。

日本語対応MySQLサーバ起動
docker run --name=mysqlj1 -e=MYSQL_ROOT_PASSWORD="password" mysqlj mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

※--name=mysqlj1 でコンテナに名前を付けることができます。ここでは mysqlj1 という名前を付けています。
※mysqld 以降は MySQL で日本語を扱う設定にするためにつけています。

日本語動作確認

日本語が入力できるか確認してみます。

MySQLクライアント起動
docker exec -it mysqlj1 mysql -uroot -p

※コンテナIDの代わりにコンテナ起動時につけた名前を指定することができます。
※bash の部分を mysql にすることでいきなりクライアントを起動することができます。

日本語が扱える設定かどうか確認します。

文字コード設定確認

文字コード設定確認
show variables like '%chara%';
文字コード設定確認結果
mysql> show variables like '%chara%';
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | utf8mb4                        |
| character_set_connection | utf8mb4                        |
| character_set_database   | utf8mb4                        |
| character_set_filesystem | binary                         |
| character_set_results    | utf8mb4                        |
| character_set_server     | utf8mb4                        |
| character_set_system     | utf8                           |
| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.02 sec)

ちなみに、最初の日本語が扱えない時の設定は以下のようになっていました。

mysql> show variables like '%chara%';
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | latin1                         |
| character_set_connection | latin1                         |
| character_set_database   | utf8mb4                        |
| character_set_filesystem | binary                         |
| character_set_results    | latin1                         |
| character_set_server     | utf8mb4                        |
| character_set_system     | utf8                           |
| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.03 sec)

※latin1 になっていると日本語が文字化けしたりします。

日本語レコード作成

データベース一覧を確認します。

データベース一覧確認結果
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

さっき作った testdb がないことがわかります。
これは、コンテナごとに別々のデータ領域が作られるためです。
コンテナは docker run を実行するごとに作成され、 docker ps -a で一覧を確認できます。

先ほどと同じように、データベースとテーブルを作って日本語のレコードを挿入してみます。

データベース作成結果
mysql> create database testdb;
Query OK, 1 row affected (0.04 sec)
データベース切り替え結果
mysql> use testdb;
Database changed
テーブル作成結果
mysql> create table test_users(id int auto_increment primary key, name varchar(10), birthday date);
Query OK, 0 rows affected (0.04 sec)

日本語でレコードを挿入してみます。

レコード挿入
insert into test_users(name,birthday) values('山田太郎', '1990-01-02');
レコード挿入結果
mysql> insert into test_users(name,birthday) values('山田太郎', '1990-01-02');
Query OK, 1 row affected (0.04 sec)

日本語レコード確認

挿入したデータを確認してみます。

テーブル内容確認
select * from test_users;
テーブル内容確認結果
mysql> select * from test_users;
+----+--------------+------------+
| id | name         | birthday   |
+----+--------------+------------+
|  1 | 山田太郎     | 1990-01-02 |
+----+--------------+------------+
1 row in set (0.00 sec)

正しく表示されました。

7
5
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
7
5