一筋縄ではいきませんでした、以下記録。
Mac OS上でLinux仮想マシンを立ち上げるLimaを使ってIntel Macと同じ環境を再現するとのこと
Colimaをインストール
OracleDBはDockerで素直に起動しないらしく、Limaでつくった仮想マシンの上に、Dockerを入れるという手順を踏む必要があるそうです。
で、このLima + Dockerをやってくれるのが、これからとってくるColimaだそう。
brew install colima dockerすでにDocker Desktop(Docker for Mac)をインストールしている場合は、ここでdockerを追加する必要ありません。
とのことでしたが、のちの工程でDockerがないと怒られたので、インストールしました。
Colimaを起動
x86アーキテクチャで仮想Linuxを起動させるためにコマンドに引数を追加します。-a x86_64 ←これです。
qemuというのが必要なようで、さらにinstallしました。
もう一度startコマンドを叩くも、guest agent binaryがないと言われたので、さらにinstallしました。
colima start --cpu 4 --memory 4 --disk 100 -a x86_64
(中略)
FATA[0002] error starting vm: error at 'creating and starting': qemu is required to emulate x86_64: qemu-img not found, run 'brew install qemu' to install
$ brew install qemu
$ colima start --cpu 4 --memory 4 --disk 100 -a x86_64
> Starting the instance "colima" with VM driver "qemu"
> guest agent binary could not be found for Linux-x86_64 (Hint: try installing `lima-additional-guestagents` package)
$ brew install lima-additional-guestagents
$ colima start --cpu 4 --memory 4 --disk 100 -a x86_64
INFO[0000] starting colima
INFO[0000] runtime: docker
INFO[0001] starting ... context=vm
INFO[0058] provisioning ... context=docker
INFO[0066] starting ... context=docker
INFO[0073] done OracleDBをpullしてrunする
▼Oracle Container RegistryのExpress Edition(XE)についてのページ
https://container-registry.oracle.com/ords/f?p=113:4:9711302640523:::4:P4_REPOSITORY,AI_REPOSITORY,AI_REPOSITORY_NAME,P4_REPOSITORY_NAME,P4_EULA_ID,P4_BUSINESS_AREA_ID:803,803,Oracle%20Database%20Express%20Edition,Oracle%20Database%20Express%20Edition,1,0&cs=3RG1iqhi24GeHv63Xci_0QtldNIdv98MF4IGSxJVmamGbQMC4cUQxbtSnq1nrlqedW7_aGNdsUICq51CHOXFtXw
// Tagsのコマンドを実行
$ docker pull container-registry.oracle.com/database/express:21.3.0-xe
下記はうちの環境ではうまくいかなかったので、Dockerボリュームにマウントする方法(似てるけど、さらに下のコマンド)でやりました。ChatGPT様様です。
// このディレクトリをコンテナ内の /opt/oracle/oradata にマウント(共有)するんだけど…
// 書込権限を付与してもCannot create directory "/opt/oracle/oradata/XE".と言われてしまう
mkdir -p /Users/eri/docker/oracle/21.3.0-xe
$ docker run --name 21.3.0-xe \
--memory=2048M \
-p 1521:1521/tcp -p 5500:5500/tcp \
-e ORACLE_PWD=Password \
-e INIT_SGA_SIZE=1028M \
-e INIT_PGA_SIZE=500MB \
-e ORACLE_CHARACTERSET=AL32UTF8 \
-v /Users/Eri/docker/oracle/21.3.0-xe:/opt/oracle/oradata \
container-registry.oracle.com/database/express:21.3.0-xeDockerボリュームをマウントしてうまくいきました
$ docker run --name 21.3.0-xe \
--memory=2048M \
-p 1521:1521/tcp \
-p 5500:5500/tcp \
-e ORACLE_PWD=Password \
-e INIT_SGA_SIZE=1028M \
-e INIT_PGA_SIZE=500MB \
-e ORACLE_CHARACTERSET=AL32UTF8 \
-v oracle18-vol:/opt/oracle/oradata \ //ここが違う、上記はUsers配下でこっちはDockerボリューム
container-registry.oracle.com/database/express:21.3.0-xe
SQLDeveloperから接続してみる
SQLDeveloperは参考サイトの時代から改善されたようで、Javaのバージョンがどうとかは問題にならなかったけど、ようこそページでレインボーぐるぐるになってしまうので、ようこそページが表示されないように設定を書き換える
$ find ~/.sqldeveloper/ -name dtcache.xml
/Users/Eri/.sqldeveloper//system24.3.1.347.1826/o.ide.14.1.2.0.42.240731.1054/dtcache.xmlこのファイルを開いて、下記記載を探す
<Key>oracle.help.StartPageEditor:TabCheckboxState:Default</Key>
<Value class="java.lang.Boolean">false</Value>あればtrueにして、なければ記載を追加する。
//追加する場合
<dt-cache>
<!-- いっぱいあるから省略 -->
<Item>
<Key>oracle.help.StartPageEditor:TabCheckboxState:Default</Key>
<Value class="java.lang.Boolean">false</Value>
</Item>
</dt-cache>最後に…
開発機については参考にしたサイトにこんな記載がありました。激しく同意ですが、今回は知見を広げるためにMacで開発進めていきます。。。
MacにparallelでWin環境入れてますが違うそうじゃないって話ですし。
▼Colimaはx86_64で動かせるが決して速くはない
M1,M2 Macでも
x86_64で動かせるcolimaはとても便利ですが、本来はARMアーキテクチャで動かせないものを、仮想化技術で無理矢理動かしています。そのため動作が決して速くありません。というより、体感でも分かるくらいに「遅い」です。
本格的に開発環境を整えるなら、M1,M2 MacでなくIntel MacやWindowsなどx86アーキテクチャの開発端末をもう1つ用意するのが無難です。
我慢できないレベルで遅いわけではありません。そのため「普段それほど多くはOracle Databaseを使った開発はしないけど、たまに必要になる」程度の開発者であれば、この環境でも十分でしょう。
参考にしたサイト
M1,M2(ARM) MacBookにColimaでOracle Databaseを手間なくインストールする
https://qiita.com/waicode/items/d67782c33b7d40052245
M1,M2(ARM)のMacBookでOracle SQL Developerをエラーゼロで動かす
https://qiita.com/waicode/items/cd64cee96895b8ca7080

