Post on 11-Oct-2019
© OPITZ CONSULTING 2019
Überraschend mehr Möglichkeiten
© OPITZ CONSULTING 2017
DOAG 2019 Database Days
Borys Neselovskyi, Solution ArchitectDmitry Garshin, Senior Consultant
Docker in Exadata: warum überhaupt und howto
© OPITZ CONSULTING 2019 Seite 2
überzählige blaue Zahlenboxen löschen!
Docker in Exadata: warum überhaupt und howto
Inhalte
1
2
3
4
5
Motivation
Anwendungsbeispiele
Howto
Tipps und Tricks
Demo
© OPITZ CONSULTING 2019 Seite 3Docker in Exadata: warum überhaupt und howto
Motivation 1
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Motivation
Exadata: Maschine für den DB Betrieb
Ausgelegt auf Datenbank-Performance und HA
Docker: Technologie für schnelles Bereitstellen von Server und
Anwendungen
Basiert auf Images
DevOps Einsatz
DATABASE M
AC
HIN
E
EXA
DA
TA
EXADATA X3-2
Warum macht es Sinn, Docker auf Exadata zu betrieben?
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Motivation
Generell: In einem Docker Container können Anwendungen ausgeführt werden, die:
zusätzliche RPM Pakete voraussetzen, die beim Patch-Vorgang Konflikte verursachen können
Aus Kompatibilitätsgründen nicht auf Exadata betrieben werden können, obwohl für den Betrieb notwendig sind
© OPITZ CONSULTING 2019 Seite 6Docker in Exadata: warum überhaupt und howto
Anwendungsbeispiele 2
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Tools, die im Docker Container betrieben werden können…
Oracle R Enterprise Ein Framework zum Analysieren von
großen Datenmengen
Wird oft in DWH Reporting Umfeld verwendet
Die Installation benötigt RPM‘s
Es gibt RPM-Konflikte beim Patchen des Datenbankservers
MOS Note: 2257680.1
Cups Open-Source-Drucksystem, das von Apple Inc.
für macOS und andere UNIX/Linux-Systeme entwickelt wurde
Backup Tools: EMC NetWorker
Veritas NetBackup
HP Data Protector
Oracle Secure Backup
Mediaserver
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Kandidaten für Docker Container
DevOps Umgebung: Git: Management SQL/PLSQL Code
Entwicklungstools/Entwicklungsumgebung: Python
Java/Java Script
Node.js
PHP
APEX Umgebung: Webserver (apache oder nginx)
Tomcat oder WebLogic Server
ORDS (Rest Data Service)
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Kandidaten für Docker Container Oracle Middleware:
WebLogic Server
SOA Suite
Oracle Business Intelligence
Oracle Data Integrator
Oracle HTTP Server
Datenbanken: MySQL/PostgreSQL
Oracle RDBMS SE / Alte Versionen
Monitoring: Enterprise Manager Agent
ASR Server
Nagios/Check_mk
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Docker und Oracle Support
Docker Engine: MOS Note: 1921163.1 Support für Images von Oracle Registry
Kein Support für Images von Docker Public Registry
Docker Binaries nur für OEL6/OEL7
Oracle Linux Support nur für das Betriebssystem, nicht für 3-Party Produkte
Oracle Middleware & Docker: MOS Note: 2017945.1 Alle Produkte sind für Test und Produktion supported
Andere Middleware Produkte: nur Test
Oracle Datenbank: MOS Note 2216342.1 Support sind letzte RDBMS Versionen, die auf OEL betrieben werden
RAC auf Docker : Support nur für Test
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Oracle Container Registry
Fertige Images auf Oracle Container Registry
URL: https://container-registry.oracle.com
Von Oracle zertifiziert und supportet
Anmeldung mit dem Oracle Account erforderlich
© OPITZ CONSULTING 2019 Seite 12Docker in Exadata: warum überhaupt und howto
Howto 3
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Docker Installation
Minimale Voraussetzung: Exadata Version 12.2.1.1.0 (wegen UEK 4)
Exadata 12.2.1.1.0 und höher: Manuelle Installation Docker und libcgroup RPMs:> yum install docker-engine btrfs-progs
> systemctl start docker
> systemctl enable docker
Exadata 18 und 19: Docker ist bereits installiert und gestartet[root@exadb01] imageinfo
18.1.12.0.0.190111
[root@exadb01] service docker status
docker (pid 18060) is running...
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Docker: Getting started:> service docker status
docker (pid 18060) is running...
> docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Operating System: Oracle Linux Server 6.10
Docker Root Dir: /var/lib/docker
Registry: https://index.docker.io/v1/
> imageinfo -ver
18.1.12.0.0.190111
> docker version
Client:
Version: 1.13.1
API version: 1.26
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26
OS/Arch: linux/amd64
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Docker Installation: Storage Konfiguration
Erstellen Storage Bereich für Docker: Log. Volume erstellen: > lvcreate -L10G -nLVDocker VGExaDb
Filesystem erstellen: > mkfs.btrfs /dev/VGExaDb/LVDocker
> mkdir /var/lib/docker
Eintrag in /etc/fstab: /dev/VGExaDb/LVDocker /var/lib/docker btrfs defaults 0 0
FS mounten: > mount /var/lib/docker
Eintrag in /etc/sysconfig/docker: other_args="--storage-opt dm.basesize=10G“
Docker neu starten: > service docker restart
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Docker Registry: Public Docker Registry: URL für Download von vorgefertigten Templates (Images)
Default: Docker Public Registry: https://index.docker.io/v1
Problem: Internet Verbindung notwendig
Lösung 1: Proxy konfigurieren: Proxy Konfiguration für Docker Deamon:
Datei /etc/sysconfig/docker: HTTP_PROXY=<proxy_URL>:<port>HTTPS_PROXY=<proxy_URL>:<port>
Proxy Konfiguration in Linux Datei /root/.bash_profile: HTTP_PROXY=<proxy_URL>:<port>
HTTPS_PROXY=<proxy_URL>:<port>
Profile Datei neu laden: > source /root/.bash_profile
Docker durchstarten: > service docker stop> service docker start
Hinweis: Durch Proxy Konfiguration wird Zugang zum Internet für alle Anwendungen (z. B. "yum") ermöglicht.
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Gründe, Docker zentrale Registry im Intranet zu betreiben
Sicherheit: Kein Internetzugang
Images können vertrauliche Informationen beinhalten
Zugriff nur aus dem Firmennetz
Konsolidierung und Standardisierung: Im Repository sollen nur notwendigen Images aufbewahrt werden
Zentrales Repository firmenweit: Einheitliche Regeln Weniger Wartung und Administration
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Zentrale Docker Registry im Intranet aufbauen
Anlegen eines Containers für die Registry:
> docker run -d -p 5000:5000 --restart always --name local-registry registry:latest
Images in einer lokalen Registry speichern: Image herunterladen:
> docker pull oraclelinux:6.9
Tag setzen:
> docker tag oraclelinux:6.9 myregistry:5000/my-oraclelinux
Image lokal speichern:
> docker push myregistry:5000/my-oraclelinux
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Docker Images suchen und herunterladen
> docker search nginx
> docker search oracleinux
> docker pull nginx
> docker pull oraclelinux:latest
> docker login container-registry.oracle.com
> docker pull container-registry.oracle.com/os/oraclelinux:7
> docker pull container-registry.oracle.com/os/oraclelinux:latest
> docker pull container-registry.oracle.com/java/serverjre
> docker logout container-registry.oracle.com
Images suchen:
Images runterladen:
Images von Oracle Registry runterladen:
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Docker: Images auflisten
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
container-registry.oracle.com/os/oraclelinux latest 70927e8bd213 4 months ago 234MB
nginx latest 70927e8bd213 2 weeks ago 109MB
Lokale Images auflisten:
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Docker Container starten: Teil 1
Starten Docker im Hintergrund
> docker run -d -it -h mywebsrv nginx
743e652f4fb64e24af5189b76c17fb3c804eac6c20adf3d6bd31197a98ea96e2
Im bereits ausgeführten Container die Bash-Session starten
> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
743e652f4fb6 nginx "nginx -g" 21 seconds ago Up 16 seconds 80/tcp inspiring_kare
> docker exec -it 743e652f4fb6 /bin/bash
root@mywebsrv:/#
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Docker Container mit bestimmten Netzwerkeinstellungen starten
Im Docker Netzwerk erstellen:
> docker network create --subnet=172.18.0.0/16 mytestnet
Container mit einer bestimmten IP Adresse starten:
> docker run --net mytestnet --ip 172.18.0.22 -h mywebserver -it nginx bash
Im Container:
root@mywebserver:/# grep mywebserver /etc/hosts
172.18.0.22 mywebserver
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Persistent Storage
Daten im Docker Container sind per Default nicht persistent
Persistenter Storage: Datenbankdateien usw.
Persistente Daten im Docker? Volumes
Bereich des Host-Filesystems Durch Docker verwaltet / nur von Docker als FS sichtbar
Bind Mounts Bereich des Host-Filesystems Als Mount an Docker Container angeschlossen Sichtbar von Host bzw. vom Docker Container
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Docker Container: persistenten Storage einrichten Erstellen Docker Volumes:
> docker volume create persistent_store
> docker volume ls
DRIVER VOLUME NAME
local persistent_store
Container starten und Docker Volume anhängen:
> docker run --name=mytest --mount source=persistent_store,destination=/mydata \
-it borys/oraclelinux-httpd_new bash
Im Container prüfen:
[root@612b4a19974f mydata]# df -h /mydata/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/myvlm-root 20G 16G 4.8G 77% /mydata
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Bind Mounts
File System in den Container mounten:
> ls /vlm/bmnt
bmount.test
> docker run --name=mytest --mount type=bind,source=/vlm/bmnt,target=/bmnt \
-it borys/oraclelinux-httpd_new bash
Im Container prüfen:
[root@612b4a19974f mydata]# ls /bmnt
bmount.test
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Container / Image / Volume löschen
Container löschen:
> docker container rm [container name|container id]
Image löschen:
> docker image rm [image name|image id]
Volume löschen:
> docker volume rm [volume name]
© OPITZ CONSULTING 2019 Seite 27Docker in Exadata: warum überhaupt und howto
Tipps und Tricks 4
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Ausführen von Befehlen im Container von dem Host: Teil 1: Linux Network Namespaces (netns) konfigurieren
> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c4402cd1b773 nginx "nginx -g" 21 seconds ago Up 16 seconds 80/tcp inspiring_kare
> export con_id=c4402cd1b773
> pid=$(docker inspect -f '{{.State.Pid}}' $con_id)
> ln -sfT /proc/$pid/ns/net /var/run/netns/$con_id
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Ausführen von Befehlen im Container von dem Host: Teil 2: Linux network Namespaces (netns)
> ip netns exec $con_id ip a
7: eth0@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
> ip netns exec $con_id cat /etc/oracle-release
Oracle Linux Server release 7.6
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Images zwischen Hosts verschieben
Server host01:
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
borys/oraclelinux-httpd_new latest a0664ba789ed 21 hours ago 1.02GB
> docker save -o /u01/oraclelinux-httpd_new.tar borys/oraclelinux-httpd_new
> scp /u01/bne/oraclelinux-httpd_new.tar host2:/u01
Server host02:
> docker load -i /u01/oraclelinux-httpd_new.tar
> docker run -h myserver -i -t borys/oraclelinux-httpd_new bash
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Weitere Informationen…
MOS Note: How to Access Docker Container's Network Namespace from Host (Doc ID 2404846.1)
Docker und Oracle Enterprise Linux: https://blogs.oracle.com/blogbypuneeth/a-simple-guide-to-docker-installation-on-oracle-linux-75
Docker: Support for Docker Running on Oracle Linux (Doc ID 1921163.1)
Steps to backup and restore Docker containers (Doc ID 2303141.1)
How to Configure Proxy for Docker (Doc ID 2323590.1
Oracle Support for Database Running on Docker (Doc ID 2216342.1)
Middleware: Support Information for Oracle WebLogic Server Running in Docker Containers (Doc ID 2017945.1)
© OPITZ CONSULTING 2019
Rücksprache mit Mktg.
Docker in Exadata: warum überhaupt und howto
Demo
ORDS / Tomcat / Apex in einem Docker Container
Quelle: www.bilderfüropitz.com
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
ORDS Webapp konfigurieren (1)
ORDS Vereichnismkdir ~/ords
unzip ~/Downloads/ords-19.1.0.092.1545.zip -d ~/ords/
cd ~/ords
ORDS Einstellungen setzenjava -jar ords.war configdir /root/ords/params
May 26, 2019 3:23:53 PM
INFO: Set config.dir to /root/ords/params in: /root/ords/ords.war
vi ~/ords/params/ords_params.properties
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
ORDS Webapp konfigurieren (2)
Inhalt des ords_params.properties Files:
db.hostname=rac12-scan
db.port=1522
db.servicename=orclpdb
db.username=APEX_PUBLIC_USER
db.password=<pwd>
migrate.apex.rest=false
plsql.gateway.add=true
rest.services.apex.add=true
rest.services.ords.add=true
schema.tablespace.default=APEX
schema.tablespace.temp=TEMP
standalone.mode=false
user.apex.listener.password=<pwd>
user.apex.restpublic.password=<pwd>
user.public.password=<pwd>
user.tablespace.default=APEX
user.tablespace.temp=TEMP
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
ORDS Webapp konfigurieren (3)
ORDS DB Installation durchführen
[root@localhost ords]# java -jar ords.warRequires to login with administrator privileges to verify Oracle REST Data Services schema.
Enter the administrator username:sys
Enter the database password for SYS AS SYSDBA:
Confirm password:
Retrieving information.
May 26, 2019 2:00:02 PM
INFO: reloaded pools: []
Installing Oracle REST Data Services version 19.1.0.r0921545
... Log file written to /root/ords_install_core_2019-05-26_140002_00520.log
... Verified database prerequisites
... Created Oracle REST Data Services proxy user
... Created Oracle REST Data Services schema
... Granted privileges to Oracle REST Data Services
... Created Oracle REST Data Services database objects
... Log file written to /root/ords_install_datamodel_2019-05-26_140029_00888.log
... Log file written to /root/ords_install_apex_2019-05-26_140034_00040.log
Completed installation for Oracle REST Data Services version 19.1.0.r0921545. Elapsed time: 00:00:35.72
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Docker: Image Verzeichnis
Docker Image Verzeichnis anlegen:mkdir ~/docker-apex
cd ~/docker-apex
ORDS Webapp in das Verzeichnis kopieren:cp ~/ords/ords.war .
Vorkonfigurierte Parameter-Verzeichnis kopieren:cp –r ~/ords/params ords_params
APEX Images Verzeichnis kopieren:cp –r <APEX_INSTALL>/images images
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Docker: Dockerfile
Dockerfile anlegen
FROM tomcat:9.0-jre11
#Als Basis wird tomcat image mit jre11 verwendet
LABEL maintainer="dmitry.garshin@opitz-consulting.com"
COPY images /usr/local/tomcat/webapps/i
COPY ords_params /tmp/ords_params
ADD ords.war /usr/local/tomcat/webapps/
RUN java -jar /usr/local/tomcat/webapps/ords.war configdir /tmp/ords_params
EXPOSE 8080
CMD ["catalina.sh", "run"]
© OPITZ CONSULTING 2019
möglich
Docker in Exadata: warum überhaupt und howto
Docker: Container starten
Docker-Image zusammenbauen
docker build -t apex .
Docker-Container starten
docker run -p 8081:8080 apex
© OPITZ CONSULTING 2019 Seite 40Docker in Exadata: warum überhaupt und howto
Weitere Fragen & Antworten
© OPITZ CONSULTING 2019
Überraschend mehr Möglichkeiten
@OC_WIRE OPITZCONSULTING opitzconsultingWWW.OPITZ-CONSULTING.COM
Docker in Exadata: warum überhaupt und howto
Über uns…
Borys NeselovskyiSolution Architect | Oracle ACE
OPITZ CONSULTING Deutschland GmbHLazarettstr. 15, 45127 Essen, Germany
Phone: +49 173 7279029Mail: borys.neselovskyi@opitz-consulting.com
@bneselov
https://borysneselovskyi.wordpress.com
Dmitry GarshinSenior Consultant
OPITZ CONSULTING Deutschland GmbHLazarettstr. 15, 45127 Essen, Germany
Phone: +49 173 7276092Mail: dmitry.garshin@opitz-consulting.com
https://dgarshin.wordpress.com/
.