Официальный репозиторий находится здесь
Изображение “Oracle Database XE Release 21c” можно получить так:
docker pull
container-registry.oracle.com/database/express:latest
1. Создал каталог c:\my\docker\oracle-xe21
2. В каталоге создал файл docker-compose.yml со следующим содержанием:
services:
oracle:
image: container-registry.oracle.com/database/express:21.3.0-xe
container_name: oracle-xe21
ports:
- 1521:1521
volumes:
- .:/opt/oracle/oradata
environment:
ORACLE_PWD: oracle
В файле указаны параметры для БД:
image – образ
container_name – имя контейнера
ports – маппинг портов
volumes – маппинг тома. Здесь указано, что текущий каталог, откуда производится запуск контейнера, будет являться каталогом для контейнера с БД Oracle. Если не указать маппирование тома, контейнер при запуске будет всякий раз создавать базу заново. Таким образом, все изменения в базе, произведенные после запуска контейнера, не сохранятся. Если же маппинг указан, изменения сохраняются.
environment: ORACLE_PWD – пароль для sys и system.
3. Создал файл !up.cmd для запуска контейнера БД Oracle.
docker compose up -d
4. Создал файл !down.cmd для остановки контейнера БД Oracle.
docker compose down
5. Запустил контейнер вызовом файла !up.cmd
После запуска, стек контейнеров виден в Docker Desktop

После того, как контейнер с БД Oracle запущен, можно подключиться к БД с помощью SQL Developer

Можно подключиться к БД Oracle с помощью sqlplus, расположенной в контейнере.
1. Нужно определить container_id
docker ps

2. Подключиться к контейнеру, указав container_id, определённый на предыдущем шаге
docker exec -it 5f986add5429 //bin/bash

3. В оболочке набрать sqlplus, затем ввести логин (system) и пароль (oracle). Такой пароль был указан в файле docker-compose.yml, с помощью которого производился запуск контейнера с БД oracle environment: ORACLE_PWD

4. Для выхода из sqlplus нужно указать exit.
5. Для выхода из shell-оболочки нужно указать exit.

После того, как первый раз был запущен контейнер с БД Oracle, создаётся база и в каталоге будут созданы две папки со следующими файлами.

Файл tnsnames.ora содержит следующее:
XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)
LISTENER_XE =
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
XEPDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XEPDB1)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
Sample Schemas – это схемы, содержащие объекты для примеров из документации Oracle. Вот – инструкции того, как нужно устанавливать Sample Schemas.
1. Архив находится на GitHub: https://github.com/oracle/db-sample-schemas/releases/latest
2. Нужно скачать архив, разархивировать (например в папку demo)
3. В скриптах *.sql и файлах *.dat необходимо произвести замену: вместо токена __SUB__CWD__ следует указать правильный путь для скрипта (/opt/oracle/oradata/demo)
4. запустить скрипт для установки
@/opt/oracle/oradata/demo/mksample systempw syspw hrpw oepw pmpw ixpw shpw bipw users temp /your/path/to/log/ connect_string
У скрипта используются такие параметры:
systempw – пароль для схемы system (в данном случае – это oracle)
syspw – пароль для схемы sys (в данном случае – это тоже oracle)
hrpw – пароль для схемы hr (я использовал hr)
oepw – пароль для схемы oe (oe)
pmpw – пароль для схемы pm (pm)
ixpw – пароль для схемы ix (ix)
shpw – пароль для схемы sh (sh)
bipw – пароль для схемы bi (bi)
users – default tablespace (users)
temp – temporary tablespace (temp)
/your/path/to/log/ – каталог для логов (/opt/oracle/oradata/demo/log), предварительно нужно создать этот каталог
connect_string – строка коннекта в БД (я использовал XEPDB1)
После запуска скрипта, будут созданы схемы (в контейнере XEPDB1)
Для подключения к схеме HR необходимо использовать такие параметры:

Результат:
