WSL2+DockerでOracleDBExpress18.4をインストールしたときのメモ

# 0. はじめに

仕事でWindowsOS＋OracleDBを使っている。
その環境を自宅学習用で使いたくて、Oracle公式のDockerイメージを使うことにした。
はじめはすぐにできると思っていたので、メモすらしていなかったが、思ったより苦労してしまったので、後からではあるがメモを一部復元しながらではあるが、残すことにした。

:::note warn
Oracle公式のDockerイメージを使えるのは、x86-64 限定です。
MacのAppleシリコン（M1プロセッサなど)は非対応です。
:::

:::note warn
DockerDesktopをインストールするには、Intel Virtualization Technologyに対応している必要があります。
:::

# 1. wsl インストール
+ windows 構成の追加／変更で追加
  + Windowsコントロールパネルから「プログラムと機能」を開く
  + プログラムと機能の「Windowsの機能の有効化または無効化」を開く
  + Windowsの機能の有効化または無効化から、「Linux用Windowsサブシステム」にチェックを入れて「OK」を押し、再起動する。
+ wsl の default を wsl2にコマンドで変更
  + Powershellを開き「wsl --set-default-version 2」コマンドを実行する
+ Windowsの更新
  + [WSL 2 Linux カーネルの更新](https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel)
+ 必須でないが WindowsTerminal を Windows Store でインストールしていると便利


# 2. WSLから名前解決できるようにするための設定変更

:::note warn
ディストリビューションがAlpineではOracleDBのインストールはできませんでした。
必要なライブラリを把握すればAlpineでも可能かもしれませんが、私ではどうにもできませんでした。
結局、Ubuntuに変えることで解決しました。
:::

:::note warn
WSLでは、インストールしたLinuxの中から外部のサーバ（Githubなど)にアクセスする際の名前解決がデフォルトではできません。
OracleDBのインストーラーを使用するために、必要な設定となります。
:::

+ wsl のイメージを Windows Store から Ubuntu ダウンロード
+ hostで「ipconfig」コマンドを実行して、インターネット接続を行っているアダプタのデフォルトゲートウェイを控える
+ linuxにrootでログイン(wsl -d Ubuntu2004)

```sh:terminal
vi /etc/wsl.conf
```

```/etc/wsl.conf
[network]
generateResolvConf = false

[user]
default = root
```

```sh:terminal
rm /etc/resolv.conf
vi /etc/resolv.conf
```

```/etc/resolv.conf
nameserver 172.29.80.1
nameserver 192.168.10.1
nameserver 8.8.8.8
```
HOSTのデフォルトゲートウェイ(192.168.10.1)
GoogleのDNSサーバ(8.8.8.8)

+ WSLの再起動
  + Powershell「wsl --shutdown」

+ 任意ではあるが、一応 WSL のメモリ消費を制限する
  + C:/Users/<UserName>/.wsconfig    -> memory 1GB 以上


# 3. docker インストール
+ Biosで「Intel Virtualization Technology」を有効化
+ docker desktop の公式からダウンロード
+ docker desktop をインストール
  + インストーラーに従って、そのままインストールする 
+ dockerDesktopを起動して、設定画面を開く
  + GeneralでUse the WSL2 Based engine => ture
  + GeneralでUse Docker Compose V2 => true
  + ResourcesでWSLINTEGRATIONを選択して、Ubuntu => true

# 4. OracleDB インストール

Ubuntu内でgitコマンドをインストールして次のコマンドを実行する

```
git clone https://github.com/oracle/docker-images.git
cd docker-images/OracleDatabase/SingleInstance/dockerfiles/
bash buildContainerImage.sh -v 18.3.0 -x
```

```
root@POB1Q4P:~/docker-images/OracleDatabase/SingleInstance/dockerfiles# bash buildContainerImage.sh -v 18.4.0 -x
WARNING: No blkio throttle.read_bps_device support
WARNING: No blkio throttle.write_bps_device support
WARNING: No blkio throttle.read_iops_device support
WARNING: No blkio throttle.write_iops_device support
Checking Docker version.
Ignored MD5 checksum.
==========================
Container runtime info:
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc., v0.8.2)
  compose: Docker Compose (Docker Inc., v2.5.1)
  sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc., 0.6.0)
  scan: Docker Scan (Docker Inc., v0.17.0)

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 20.10.14
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 3df54a852345ae127d1fa3092b95168e4a88e2f8
 runc version: v1.0.3-0-gf46b6ba
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 5.10.16.3-microsoft-standard-WSL2
 Operating System: Docker Desktop
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 3.84GiB
 Name: docker-desktop
 ID: WWDH:O5EY:M6NM:NM3C:2G2G:EFW4:NR5Z:BMRN:AVQJ:YYQG:I7MT:637K
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 HTTP Proxy: http.docker.internal:3128
 HTTPS Proxy: http.docker.internal:3128
 No Proxy: hubproxy.docker.internal
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  hubproxy.docker.internal:5000
  127.0.0.0/8
 Live Restore Enabled: false

WARNING: No blkio throttle.read_bps_device support
WARNING: No blkio throttle.write_bps_device support
WARNING: No blkio throttle.read_iops_device support
WARNING: No blkio throttle.write_iops_device support
==========================
Building image 'oracle/database:18.4.0-xe' ...
[+] Building 623.7s (8/8) FINISHED
 => [internal] load build definition from Dockerfile.xe                                                                                                                                0.0s
 => => transferring dockerfile: 35B                                                                                                                                                    0.0s
 => [internal] load .dockerignore                                                                                                                                                      0.0s
 => => transferring context: 2B                                                                                                                                                        0.0s
 => [internal] load metadata for docker.io/library/oraclelinux:7-slim                                                                                                                  3.5s
 => [internal] load build context                                                                                                                                                      0.1s
 => => transferring context: 175B                                                                                                                                                      0.0s
 => CACHED [1/3] FROM docker.io/library/oraclelinux:7-slim@sha256:ce16f06496bdc911eeba5cd9bc38372da0d8b758638dfb1502ff0aa1704b590e                                                     0.0s
 => [2/3] COPY checkSpace.sh runOracle.sh setPassword.sh checkDBStatus.sh oracle-xe-18c.conf /install/                                                                                 0.1s
 => [3/3] RUN chmod ug+x /install/*.sh &&     sync &&     /install/checkSpace.sh &&     cd /install &&     yum -y install expect openssl oracle-database-preinstall-18c &&     sed   580.5s
 => exporting to image                                                                                                                                                                39.4s
 => => exporting layers                                                                                                                                                               39.3s
 => => writing image sha256:b9aaf3e705cd74a719bd15fa56e7bb02185c464783f7a9763df05a6cf0f8be76                                                                                           0.0s
 => => naming to docker.io/oracle/database:18.4.0-xe                                                                                                                                   0.0s

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them


  Oracle Database container image for 'xe' version 18.4.0 is ready to be extended:

    --> oracle/database:18.4.0-xe

  Build completed in 625 seconds.

root@POB1Q4P:~/docker-images/OracleDatabase/SingleInstance/dockerfiles#
```




```
version: "3"

services:
  db:
    container_name: oracle
    image: oracle/database:18.4.0-xe
    ports:
      - "15210:1521"
      - "55000:5500"
    # environment:
    #   - ENABLE_ARCHIVELOG=ture
    #   - ORACLE_EDITION=express 
    #   - ORACLE_PWD=Oracle18
    #   - ORACLE_PDB=oracle
    # volumes:
    #   - type: bind
    #     source: ".db/"
    #     target: "/opt/oracle/oradata/"
      # - type: bind
      #   source: "startup"
      #   target: "/opt/oracle/scripts/startup"
      # - type: bind
      #   source: "setup"
      #   target: "/opt/oracle/scripts/setup"
    # logging:
    #   driver: json-file
    #   options:
    #     max-size: 5m
```








```
root@POB1Q4P:~# docker logs -f oracle
ORACLE PASSWORD FOR SYS AND SYSTEM: 1a24600656e7b0de
Specify a password to be used for database accounts. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9]. Note that the same password will be used for SYS, SYSTEM and PDBADMIN accounts:
Confirm the password:
Configuring Oracle Listener.
Listener configuration succeeded.
Configuring Oracle Database XE.
Enter SYS user password: 
*****************
Enter SYSTEM user password: 
*****************
Enter PDBADMIN User Password: 
****************
Prepare for db operation
7% complete
Copying database files
29% complete
Creating and starting Oracle instance
30% complete
31% complete
34% complete
38% complete
41% complete
43% complete
Completing Database Creation
47% complete
50% complete
Creating Pluggable Databases
54% complete
71% complete
Executing Post Configuration Actions
93% complete
Running Custom Scripts
100% complete
Database creation complete. For details check the logfiles at:
 /opt/oracle/cfgtoollogs/dbca/XE.
Database Information:
Global Database Name:XE
System Identifier(SID):XE
Look at the log file "/opt/oracle/cfgtoollogs/dbca/XE/XE.log" for further details.

Connect to Oracle Database using one of the connect strings:
     Pluggable database: 5987c110af2f/XEPDB1
     Multitenant container database: 5987c110af2f
Use https://localhost:5500/em to access Oracle Enterprise Manager for Oracle Database XE
The Oracle base remains unchanged with value /opt/oracle
#########################
DATABASE IS READY TO USE!
#########################
The following output is now a tail of the alert.log:
2022-05-22T05:13:12.349495+00:00
XEPDB1(3):Resize operation completed for file# 10, old size 358400K, new size 368640K
2022-05-22T05:13:16.952046+00:00
XEPDB1(3):CREATE SMALLFILE TABLESPACE "USERS" LOGGING  DATAFILE  '/opt/oracle/oradata/XE/XEPDB1/users01.dbf' SIZE 5M REUSE AUTOEXTEND ON NEXT  1280K MAXSIZE UNLIMITED  EXTENT MANAGEMENT LOCAL  SEGMENT SPACE MANAGEMENT  AUTO
XEPDB1(3):Completed: CREATE SMALLFILE TABLESPACE "USERS" LOGGING  DATAFILE  '/opt/oracle/oradata/XE/XEPDB1/users01.dbf' SIZE 5M REUSE AUTOEXTEND ON NEXT  1280K MAXSIZE UNLIMITED  EXTENT MANAGEMENT LOCAL  SEGMENT SPACE MANAGEMENT  AUTO
XEPDB1(3):ALTER DATABASE DEFAULT TABLESPACE "USERS"
XEPDB1(3):Completed: ALTER DATABASE DEFAULT TABLESPACE "USERS"
2022-05-22T05:13:20.144871+00:00
ALTER PLUGGABLE DATABASE XEPDB1 SAVE STATE
Completed: ALTER PLUGGABLE DATABASE XEPDB1 SAVE STATE
```

「DATABASE IS READY TO USE!」が出たらインストール成功です。

# 参考

[公式の WSL 2 ドキュメント](https://docs.microsoft.com/ja-jp/windows/wsl/install)
[Github/OracleDatabase](https://github.com/oracle/docker-images/tree/main/OracleDatabase/SingleInstance)