RasberryPi と遊ぼう〜DBMS導入〜
Dockerをインストールして、Docker上でMySQLを動かす
RasberryPi上にDBMSを作って、PythonでDBを使いたかったので、DockerをインストールしてMySQLのサーバーを構築します。
Dockerのインストール
Docker公式インストールスクリプトを使用して、Dockerをインストールします。
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
Dockerのバージョンを確認します。
$ docker --version
$ Docker version 28.4.0, build d8eb465
ちゃんとインストールされていることを確認できました。
Dockerを、sudoコマンドを使わずに一般ユーザーで実行できるようにします。
※$USER は現在のログインユーザーを表します。
$ sudo usermod -aG docker $USER
Dockerの動作確認を行います。
$ docker run hello-world
〜省略〜
Hello from Docker!
This message shows that your installation appears to be working correctly.
sudoコマンドを使わなくてもDockerを実行できることを確認できました。
ついでにDocker用のディレクトリを作っておきます。
$ mkdir myDocker
MySQLサーバーを構築
MySQLのイメージをダウンロードします。
私の?RasberryPiはCPUにarm64が使用されていますが、arm64は公式のMySQLのイメージがそのまま使用できるとのことなので、イメージをダウンロードします。
イメージをダウンロードしてバックグラウンドで起動します。
このコマンドではデータがコンテナごとに作成されます。
docker run -d \
--name mysql-rpi \
-e MYSQL_ROOT_PASSWORD=パスワード \
-p 3306:3306 \
mysql:8.0
データをRasberryPi(ホスト)側に保存するように変更したい場合はこちらのコマンドを実行します。
私はこちらを選択しました。
docker run -d \
--name mysql-rpi \
-e MYSQL_ROOT_PASSWORD=パスワード \
-p 3306:3306 \
-v ~/mysql_data:/var/lib/mysql \
mysql:8.0
Dockerの実行中のコンテナを確認します。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest ca9905c726f0 4 weeks ago 5.2kB
mysql 8.0 5899f96253ce 6 weeks ago 777MB
-p オプションをつけると停止中のコンテナも含めて参照することができます。
コンテナを起動するときにはこれでコンテナ名を調べればOK。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
49083dfdb90c 5899f96253ce "docker-entrypoint.s…" 2 minutes ago Exited (1) 2 minutes ago heuristic_mclaren
ed8dee94e3bf 775909ac1896 "docker-entrypoint.s…" 5 minutes ago Exited (1) 5 minutes ago gifted_colden
930c8863dd30 5899f96253ce "docker-entrypoint.s…" 8 minutes ago Exited (1) 8 minutes ago competent_haibt
f6c7e15e4ec5 mysql:8.0 "docker-entrypoint.s…" 35 minutes ago Exited (0) 30 minutes ago mysql-rpi
0dfcd3014573 hello-world "/hello" 16 hours ago Exited (0) 16 hours ago sharp_archimedes
mysql 8.0 がダウンロードされたことが確認できました。
Dockerのイメージは以下のディレクトリにダウンロードされます。
lsコマンドで見てみても、hash化?されているのでよくわからないですが確かにいます。
/var/lib/docker/containers/
データを永続化した(RasberryPi上に保存することを選択した)場合は、データは以下に格納されます。
/var/lib/docker/volumes/
イメージの詳細を見るには以下のコマンドを実行します。
docker inspect イメージ名
Dockerのコンテナを停止するにはstopコマンドを発行します。
docker stop コンテナID または 名前
Dockerのコンテナを起動するにはstartコマンドを発行します。
docker start コンテナID または 名前
イメージとコンテナ
イメージとコンテナという名前が混在して混乱するのでちょっと整理します。
1. Docker イメージ(Image)
・コンテナを作るための 設計図・テンプレート
・実行はされない、ただのファイル群
・ソフトウェア・ライブラリ・設定などをまとめた 不変のスナップショット
💡 特徴:
・何度でもコンテナを作れる
・保存場所:/var/lib/docker/overlay2/...(内部的に管理される)
2. Docker コンテナ(Container)
・イメージをもとに 実際に起動した実行環境
・プロセスとして動作する
・書き込み可能なレイヤーを持つので、起動中にデータを書き込める
・停止・再開が可能
💡 特徴:
・docker run で作る
・docker start / docker stop で操作
・名前を付けて管理できる(例:mysql-rpi)
3. コマンド対応
操作 コマンド
イメージ一覧 docker images
イメージ削除 docker rmi イメージID
コンテナ一覧(実行中) docker ps
コンテナ一覧(停止含む) docker ps -a
コンテナ作成・起動 docker run イメージID
コンテナ起動 docker start コンテナ名
コンテナ停止 docker stop コンテナ名
コンテナ削除 docker rm コンテナ名
MySQLを操作する
MySQLを操作していきます。
次のコマンドでコンテナに入ります。
docker exec -it mysql-rpi bash
それぞれの意味は以下の通り
・-it → ターミナルに接続
・bash → シェルを開く
MySQLにログインします。
パスワードが求められますが、イメージをダウンロード時に指定したパスワードです。
mysql -u root -p
試しにデータベース一覧を見ます。
> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
ちゃんとMySQLが起動していることが確認できました。
MySQLからログアウトするには以下コマンドを実行。
exit
または
quit
コンテナからログアウトするのも同様です。
exit
>
最後に、MySQLのポート番号を開放しておきます。
$ sudo ufw allow from 192.168.1.0/24 to any port 3306
Rule added
以上、やっとこMySQLサーバーを立ち上げることができました。
これでプログラマ生活に戻れる...
次回更新がいつになるかわかりませんが、pythonからMySQLを操作します。
その前にテーブル設計から...
イメージとコンテナの削除
最後、おまけですがイメージ、またはコンテナを削除したい場合は以下のコマンドを実行します。
イメージID は docker images コマンドで確認できます。
$ docker rmi イメージID
イメージの削除
$ docker rmi イメージID
使用中で削除できないというメッセージが出た場合は、 -f オプションをつけて実行します。
$ docker rmi -f イメージID
コンテナの削除
$ docker rm コンテナ名
コメント
コメントを投稿