#author("2022-11-01T13:49:49+09:00","","") #mynavi() #setlinebreak(on); * 目次 [#wcbec104] #contents - 関連 -- [[dockerメモ]] -- [[Oracleメモ]] - 参考 -- https://github.com/oracle/docker-images/issues/1814 -- https://github.com/oracle/docker-images/discussions/1951 -- https://github.com/oracle/docker-images/issues/2184#issuecomment-1182000459 -- https://stackoverflow.com/questions/68605011/oracle-12c-docker-setup-on-apple-m1/72256556#72256556 -- https://zenn.dev/waicode/articles/colima-bye-bye-intel-mac -- https://qiita.com/waicode/items/d67782c33b7d40052245 -- https://github.com/lima-vm/lima -- https://github.com/abiosoft/colima * 概要 [#vebe4346] #html(<div class="pl10">) Mac book pro(M1) 上で Oracle の docker イメージを動作させる手順を調査する。 尚、対象マシンには Docker Desktop for Mac が既にインストール済みの状態とする。 #html(</div>) * Mac の M1チップセットでは Oracle の docker イメージは動作しない [#v593f665] #html(<div class="pl10">) 以下でやり取りされている通り M1 では Oracle の docker イメージは動作しない。 - https://github.com/oracle/docker-images/issues/1814 - https://github.com/oracle/docker-images/discussions/1951 その為、M1 Mac上で Oracle を動作させるには、Mac 上に仮想マシンを作成し Intel Mac と同じ環境を作成した上で、仮想マシン上で docker を動作させる必要がある。 https://github.com/oracle/docker-images/issues/2184#issuecomment-1182000459 #html(</div>) * Colima とは [#f0e8b7bd] #html(<div class="pl10">) Mac上で仮想マシンを立ち上げるのには Lima を使用する。 Lima とは Windows でいう所の WSL のようなもので、Mac OS 上で別OSのコンテナを動かす事ができる。(Linux でも動作するとの事) https://github.com/lima-vm/lima で、この 仮想マシン上に docker を入れて、M1 では動かない Oracle 等のコンテナを動作させる事になるのだが、これを纏めてやってくれるのが Colima という事らしい。 https://github.com/abiosoft/colima #TODO(){{ イメージ }} #html(</div>) * Colima のインストール [#ne8ac2ce] #html(<div class="pl10">) #myterm2(){{ brew install colima }} #html(</div>) * dockerコンテキストの確認 [#d8ae6547] #html(<div class="pl10">) 現在の docker context を確認しておく。 ※ colima を起動すると docker のコンテキスト(向き先)が colima に変更される為、事前に確認しておく。 #myterm2(){{ docker context list NAME TYPE DESCRIPTION DOCKER ENDPOINT KUBERNETES ENDPOINT ORCHESTRATOR default * moby Current DOCKER_HOST based configuration unix:///var/run/docker.sock swarm desktop-linux moby unix:///Users/xxxxx/.docker/run/docker.sock }} 現在の dockerエンドポイントは unix:///var/run/docker.sock になっている事がわかる。 #html(</div>) * Colima の起動 [#cbba74c9] #html(<div class="pl10">) Intel Mac を再現する為、 アーキテクチャに x86_64 を指定して起動する。(デフォルトは aarch64 ) #myterm2(){{ colima start --cpu 4 --memory 4 --disk 80 -a x86_64 INFO[0000] starting colima INFO[0000] runtime: docker INFO[0000] preparing network ... context=vm INFO[0000] creating and starting ... context=vm INFO[0136] provisioning ... context=docker INFO[0136] starting ... context=docker INFO[0143] done }} CPU や ディスク、アーキの設定は $HOME/.colima/<profile-name>/colima.yaml を編集する事でも変更可能。 #html(</div>) * Colima の起動後の dockerコンテキスト確認 [#b9035f68] #html(<div class="pl10">) #myterm2(){{ docker context list NAME TYPE DESCRIPTION DOCKER ENDPOINT KUBERNETES ENDPOINT ORCHESTRATOR colima * moby colima unix:///Users/xxxxx/.colima/default/docker.sock default moby Current DOCKER_HOST based configuration unix:///var/run/docker.sock swarm desktop-linux moby unix:///Users/xxxxx/.docker/run/docker.sock }} #html(){{ <br /> コンテキストが colima に 変更された事が分かる。<br /> colima を停止(<strong><u>colima stop</u></strong>) すると元に戻るが colima 起動中でも <strong><u>docker context use コンテキスト名</u></strong> で変更する事ができる。 }} [補足] #html(<div style="padding: 10px 20px 20px 20px; background:#fff5f0; border: 1px solid #333">) 試しに colima が起動している時と起動していない時の ubuntu イメージでアーキテクチャを確認してみる。 #myterm(){{ # colima が動作している状態で ubuntu 起動してアーキテクチャを確認 docker run --rm -it ubuntu uname -a Linux caaadf1f3985 5.15.68-0-virt #1-Alpine SMP Fri, 16 Sep 2022 06:29:31 +0000 x86_64 x86_64 x86_64 GNU/Linux # colima を停止 colima stop # colima が停止している状態で ubuntu 起動してアーキテクチャを確認 docker run --rm -it ubuntu uname -a Linux 3031097570d0 5.10.104-linuxkit #1 SMP PREEMPT Thu Mar 17 17:05:54 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux }} #html(</div>) #html(</div>) * Oracleの dockerイメージのインストール 及び 実行 [#j0ff8417] #html(<div class="pl10">) https://github.com/oracle/docker-images/tree/main/OracleDatabase で公開されているリソースを使用してビルドしても良いのだが、 以下のコメントを見る限りめちゃくちゃ時間がかかる模様。 https://github.com/oracle/docker-images/discussions/1951#discussioncomment-3947399 なので、ここでは Oracle Container Registry で公開されているビルド済みイメージをそのまま使用する事にした。 https://container-registry.oracle.com ** docker login (要Oracleアカウント) [#q3898831] #html(<div class="pl10">) Express版以外を利用する場合は docker login が必要。 #myterm2(){{ docker login container-registry.oracle.com }} #html(</div>) ** イメージpull 及び 実行 [#jaa0a38e] #html(<div class="pl10">) 無償利用できる Express版では 18.4.0 と 21.3.0 が利用できる模様。 ここでは 21.3.0 を実行する。 #myterm2(){{ docker run --name oracle2130xe \ -p 1521:1521 -p 5500:5500 \ -e ORACLE_PWD=oracle_Test1 \ -e ORACLE_CHARACTERSET=AL32UTF8 \ -v `pwd`/volumes/oradata:/opt/oracle/oradata \ container-registry.oracle.com/database/express:21.3.0-xe }} #TODO(){{ 1日経っても立ち上がらない。要調査 }} [補足1] #html(<div style="padding: 10px 20px 20px 20px; background:#fff5f0; border: 1px solid #333">) 尚、docker login したアカウントで購入されていないエディションは pull できない模様。 (試しに 19.3.0 Enterprise を pull してみたら以下の通り怒られた) | docker: Error response from daemon: pull access denied for container-registry.oracle.com/database/enterprise, repository does not exist or may require 'docker login': denied: requested access to the resource is denied. | #html(</div>) [補足2] #html(<div style="padding: 10px 20px 20px 20px; background:#fff5f0; border: 1px solid #333">) エディションによって利用できる環境変数が異なる模様。 Express版 #myterm2(){{ docker run --name <container name> \ -p <host port>:1521 -p <host port>:5500 \ -e ORACLE_PWD=<your database passwords> \ -e ORACLE_CHARACTERSET=<your character set> \ -v [<host mount point>:]/opt/oracle/oradata \ container-registry.oracle.com/database/express:21.3.0-xe }} Enterprise版 #myterm2(){{ docker run -d --name <container_name> \ -p <host_port>:1521 -p <host_port>:5500 \ -e ORACLE_SID=<your_SID> \ -e ORACLE_PDB=<your_PDBname> \ -e ORACLE_PWD=<your_database_password> \ -e INIT_SGA_SIZE=<your_database_SGA_memory_MB> \ -e INIT_PGA_SIZE=<your_database_PGA_memory_MB> \ -e ORACLE_EDITION=<your_database_edition> \ -e ORACLE_CHARACTERSET=<your_character_set> \ -e ENABLE_ARCHIVELOG=true \ -v [<host_mount_point>:]/opt/oracle/oradata \ container-registry.oracle.com/database/enterprise:21.3.0.0 }} #html(</div>) #html(</div>) #html(</div>)