3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Windows PCにPodmanをインストールしてMySQLを動かす

Last updated at Posted at 2023-10-02

ローカル上で開発環境を構築する際、最近では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には色々な設定を追加したほうがよいのかもしれません。

以上

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?