原文網址: https://mike.coderbridge.io/2023/12/22/how-to-install-oracle-with-docker-on-wsl2/
因近期本機需要使用Oracle,考量權限問題,所以使用如標題上的方案,紀錄如下。
1. 啟用WSL必要元件
控制台 —> 程式和功能 —> 開啟或關Windows功能 —> 勾選Hyper-V平台 —> 執行PowerShell指令 —> 重開機!!!
以系統管理員身執行以下 PowerShell 指令:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
2. 將WSL預設版本調成WSL2
wsl --set-default-version 2
3. Microsoft Store 安裝 Ubuntu
由於版本會有差異,那目前我的Ubuntu是22.04版
裝好後就啟用,並且設定帳號密碼(基本上命令自元的密碼輸入都是看不到的喔~)
# 或是使用指令安裝也可以
# 查看版本號
wsl -l -o
# 安裝指定版本
wsl --install -d Ubuntu-20.04
4. 使用WSL
// 列出WSL指令
wsl -h
// 列出所有已經安裝的Linux發行版,表示可以切換不同的linux環境
wsl -l
// 執行Linux 發行版並進入Shell (目前我的版本是 Unbuntu,也可以執行其他版本)
wsl -d Ubuntu // 目前使用
wsl -d Ubuntu-20.4 // 若是妳安裝這個版本,就用這個
// 執行Linux,若要退出,輸入 exit
exit
5. 更換Systemd
簡單來說,systemd就是啟動、管理Linux的,由於我們使用windows,所以要更換版本。
我們使用 ubuntu-wsl2-systemd-script,先下載下來。
5.1 先調整裡面的一個文件 enter-systemd-namespace, -a 改為 -m -p
5.2 ,並且cmd再指向這個路徑,安裝systemd (可能會需要輸入密碼,就是第3步設定的密碼)
bash ubuntu-wsl2-systemd-script.sh
5.3 安裝成功,重新啓動Ubuntu
若不斷安裝失敗,查無原因,請參考最下方的"更新Linux核心套件"。
exit // 離開 Linux
wsl -t Ubuntu // 停止 Linux
wsl -d Ubuntu // 啟用 Linux
6. 切換Ubuntu防火牆版本
由於windows不支援 iptables-nft,將防火牆版本切換為 iptables-legacy
sudo update-alternatives --config iptables
7. 安裝Docker
理論上,照官網的步驟就可以了。
8. 設定Docker全域變數和權限相關
// 把目前使用者加到docker群組裡面, 當docker service 起來時, 會以這個群組的成員來初始化相關服務
sudo groupadd docker
sudo usermod -aG docker $USER
// 手動修改權限
sudo chmod 666 /var/run/docker.sock
// 手動啟動docker (如有需要手動啟動docker)
// systemctl enable docker
// systemctl start docker
// 手動關閉docker (如有需要關閉docker)
// sudo systemctl stop docker
// sudo systemctl stop docker.socket
9. 安裝Oracle
以下提供兩個版本,11c, 12c,兩者主要差異是12c提供了FETCH FIRST 和 OFFSET。
// ********************
// oracle-11c
// 1. 首先,你需要從 Docker Hub 下載 Oracle Database XE 的 Docker 映像。在終端機中執行以下命令:
docker pull oracleinanutshell/oracle-xe-11g
// 2. 然後,你可以使用以下的命令來運行這個 Docker 映像,並創建一個 Oracle Database XE 的容器:
docker run -d -p 49161:1521 oracleinanutshell/oracle-xe-11g
// 3. 以下為連線字串訊息:
hostname: localhost
port: 49161
sid: xe
username: system
password: oracle
// *******************
// oracle-12c
// 1. 首先,你需要從 Docker Hub 下載 Oracle Database XE 的 Docker 映像。在終端機中執行以下命令:
docker pull truevoly/oracle-12c
// 2. 然後,你可以使用以下的命令來運行這個 Docker 映像,並創建一個 Oracle Database XE 的容器:
docker run --name oracle -d -p 49164:1521 -e ORACLE_ALLOW_REMOTE=true truevoly/oracle-12c
// 3. 以下為連線字串訊息:
hostname: localhost
port: 49164
sid: xe
username: system
password: oracle
// *******************
// oracle-18c
// 1. 你可以使用以下的命令來運行這個 Docker 映像,並創建、運行一個 Oracle Database XE 的容器:
docker run --name oracle -p 49164:1521 -e ORACLE_ALLOW_REMOTE=true -e ORACLE_PASSWORD=oracle gvenzl/oracle-xe:18.4.0-full
// 3. 以下為連線字串訊息:
hostname: localhost
port: 49164
sid: xe
username: system
password: oracle
Oracle可能會遇到權限、指令的問題,請詳閱[Oracle] 操作指令
10. 操作Oracle
使用 docker sqlplus 操作
// docker內部啟用oracle docker exec -it oracle /bin/bash // 使用sqlplus sqlplus // 帳號密碼 system / oracle
如果要執行 sqlplus指令,要在輸入指令的第二行輸入'/',在按下enter就可以了。
使用DBeaver,並且使用上面的連線字串連接。
這是內建的一個HR資料庫,可以查看確實有資料。
大功告成,途中有踩雷,都把這些順利解決的步驟記錄在上面的步驟中了,感謝了~
以下是補充,如有遇到問題也可以再發問。
● Ubuntu解除安裝
- 解除Ubuntu安裝
- wsl解除安裝Ubuntu
wsl --unregister Ubuntu
● 安裝systemd不知原因失敗
嘗試下載 Linux核心更新套件
● 建議把安裝好的Ubuntu遷移到D槽,因為Ubuntu其實也很佔空間,動不動就幾10G,可以參考[Linux] wsl系統遷移。
那遷移好之後,只要單純匯入就可以使用了喔,以下打包給他人使用的範例。
1. 控制台 — ->程式和功能 — ->開啟或關Windows功能 →勾選Hyper-V平台:
2. 以系統管理員身執行以下 PowerShell 指令:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
3. 重開機
4. cmd 執行指令:
wsl --set-default-version 2
5. 至 Microsoft 安裝 Ubuntu,安裝好不用點擊開啟。
6. 將本資料夾 Ubuntu 完整複製到 D:/ ,會形成 D:/Ubuntu 的路徑,並且裡面含有 _backup\ubuntu_oracle12c.tar
7. cmd 執行指令:
wsl --import Ubuntu D:\Ubuntu D:\Ubuntu\_backup\ubuntu_oracle12c.tar
8. cmd 執行指令:
Ubuntu config --default-user gadmin
該系統的預設系統帳密為:
帳號: gadmin
密碼: gadmin
9. cmd 執行指令:
wsl -d Ubuntu
10. cmd 執行指令(由於已經有一個container了,所以start就好):
docker start 652189fbaf76
11. 以下為連線字串訊息:
hostname: localhost
port: 49164
sid: xe
username: system
password: oracle
● 若要離線安裝,建議先在本機安裝並打包(上一個說明)好一份,後續只要離線安裝Ubuntu,不用註冊,直接匯入就可以了喔。可以參考 [Linux] 離線安裝Ubuntu22.04
● 遇到不知名的網路問題 => 全部重灌:
- wsl重灌,在備份完Ubuntu之後,要重灌wsl。
移除 WSL 相關功能:打開「控制台」→「程式」→「開啟或關閉 Windows 功能」,找到並取消勾選「適用於 Linux 的 Windows 子系統」,然後重新啟動電腦。 - 重新安裝 WSL:
重新啟動後,再次打開「控制台」→「程式」→「開啟或關閉 Windows 功能」,勾選「適用於 Linux 的 Windows 子系統」,並點擊確定。這會安裝所需的元件,然後你需要再次重新啟動電腦。 - 後續就依照上面的步驟安裝。
參考資料: