Zakku-Spot.com

気になる情報のリサーチブログ - Reserch blog of information you care about -

[Review]Hyper-V(Windows10)にDocker環境(MySQL~DB)一括構築

8月 18, 2023
0 0
Read Time:3 Minute, 49 Second

1.システム要件

(0)現環境:ホストOS(Windows11)、ゲストOS(Windows10Pro、22H2)
(1)システム主要件:①ネストされたゲストOSの仮想化の有効化、②BIOSレベルのHW仮想化サポート有効化、③WSL2機能の有効化、等

2.仮想化:有効化されていること。

ホストOS、ゲストOSとも、以下の手順で仮想化を有効化する。

(1)仮想マシンのネストされた仮想化の有効化:

①ホストOS(Windows11)/PowerShell(管理者モード)/

Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true

※<VMName>:対象となるゲストOSの仮想マシン名称(ここでは、Windows10_03)

※参考資料:

(a)入れ子になった仮想化の有効化(https://learn.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/user-guide/enable-nested-virtualization)

②対象となる仮想マシンを起動(ゲストOS上で移行手順実施)

(2)BIOSレベルのHW仮想化サポートの有効化:

①Windowsの機能の有効化または無効化/Hyper-V→全てON

※[ファイル名を指定して実行]/optionalfeatures.exe

※再起動が必要

※仮想化(https://docs.docker.com/desktop/troubleshoot/topics/#virtualization)

(3)WSL2機能の有効化:

①PowerShell(管理者モード)/wsl –install

※デフォルト(Ubunts)、後で変更または複数インストールの後に変更も可能

※再起動が必要(再起動直後に以下プロンプト表示あり)

※再起動直後に再度、wsl –install 実行(下図)

②Linuxユーザ情報設定

新規ユーザ名、パスワードを設定

↓ ※WSLコンソール起動

※上記の様になればWSL2インストール完了。

※もし以下のメッセージが表示された場合、上記(1)手順をが失敗している可能性が高い。

※上記内容:※BIOSレベルで仮想化が有効化されていない、という趣旨文

Ubuntu は既にインストールされています。
Ubuntu を起動しています…
Installing, this may take a few minutes…
WslRegisterDistribution failed with error: 0x80370102
Please enable the Virtual Machine Platform Windows feature and ensure virtualization is enabled in the BIOS.
For information please visit https://aka.ms/enablevirtualization
Press any key to continue…

※参考資料:

(a)WSL コマンドのインストール(https://learn.microsoft.com/ja-jp/windows/wsl/install#install-wsl-command)

(b)Docker Desktop WSL 2 バックエンド(https://docs.docker.jp/docker-for-windows/wsl.html)

(c)Windows に Docker デスクトップをインストールする(https://docs.docker.com/desktop/install/windows-install/)

(d)[ガイドツアー]Docker Desktop インストール 記録(https://zakku-spot.com/2023/06/05/ガイドツアーdocker-desktop-インストール-記録/)

3.Docker for Windowsインストール

※手順:

(a)別記事「[ガイドツアー]Docker Desktop インストール 記録」(https://zakku-spot.com/2023/06/05/ガイドツアーdocker-desktop-インストール-記録/)

※今回はv4.22(上記別記事はv4.20時点)

※上記(a)別記事最後で起動失敗しているのは、本記事の上記1~2手順を実施していなかった為。

4.エディタ準備

必要に応じてエディタ準備

(1)秀丸エディタ

(2)VSCode

※別記事「[ガイドツアー記録] Visual Studio Code 1.78.2 (x64)」(https://zakku-spot.com/2023/05/14/ガイドツアー記録%e3%80%80visual-studio-code-1-78-2-x64/)参照

5.作業フォルダ準備

6.DB準備

必要に応じてDB(テーブル、データ)作成のためのスクリプトを準備

(1)適宜フォルダ準備

(例)¥env、¥init¥sql¥data

(2)適宜スクリプト作成・配置

(a)例: init.sh、create-tables.sql、prefecture.sql

(b)詳細例:

(1) init.sh

#!/bin/bash
# create database
mysql -u root -p -e "DROP DATABASE IF EXISTS railroad; CREATE DATABASE railroad;"
# create tables
mysql -u root -p railroad < "/docker-entrypoint-initdb.d/sql/create-tables.sql"
# import data
mysql -u root -p railroad < "/docker-entrypoint-initdb.d/sql/data/prefecture.sql"

※本シェルは(実行場所がコンテナ内である(つまりLinux上にマウントされている)為)改行コードに関する問題を内包しており、実際にコンテナ作成後に、これが原因でDB作成が正しく行われない場合がある。

この事象の対応策はこちらの別記事を参照願います。

・別記事「[基礎知識]「docker-entrypoint-initdb.d」について

・別記事「[基礎知識]Dockerコンテナ内で、shファイル実行時に、改行コードに関するエラーが表示された場合の対処方法

(2) create-tables.sql

CREATE TABLE prefecture (
    code CHAR(2) NOT NULL,
    name VARCHAR(20) NOT NULL,
    name_kana VARCHAR(20) NOT NULL,
    name_rome VARCHAR(40) NOT NULL,
    created_at DATETIME(6) NOT NULL DEFAULT NOW(6),
    PRIMARY KEY (code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

(3) prefecture.sql

7.設定ファイル準備

必要に応じて、Dockerのベースイメージ・コンテナ作成の為の設定ファイル作成・配置

(例)docker-compose.yml、Dockerfile、my.cnf

設置場所(例):

作成ファイル(例):※依存関係があるので設定漏れに注意

詳細(例):

(1)docker-compose.yml

# MySQL各コンテナ構築・設定

# Docker Compose バージョン
version: "3"

# ↓サービス(各コンテナ)定義
services:
  # MySQLサービル(コンテナ)
  mysql:
    # Dockerイメージのビルド時設定
    build:
        # ※Docker Compose 実行 と同じ場所の Dockerfileを使用する、という設定
        context: .
        # Dockerfile: ビルドで使用するDockerfileのファイル名
        dockerfile: Dockerfile
    # コンテナを実行するプラットフォームの指定
    # ※windowsのamd64アーキテクチャ ※今回はコメントして実施
    # platform: windows/amd64
    # コンテナ名
    container_name: mysql-container01
    # コンテナ内の環境変数指定
    environment:
      # ※MySQLのルートユーザーのパスワード
      MYSQL_ROOT_PASSWORD: damedame
      # ※タイムゾーン
      TZ: "Asia/Tokyo"

    # ホストマシン(ローカルコンピュータ)のコンテナ内への
    # (コンテナ初期化時実行)マウント設定
    
    # ※./init(ホストマシン内)⇒マウント⇒ /docker-entrypoint-initdb.d(コンテナ内)
    volumes:
      - ./init:/docker-entrypoint-initdb.d

    # ポートフォワーディングの設定(ホストマシンからMySQLサーバーにアクセス可能にする)
    # ※ホストマシンのポート3306⇒マッピング⇒コンテナのポート3306
    ports:
      - "3306:3306"

(2)Dockerfile

# Dockerベースイメージ指定
    # 公式MySQL最新版
    # FROM mysql:latest 

    # ↓version8.0.32
FROM mysql:8.0.32


# ホストマシン(Dockerビルドを実行している
# ローカルコンピュータ)の
# ./env/my.cnf(MySQLコンテナが起動時設定)
# を /etc/mysql/conf.d/ディレクトリにコピー
ADD ./env/my.cnf /etc/mysql/conf.d/my.cnf

# コンテナ内の/etc/mysql/conf.d/my.cnf
#の権限設定

RUN chmod 644 /etc/mysql/conf.d/my.cnf

(3)my.cnf

# my.cnfファイル
#MySQLサーバーとクライアントの設定のカスタマイズ

[mysqld]
# MySQLサーバーで使用するデフォルトの文字セット
character-set-server=utf8mb4

# MySQLサーバーで使用するデフォルトの照合順序(collation)
collation-server=utf8mb4_unicode_ci

[client]
# MySQLクライアント(DB接続ツール)の設定
default-character-set=utf8mb4

8.Dockerコンテナ作成

適宜、Docker上に、MySQLイメージを取得して、MySQLコンテナ作成

もし既に(以下手順で)コンテナ作成済みで(事情(コンテナ起動時にスクリプト起動を再実行したい等の理由により))再びコンテナを再起動する場合は、別記事(「[基礎知識]/docker-entrypoint-initdb.d ディレクトリへのスクリプトやSQLの自動実行が、正常に行われない場合の対処方法」)実施の上(以降の(1)~(2)手順を飛ばして)以降の(3)手順に進む。

※今回は、上記7で準備した設定ファイルを使用して、同じフォルダで以下を実施

(1)docker-compose実行

docker-compose up -d

※以下は完了後のDocker Desktop画面

作成されたイメージ名:mysql-docker-spl01mysql

※イメージ名は、「作業フォルダ名」「(docker-compose.ymlに設定した)サービス名」になっている。

作成されたDockerネットワーク名:mysql-docker-spl01

※ネットワーク名は、「作業フォルダ名」になっている。

作成されたコンテナ名:mysql-container01

※コンテナ名は、(docker-compose.ymlで設定した)コンテナ名になっている。

(2)MySQLコンテナ起動

docker start mysql-container01

※以下はDocker Desktop画面の状態

※ちなみに、上記コンテナ停止コマンドは次の通り。

docker stop mysql-container01

※この類のコンテナ操作コマンドは以下参照

別記事(「[基礎知識]Dockerコマンドリファレンス(レビュー)~コンテナ用コマンド~」)

(3)MySQLコンテナ接続確認

docker exec -it mysql-container01 mysql -u root -p

※途中パスワード入力あり

※DockerコンテナのTerminal画面からDB接続する場合は、別記事「[基礎知識]Docker上MySQLコンテナのTerminalからMySQL接続するコマンド」参照

(4)DB作成結果確認

①DB確認

show databases;

※以下の様にシェルによるDBが作成されていればOK。

※もしDBが作成されていない場合は、シェルが正しく実行されていない可能性がある。

→次の別記事参照願います。

 ・別記事「[基礎知識]docker-compose.ymlを使用してDockerコンテナ作成・起動する手順

 ・別記事「[基礎知識]「docker-entrypoint-initdb.d」について

 ・別記事「[基礎知識]Dockerコンテナ内で、shファイル実行時に、改行コードに関するエラーが表示された場合の対処方法

②テーブル確認

show tables;

select * from prefecture;

 以上で、Hyper-V(ホストOS(Windows11))上のゲストOS(Windows10)に、
MySQLのDocker(Docker Desktop)コンテナ作成の手順は完了です。

Happy
Happy
0 %
Sad
Sad
0 %
Excited
Excited
0 %
Sleepy
Sleepy
0 %
Angry
Angry
0 %
Surprise
Surprise
0 %

Average Rating

5 Star
0%
4 Star
0%
3 Star
0%
2 Star
0%
1 Star
0%

One thought on “[Review]Hyper-V(Windows10)にDocker環境(MySQL~DB)一括構築

コメントを残す