【環境構築】Oracle Linux 9でOracle 11gをコンテナ起動し、sqlplusで外部接続する手順
Oracle Linux 9で、oracle11gをコンテナで動かし、コンテナの外から、sqlplusで接続するまです。
以下のOSでやりました。
$ cat /etc/os* NAME="Oracle Linux Server" VERSION="9.7" ID="ol" ID_LIKE="fedora" VARIANT="Server" VARIANT_ID="server" VERSION_ID="9.7" PRETTY_NAME="Oracle Linux Server 9.7"
実は OL9 には標準で podman というツールが入っており、docker コマンドがそのままでは使えないようになっています。本物の Docker (Docker Engine) を入れる手順をまとめました。
1. Docker のインストールと自動起動設定
コマンドの有無に左右されないよう、設定ファイルを直接作成して進めます。
① ユーティリティの導入
# sudo dnf install -y dnf-utils Last metadata expiration check: 1:31:58 ago on ●●● ●● ●●● ●●●● 10:34:30 PM UTC. Package yum-utils-4.3.0-24.0.1.el9_7.noarch is already installed. Dependencies resolved. Nothing to do. Complete!
② 【最重要】コマンドを使わず、直接リポジトリファイルを作成
cat <<EOF | sudo tee /etc/yum.repos.d/docker-ce.repo [docker-ce-stable] name=Docker CE Stable - \$basearch baseurl=https://download.docker.com/linux/centos/9/\$basearch/stable enabled=1 gpgcheck=1 gpgkey=https://download.docker.com/linux/centos/gpg EOF
③ Docker 本体と関連ツールのインストール
sudo dnf install -y docker-ce docker-ce-cli containerd.io Running transaction Preparing : 1/1 Upgrading : docker-ce-cli-1:29.3.0-1.el9.x86_64 1/4 Running scriptlet: docker-ce-cli-1:29.3.0-1.el9.x86_64 1/4 Upgrading : docker-ce-3:29.3.0-1.el9.x86_64 2/4 Running scriptlet: docker-ce-3:29.3.0-1.el9.x86_64 2/4 Running scriptlet: docker-ce-3:29.2.1-1.el9.x86_64 3/4 Cleanup : docker-ce-3:29.2.1-1.el9.x86_64 3/4 Running scriptlet: docker-ce-3:29.2.1-1.el9.x86_64 3/4 Cleanup : docker-ce-cli-1:29.2.1-1.el9.x86_64 4/4 Running scriptlet: docker-ce-cli-1:29.2.1-1.el9.x86_64 4/4 Verifying : docker-ce-3:29.3.0-1.el9.x86_64 1/4 Verifying : docker-ce-3:29.2.1-1.el9.x86_64 2/4 Verifying : docker-ce-cli-1:29.3.0-1.el9.x86_64 3/4 Verifying : docker-ce-cli-1:29.2.1-1.el9.x86_64 4/4 Upgraded: docker-ce-3:29.3.0-1.el9.x86_64 docker-ce-cli-1:29.3.0-1.el9.x86_64 Complete!
④ Docker の起動設定と権限付与
sudo systemctl enable --now docker sudo usermod -aG docker $USER # 反映のため、このターミナルで以下のコマンドを実行 newgrp docker
2. Docker が正しく動いているかの確認
次に進む前に、以下のコマンドで Docker エンジンが正常か確認します。
# サービスのステータス確認(Active: active (running) と出ればOK)
systemctl status docker --no-pager
docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: disabled)
Active: active (running) since ●●● ●●●●-●●-●● 00:08:03 UTC; 1min 59s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 5480 (dockerd)
Tasks: 41
Memory: 41.9M (peak: 42.8M)
CPU: 575ms
CGroup: /system.slice/docker.service
├─5480 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
├─5720 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 1521 -container-ip 172.17.0.2 -container-port 1521 -use-listen-fd
├─5726 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 1521 -container-ip 172.17.0.2 -container-port 1521 -use-listen-fd
├─5741 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8080 -container-ip 172.17.0.2 -container-port 8080 -use-listen-fd
└─5747 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 8080 -container-ip 172.17.0.2 -container-port 8080 -use-listen-fd
●●● ●● 00:08:01 ora dockerd[5480]: time="●●●●-●●-●●T00:08:01.112429168Z" level=i
# 動作テスト(Hello from Docker! と表示されれば完璧です)
docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
3. Oracle 11g コンテナの起動
OL9 の環境(cgroup v2 や SELinux)で古い 11g を動かすための必須オプションを付けて実行します。
# コンテナの作成と起動 docker run -d \ --name oracle11g \ --privileged \ --shm-size=1g \ --restart always \ -p 1521:1521 \ -p 8080:8080 \ wnameless/oracle-xe-11g-r2 --restart always: OSやDockerが再起動した際、このコンテナも自動で立ち上がる設定です。
4. データベース起動の確認とログイン
コンテナ起動後、内部の Oracle サービスが準備完了になるまで約 1〜2 分待ちます。
# 起動ログを監視(Ctrl + C で抜ける) docker logs -f oracle11g # SQL*Plus でログイン(ID: system / Pass: oracle) docker exec -it oracle11g /bin/bash -c "source /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh && /u01/app/oracle/product/11.2.0/xe/bin/sqlplus system/oracle" SQL*Plus: Release 11.2.0.2.0 Production on ●●● ●●● ● ●●:●●:●● ●●●● Copyright (c) 1982, 2011, Oracle. All rights reserved. Connected to: Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production SQL> SELECT banner FROM v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production PL/SQL Release 11.2.0.2.0 - Production CORE 11.2.0.2.0 Production TNS for Linux: Version 11.2.0.2.0 - Production NLSRTL Version 11.2.0.2.0 - Production
5. Oracle Instant Client のインストール
ホスト側で sqlplus コマンドを使えるようにします。
# ① Oracle リポジトリの有効化 sudo dnf install -y oracle-instantclient-release-el9 # ② パッケージ情報の更新 sudo dnf makecache # 19.30 の basic と sqlplus をインストール sudo dnf install -y oracle-instantclient19.30-basic oracle-instantclient19.30-sqlplus Running transaction Installing : libnsl-2.34-231.0.1.el9_7.2.x86_64 1/3 Installing : oracle-instantclient19.30-basic-19.30.0.0.0-1.el9.x8 2/3 Installing : oracle-instantclient19.30-sqlplus-19.30.0.0.0-1.el9. 3/3 Installed: libnsl-2.34-231.0.1.el9_7.2.x86_64 oracle-instantclient19.30-basic-19.30.0.0.0-1.el9.x86_64 oracle-instantclient19.30-sqlplus-19.30.0.0.0-1.el9.x86_64 Complete!
6. ネットワーク接続設定 (TNS_ADMIN)
接続先(コンテナ)の情報を定義します。
# ① 設定ディレクトリの作成
sudo mkdir -p /usr/lib/oracle/network/admin
# ② tnsnames.ora の作成
cat <<EOF | sudo tee /usr/lib/oracle/network/admin/tnsnames.ora
XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)
EOF
# ③ 環境変数の設定
export TNS_ADMIN=/usr/lib/oracle/network/admin
echo 'export TNS_ADMIN=/usr/lib/oracle/network/admin' >> ~/.bashrc
7. リスナー疎通と接続テスト
# ポートの確認とファイアウォール許可 ss -antl | grep 1521 LISTEN 0 4096 0.0.0.0:1521 0.0.0.0:* sudo firewall-cmd --add-port=1521/tcp --permanent sudo firewall-cmd --reload # コンテナ内リスナーの状態確認 docker exec -it oracle11g /bin/bash -c "source /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh && lsnrctl status" Service "XE" has 1 instance(s). Instance "XE", status READY, has 1 handler(s) for this service... The command completed successfully # ホストからの接続テスト sqlplus system/oracle@XE SQL*Plus: Release 19.0.0.0.0 - Production on ●●● ●●● ● ●●:●●:●● ●●●● Version 19.30.0.0.0 Connected to: Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
大きなトラブルもなくできました。
コメント
コメントを投稿