[Linux] Windows安裝Wsl2 + Ubuntu22.04 + Docker +Oracle


Posted by mike-hsieh on 2023-12-22

原文網址: 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

  1. 使用 docker sqlplus 操作

    // docker內部啟用oracle
    docker exec -it oracle /bin/bash
    // 使用sqlplus
    sqlplus
    // 帳號密碼
    system / oracle
    

    如果要執行 sqlplus指令,要在輸入指令的第二行輸入'/',在按下enter就可以了。


  2. 使用DBeaver,並且使用上面的連線字串連接。

    這是內建的一個HR資料庫,可以查看確實有資料。


大功告成,途中有踩雷,都把這些順利解決的步驟記錄在上面的步驟中了,感謝了~

以下是補充,如有遇到問題也可以再發問。


● Ubuntu解除安裝

  1. 解除Ubuntu安裝
  2. 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

● 遇到不知名的網路問題 => 全部重灌:

  1. wsl重灌,在備份完Ubuntu之後,要重灌wsl。
    移除 WSL 相關功能:打開「控制台」→「程式」→「開啟或關閉 Windows 功能」,找到並取消勾選「適用於 Linux 的 Windows 子系統」,然後重新啟動電腦。
  2. 重新安裝 WSL:
    重新啟動後,再次打開「控制台」→「程式」→「開啟或關閉 Windows 功能」,勾選「適用於 Linux 的 Windows 子系統」,並點擊確定。這會安裝所需的元件,然後你需要再次重新啟動電腦。
  3. 後續就依照上面的步驟安裝。


參考資料:

  1. https://www.ichenfu.com/2021/10/23/wsl2-ubuntu-dockerd-iptables-problem/
  2. https://andy51002000.blogspot.com/2019/02/docker-permission-denied.html
  3. https://ithelp.ithome.com.tw/articles/10255920
  4. https://stackoverflow.com/questions/42365336/how-to-stop-docker-under-linux

#oracle #docker #wsl2 #Install







Related Posts

React-router-dom 實作與原理解析

React-router-dom 實作與原理解析

金魚系列,淺談如何學習 css

金魚系列,淺談如何學習 css

Python Table Manners - 測試 (二)

Python Table Manners - 測試 (二)


Comments