#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 &lt;container name&gt; \
-p &lt;host port&gt;:1521 -p &lt;host port&gt;:5500 \
-e ORACLE_PWD=&lt;your database passwords&gt; \
-e ORACLE_CHARACTERSET=&lt;your character set&gt; \
-v [<host mount point>:]/opt/oracle/oradata \
container-registry.oracle.com/database/express:21.3.0-xe
}}

Enterprise版
#myterm2(){{
docker run -d --name &lt;container_name&gt; \
 -p &lt;host_port&gt;:1521 -p &lt;host_port&gt;:5500 \
 -e ORACLE_SID=&lt;your_SID&gt; \
 -e ORACLE_PDB=&lt;your_PDBname&gt; \
 -e ORACLE_PWD=&lt;your_database_password&gt; \
 -e INIT_SGA_SIZE=&lt;your_database_SGA_memory_MB&gt; \
 -e INIT_PGA_SIZE=&lt;your_database_PGA_memory_MB&gt; \
 -e ORACLE_EDITION=&lt;your_database_edition&gt; \
 -e ORACLE_CHARACTERSET=&lt;your_character_set&gt; \
 -e ENABLE_ARCHIVELOG=true \
 -v [&lt;host_mount_point&gt;:]/opt/oracle/oradata \
container-registry.oracle.com/database/enterprise:21.3.0.0
}}
#html(</div>)

#html(</div>)

#html(</div>)


トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS