ローカル上で開発環境を構築する際、最近ではRDBをコンテナを上で起動して使用する機会が増えた。
ローカルの開発環境はWindowsのPCだがDocker Desktopは有料化しているので仕事では使用できないこともある。
そこでdockerとほぼ同じ機能を持つ上で無料のコンテナ環境を作れるPodmanを使用することにした。
フリーのツールPodman Desktopを使用してMySQLを起動する手順を、備忘録として以下に記載する。
Podman自体はdocker同様Linux環境で動くため、Windows PCにWSL(Linux仮想環境)がインストールされている必要があるが、Podman Desktopのインストールの中でWSLのインストールもできるようだ。
また、コンテナ起動にはpodman-composeを使用する想定である。
1. Podman Desktopのインストール手順
1.1. Podman Desktopをインストールする
ブラウザでPodman Desktopの ダウンロードサイト に行く。
1.2. ダウンロードしたインストーラを実行する
インストール後にPodman Desktopの画面が起動するので「Go To Podman Desktop」ボタンを押下する
「install」ボタンを押下する
インストールウィザードの先頭で、WSLが入っていない場合はインストールしてくれるのでチェックを入れておく
インストールウィザードでのインストールが終わった時点でコマンドプロンプト上では podman --help
のようなPodmanのコマンドが使えるのだが、まだPodmanの起動はできていないみたい。
1.3. Podmanを開始する
Podman Desktopの画面から「initialize and start」ボタンを押下してしばらくたつと以下の画面の表示なって使用可能な状態となる。
1.4. Podman DesktopをWSLの既定にする
コマンドプロンプトで wsl --list
コマンドを使用してディストリビューションの一覧に「podman-machine-default」があることを確認する。
以下のように表示される。
> wsl --list
Ubuntu-22.04(既定)
podman-machine-default
podman-machine-defaultを既定にする必要があるので wsl --set-default podman-machine-default
を実行し、以下の状態にする。
> wsl --set-default podman-machine-default
この操作を正しく終了しました。
> wsl --list
Ubuntu-22.04
podman-machine-default(既定)
2. podman-composeのインストール
Podman Desktopをインストールしただけだとpodman-composeコマンドが使用できないためpodman-composeをインストールする必要がある。
コマンドプロンプトでWSLを起動し sudo dnf install podman-compose
コマンドでインストールを開始する。
> WSL
$ sudo dnf install podman-compose
Complete!
と出たらインストール成功。
3. docker-compose.ymlと初期化スクリプトファイルの準備
コンテナ起動のために以下のファイルを作成します。
- docker-compose.yml
- my.cnf
- init.sql(ファイル名は拡張子sql以外はなんでもよい)
3.1. docker-compose.yml
コンテナの情報を記載するファイルです。
今回はMySQL8.0をここで起動したいので、以下のような内容にしています。
Podmanでもdocker-compose.ymlを読み込んでくれるのでファイル名はこれにしています。
version: "3"
services:
mysql:
image: mysql:8.0.34
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: root # MySQLパスワード設定
MYSQL_DATABASE: hogeDb # MySQLデータベース名設定
MYSQL_USER: hogeuser # MYSQL_DATABASEで指定したDBの権限をもつユーザ
MYSQL_PASSWORD: hogepass # hogeuserユーザのパスワード
TZ: Asia/Tokyo # タイムゾーン
volumes:
- mysqldata:/var/lib/mysql # DBデータ永続化
- ./my.cnf:/etc/mysql/conf.d/my.cnf
- ./initdb:/docker-entrypoint-initdb.d
ports:
- 3306:3306
volumes:
mysqldata:
設定内容は以下のような感じです。
-
image
MySQLイメージのバージョンを記載します -
environment
MySQLの環境変数です。この例ではタイムゾーンも指定 -
/var/lib/mysql
永続化するDBデータのボリュームに名前をつけます -
/etc/mysql/conf.d/my.cnf
独自の初期設定用のファイルを、docker-compose.ymlと同じフォルダにあるmy.cnfにしています -
/docker-entrypoint-initdb.d
コンテナ起動時に実行するスクリプトファイルの置き場所を、docker-compose.ymlと同階層に作ったinitdbフォルダにしています -
volumes
作成するボリュームの指定をします
3.2. my.cnf
[mysqld]
character_set_server = utf8mb4
collation_server = utf8mb4_general_ci
[client]
default-character-set = utf8mb4
設定内容は以下のような感じです。
-
character_set_server
MySQLのサーバ側に関係する文字コード -
collation_server
MySQLサーバーの照合順序 -
default-character-set
MySQLのクライアント側に関係する文字コード
3.3. init.sql
コンテナ起動時にMySQL内へのテーブルクリエイトも同時に行いたいので、create tableを記載したsqlファイルを用意しました。
docker-comose.ymlにてinit.dのディレクトリ名をinitdbにしたので、docker-compose.ymlのあるディレクトリにinitdbディレクトリを作成し、そのディレクトリ内にsqlファイルを配置します。
sqlファイルを変更した場は、ボリュームを削除したあとにコンテナを起動すると反映されます。
CREATE TABLE TestHoge (
hogeId VARCHAR(32) NOT NULL
, hogeCount SMALLINT NOT NULL DEFAULT 0
, PRIMARY KEY (hogeId)
);
3.4. ファイルの配置
WSL内に上記3ファイルを配置する必要があります。
今回はWSL起動するといるディレクトリの直下にlocaldbディレクトリを作り、そこに一式置くこととします。
windowsのエクスプローラ上だと「Linux」というドライブの下に「podman-machine-default」というフォルダがあり、その中が仮想Linuxで使用するディストリビュートを表しているようです。
WSL起動直後のディレクトリは /home/user
なので、以下のように配置するイメージです(場所は任意)。
4. コンテナの起動
4.1. コンテナを起動する
コマンドプロンプトでWSLを起動した状態で、docker-compose.ymlファイルの配置してあるディレクトリに移動する。
そこでdockerと同様に podman-compose up -d
コマンドを実行する。
$ podman-compose up -d
・
・
途中省略
・
・
exit code:0
となってコンテナ上のMySQLが起動した状態になります。
このようにPodman Desktopの画面でも確認できます。
4.2. MySQLを使用する
起動後はローカルにインストールしたRDBと同様の操作が可能です。
今回の例だと以下のようにlocalhostのポート3306でMySQLに接続できます(A5M2で接続する例)。
4.3. コンテナを終了する
dockerと同様に podman-compose down
コマンドを実行すると終了する。
保存されているデータを削除したい場合もdockerと同様に、ボリュームを削除するオプションを着けて podman-compose down -v
にて実行する。
$ podman-compose down -v
・
・
途中省略
・
・
exit code:0
あくまで試してみたらできたという方法なので、docker-compose.ymlには色々な設定を追加したほうがよいのかもしれません。
以上