برای راهاندازی اوراکل ۱۹.۳ بر روی داکر ابتدا باید داکر را بر روی پلتفرم هاست خود نصب کنید. برای نصب داکر از وبسایت رسمی داکر شما نیاز به ساخت اکانت در داکر هاب دارید. بعد از ساخت اکانت و نصب Docker Desktop با کلیک بر روی اون داکر به سادگی اجرا میشه.
توجه کنید اگر ورژن سیستمعامل هاست شما جزو نسخههای update شده است از Docker Desktop استفاده کنید و اگر هنوز از نسخههای قدیمی استفاده میکنید باید از Docker Tollbox استفاده کنید. (فرق این ۲ نسخه در نوع زیرساخت مجازیساز مورد استفاده داکر است.)
نکته: توجه کنید حتما از یه راهکار مطمئن برای عبور از تحریم استفاده کنید. پیشنهاد من استفاده از دی ان اسهای شکن یا سرویسهای VPN Maker است.
از منوی داکر میتونید به راحتی در مک او اس داکر رو کنترل کنید.
نکته: در داکر هر ماشین داکری برابر یک کانتینر است. پس شما هر تعداد ماشین دیتابیس داشته باشید به تعداد ماشینها کانیتنر دارید. (توجه کنید درون کانتینر سرویس شما قرار میگیرد.)
توی مرحله بعدی ما نیاز به کانتینر دیتابیس اوراکل داریم. برای این مرحله دو راهکار موجود هستش:
روش اول
به داکر هاب برید (https://hub.docker.com) و oracle database را جستجو کنید. اینجا شما کانتینر ۱۲.۱.۰.۲ رو میبینید. این ایمیج ۲ تا مشکل داره اول اینکه نسخه ۱۲.۱.۰.۲ هستش و مشکل دوم این که یک ایمیج سازگار کامل نیست. این به این معنی که اگه شما کانتینر رو حذف کنید دیتابیس هنوز بر روی سیستم در حال اجرا باقی میمونه. همچنین قابلیت unplug کردن با کانتینر و plug کردن به یک کانتینر دیگه رو نداره
روش دوم
به آدرس گیتهاب اوراکل برید. اینجا تمام داکرفایلهای ایجاد شده برای محصولات توسعه داده شده آزاد Oracle sponsored open source projects و محصولات تجاری Oracle Commercial به صورت رسمی توسط اوراکل قرار داده شده.
برای استفاده از محصولات تججاری شما باید از وارد وبسایت oracle.com بشوید و یک اکانت رایگان برای خودتان ایجاد کنید. سپس محصول مورد نظر خود را با تایید لایسنس OTN برای پلتفرم لینوکس ۶۴ بیتی دانلود کنید. (توجه کنید شما داکر رو بر روی هر پلتفرمی هاست کنید (لینوکس، ویندوز،مک) در آخر معماری داکر به صورت لینوکسی است. داکر در حال حاضر در ویندوز از Hyper-V و در مک از xhyve برای اجرای یک توزیع لینوکسی سبک و داکری به عنوان هاست استفاده میکنه)
نکته: در Docker Tollbox از مجازیساز Virtualbox به جای مجازیساز درونی xhyve استفاده میگرد.
https://docs.docker.com/docker-for-mac/docker-toolbox
مراحل کار
مرحله اول
حال از وبسایت اوراکل دیتابیس نسخه ۱۹.۳ رو برای پلتفرم لینوکس از طریق لینک زیر دانلود میکنیم:
https://www.oracle.com/database/technologies/oracle-database-software-downloads.html
نکته خوب این روش اینه که شما میتونید کانتینر داکر رو unplug کنید و جای دیگه دوباره plug کنید. همچنین اگه کانتینر رو حذف کنید به طور کامل دیتابیس حذف میشه.
مرحله دوم
به صفحه https://github.com/oracle/docker-images بروید و ریپازیتوری رو به صورت فایل zip دانلود کنید.
مرحله سوم
حالا شما باید ۲ فایل دانلود شده داشته باشید:
LINUX.X64_193000_db_home.zip
docker-images-master.zip
فایل docker-images-master.zip رو از حالت فشرده خارج کنید خروجی دایکتوری به نام docker-images-master خواهد بود. در این دایرکتوری شما دایرکتوریهای دیگهای رو میبینید که هر کدوم یکی از محصولات اوراکل است که بر روی داکر پشتیبانی شده است.
با ترمینال مک میتونید با دستور زیر اقداک به unzip کنید و یا از نرمافزارهای گرافیکی استفاده کنید:
unzip docker-images-master.zip
مرحله چهارم
در این مرحله باید فایل LINUX.X64_193000_db_home.zip رو به محل 19.3.0/docker-images-master/OracleDatabase/dockerfiles انتقال دهید. توجه کنید این فایل رو به صورت zip ببرید و از unzip کردن اون پرهیز کنید.
مرحله پنجم
در این مرحله باید با یک نرمینال (در ویندوز cmd یا powershell) به مسیر docker-images-master/OracleDatabase/dockerfiles بریم و با دستور زیر داکر ایمیج خودمون رو برای نسخه ۱۹.۳ ایجاد کنیم. داکر فایل اوراکل با دانلود oraclelinux:7-slim از اینترنت اقدام به ساخت این ایمیج میکنه دقت داشته باشید دسترسی به اینترنت آزاد حتما بر روی سیستم تنظیم شده باشه.
./buildDockerImage.sh -v 19.3.0 -e
لاگ ترمینال رو حتما دنبال کنید:
Mahdis-MacBook-Air:dockerfiles mghaffari$ ./buildDockerImage.sh -v 19.3.0 -e
Ignored MD5 sum, 'md5sum' command not available.
==========================
DOCKER info:
Client:
Debug Mode: false
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 5
Server Version: 19.03.2
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
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: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
runc version: 425e105d5a03fabd737a126ad93d62a9eeede87f
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 4.9.184-linuxkit
Operating System: Docker Desktop
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.952GiB
Name: docker-desktop
ID: R5AH:6RL6:5USK:FXIY:VO2K:YUXN:N7ZG:OECM:Q6UQ:B6KU:HA56:DWFY
Docker Root Dir: /var/lib/docker
Debug Mode: true
File Descriptors: 29
Goroutines: 45
System Time: 2019-09-22T15:26:46.83033533Z
EventsListeners: 2
HTTP Proxy: gateway.docker.internal:3128
HTTPS Proxy: gateway.docker.internal:3129
Registry: https://index.docker.io/v1/
Labels:
Experimental: true
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
Product License: Community Engine
==========================
Building image 'oracle/database:19.3.0-ee' ...
نکته: اگه در محیطی بودید که ناچار به ست کردن https_proxy برای دسترسی به اینترنت در لینوکس بودید نگران نباشید اسکریپت اوراکل به خوبی از پراکسی پشتیبانی میکنه.
وقتی عملیات نصب توسط اسکریپت به پایان برسه شما پیغام زیر را مشاهده خواهید کرد:
Oracle Database Docker Image for 'ee' version 19.3.0 is ready to be extended:
--> oracle/database:19.3.0-ee
Build completed in 1183 seconds.
مرحله ششم
برای چک کردن وضعیت ایمیج از دستور docker images استفاده میکنیم:
همونطور که میبینید oraclelinux و oracle database با موفقیت به لیست ایمیجها اضافه شدهاند.
مرحله هفت
برای ساخت دیتابیس ما اول نیاز داریم یک کانتینر از ایمیج ساخته شده بسازیم. من اینکار رو با دستور زیر انجام میدم. همچنین شما میتونید مسیر oradata رو به صورت دستی تنظیم میکنم که با پاک کردن کانیتنر دیتاهای دیتابیس شما پاک نشوند.
آپشن name برای مشخص کردن اسم کانتینر ما است.
آپشن v به ما امکان ماونت کردن یک مسیر از هاست در کانتینر را میدهد. (پس اگر کانتینر پاک شود این مسیر از هاست پاک نمیشود)
آپشن p برای پابلیش کردن یک پورت از کانتینر به هاست است.
با دستور docker run --help میتوانید توضیحات هر کدوم از آپشنها را ببینید.
بدون ماونت کردن oradata در هاست:
docker run --name oracle -p 1521:1521 -p 5500:5500 oracle/database:19.3.0-ee
با ماونت کردن oradata در هاست:
docker run --name oracle -p 1521:1521 -p 5500:5500 -v /Users/mghaffari/oradata:/opt/oracle/oradata oracle/database:19.3.0-ee
به خروجی این دستور با دقت نگاه کنید. این خروجی برای DBAهای اوراکل بسیار آشنا است. توجه کنید خط اول پسورد کاربران SYS, SYSTEM و PDBADMIN نوشته شده است.
Mahdis-MacBook-Air:dockerfiles mghaffari$ docker run --name oracle -p 1521:1521 -p 5500:5500 oracle/database:19.3.0-ee
ORACLE PASSWORD FOR SYS, SYSTEM AND PDBADMIN: x4tot7vE8Wo=1
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 22-SEP-2019 17:09:22
Copyright (c) 1991, 2019, Oracle. All rights reserved.
Starting /opt/oracle/product/19c/dbhome_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 19.0.0.0.0 - Production
System parameter file is /opt/oracle/product/19c/dbhome_1/network/admin/listener.ora
Log messages written to /opt/oracle/diag/tnslsnr/55340f664d29/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date 22-SEP-2019 17:09:23
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /opt/oracle/product/19c/dbhome_1/network/admin/listener.ora
Listener Log File /opt/oracle/diag/tnslsnr/55340f664d29/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
The listener supports no services
The command completed successfully
[WARNING] [DBT-11209] Current available memory is less than the required available memory (2,048MB) for creating the database.
CAUSE: Following nodes do not have required available memory :
Node:55340f664d29 Available memory:1.4918GB (1564240.0KB)
Prepare for db operation
8% complete
Copying database files
31% complete
Creating and starting Oracle instance
32% complete
36% complete
نکته: نام دیتابیس در این ایمیج ORCLCDB و دارای 1 pdb به نام ORCLPDB1 هستش حتما قبل از استفاده پارامترهای تنظیم شده را بازبینی کنید.
مرحله هشتم
دستور docker run ما در حقیقت ORACLE DBCA رو به صورت سایلنت اجرا میکنه و ساخت دیتابیس اوراکل رو انجام میده. چون ما در دستور پسورد کاربرها رو مشخص نکردیم به صورت پیشفرض یک پسورد تولید میشه و در اول خط خروجی نشان داده میشود برای تعویض پسورد از دستور docker exec برای اجرا اسکریپت تعویض پسورد ایمیج استفاده میکنیم:
docker exec oracle ./setPassword.sh Zz123456
مرحله نهم
با استفاده از دستور docker ps میتوانیم وضعیت کانتینرهای در حال اجرا بر روی داکر را مشاهده کنیم:
docker ps -a
مرحله دهم
برای اتصال به کانینر از دستور زیر استفاده میکنیم:
docker exec -it oracle bash
و برای stop و start کردن کانتینر از دستورات زیر:
docker start oracle docker stop oracle
لاگین با کاربر root
برای لاگین با کاربر root میتوانید از دستور زیر اسفاده کنید:
docker exec -it -u root -w /root oracle /bin/bash
مشاهده لاگ
با دستور زیر میتوانید alert log اوراکل را از طریق داکر بخوانید:
docker logs oracle
پیدا کردن آی پی کانتینر
برای پیدا کردن آی پی کانیتنر از دستور زیر استفاده میکنیم:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' oracle
مک و Port Mapping
توجه کنید دسترسی مستقیم به آیپی های کانتینر در مک میسر نیست.
https://github.com/docker/for-mac/issues/2670
https://docs.docker.com/docker-for-mac/networking/#known-limitations-use-cases-and-workarounds
برای این منظور حتما باید port mapping انجام دهید.
تست اتصال از مک
در مک چون امکان دسترسی مستقیم به آی پی کانتینر نیست بعد از مپ کردن پورت به هاست میتوانیم از طریق لوکال هاست ماشین به کانتینر دسترسی داشته باشیم:
خب ما توی ۱۰ مرحله بسیار ساده اوراکل را بر روی داکر راهاندازی کردیم اگه اطلاعات بیشتری درباره نحوه ساختن ایمیج سفارشی برای دیتابیس اوراکل نیاز دارید به لینک زیر مراجعه کنید:
https://geraldonit.com/2017/08/21/creating-an-oracle-database-docker-image