Je n'ai pas fait cela avec RHEL mais j'ai été capable de le faire en utilisant CentOS 7 minimal installé directement sur un hôte (assez proche). L'hôte a ensuite été mis en place pour ssh, mise à jour &, vsftp ftp/tls, selinux, docker etc Après avoir eu une base décente de choses que je savais que j'avais besoin de l'hôte pour soutenir, j'ai fait une image de base en utilisant mkimage-yum.sh (https://github.com/moby/moby/blob/master/contrib/mkimage-yum.sh). C'est ce qui a produit l'image référencée dans le Dockerfile ci-dessous (centos-base-image: 7.3.1611). À partir de ce point, j'ai créé un Dockerfile et un répertoire d'actifs qui sont adjacents sur le système de fichiers. Dans le répertoire des assets, j'ai dézippé une copie de Oracle Database Express Edition 11g Release 2 pour Linux x64 et créé un fichier setOracleEvn.sh qui va définir quelques variables d'environnement. Maintenant que le contenu de xe tar n'est pas compressé, mettez à jour le fichier Disk1/response/xe.rsp pour configurer les ports et le mot de passe par défaut.
À ce stade, vous devriez être en mesure de créer un Dockerfile ADD s le répertoire asserts dans le conteneur et invoque rpm et installe XE. J'ai utilisé le fichier Disk1/response/xe.rsp extrait pour configurer les ports par défaut et le mot de passe car c'était la solution la plus simple (en évitant les commandes sed). Si vous vouliez une installation purement scriptée, vous pouvez ajouter le logiciel zip que vous voulez dans la phase d'installation de yum et effectuer les opérations.
je suis tombé sur quelques obstacles:
- Docker de/dev/default SHM de 64MB est petite pour exécuter la configuration Oracle.
- Un problème avec la politique SELinux arrêter le
/etc/init.d/oracle-xe configure < response/xe.rsp
d'exécuter avec succès.
- RPM -h (hachage) option de rupture du processus de configuration.
- Container a tendance à arrêter après tout CMD est exécutée.
Ce qui suit est la structure des répertoires et fichiers:
ls-du répertoire parent
drwxr-xr--. 3 user group ... assets
-rwxr-xr--. 1 xxx xxx ... 1 11:22 Dockerfile
ls actifs -la/
-rwxr-xr--. 1 xxx xxx ... exportOracleEnv.sh
drwxr-xr--. 3 xxx xxx ... oracle-xe-11.2.0-1.0x86_64
ls - la assets/oracle-xe-11.2.0-1.0x86_64
drwxr-xr--. 4 xxx xxx ... Disk1
ls biens-la/oracle-xe-11.2.0-1.0x86_64/Disk1
-rwxr-xr--. 1 xxx xxx ... oracle-xe-11.2.0-1.0.x86_64.rpm
drwxr-xr--. 2 xxx xxx ... response
drwxr-xr--. 2 xxx xxx ... upgrade
vi réponse/xe.rsp - assurer son vide de tout sauf le port http, port d'écoute tns , mot de passe et y/n pour démarrer au démarrage (les choses se cassent si les commentaires sont laissés dans le fichier).
8080
1521
welcome1
welcome1
y
vi actifs/exportOracleEnv.sh - oracle définit vars pour chaque bash
#!/bin/sh
echo 'export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe' >> ~/.bashrc
echo 'export PATH=$ORACLE_HOME/bin:$PATH' >> ~/.bashrc
echo 'export ORACLE_SID=XE' >> ~/.bashrc
echo 'export LISTENERS_ORA=/u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora' >> ~/.bashrc
Le Dockerfile est un peu occupé, mais voici comment j'ai pu faire fonctionner les choses. J'utilise docker depuis quelques jours et linux depuis deux semaines alors pardonnez-moi de ne pas avoir la solution la plus élégante à cela.
FROM centos-base-image:7.3.1611
#do not use $ in ENV: https://github.com/moby/moby/issues/25099
ENV _rpmLocation /assets/oracle-xe-11.2.0-1.0x86_64/Disk1
#installing epel because its required to resolve net-tools, your milage may very depending on what image your starting with.
RUN yum -y install epel-release libaio bc flex && yum -y install net-tools kernel-devel
#oracle uncompressed zip file provided in assets directory, also provides preconfigured response file
ADD assets /assets
WORKDIR ${_rpmLocation}
# echo $ORACLE_HOME just because I like to know the process worked as I expect. The environment variables must be in place before running configure.
RUN rpm -i oracle-xe-11.2.0-1.0.x86_64.rpm && /assets/exportOracleEnv.sh && echo $ORACLE_HOME
# execute oracle-xe configure with response file
RUN /etc/init.d/oracle-xe configure < response/xe.rsp
WORKDIR/
#clean up temp files, create ssh key and ensure known root password.
#Finally set the final hostname to listen to all interfaces in tnsnames/listeners.ora otherwise the files will have the incorrect host name (it changes with every layer).
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' && systemctl enable sshd && echo "root:admin" | chpasswd && rm -rf ${_ASSETS} && \
sed -i -E "s/HOST = [^)]+/HOST = 0.0.0.0/g" /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora && \
sed -i -E "s/HOST = [^)]+/HOST = 0.0.0.0/g" /u01/app/oracle/product/11.2.0/xe/network/admin/tnsnames.ora
#start sshd first (allows immediate connections via ssh) then db. leave tail running in forground
CMD /sbin/sshd && /etc/init.d/oracle-xe start && tail -f /dev/null
Assurez-vous que lorsque vous vous construisez spécifiez --shm taille (en cours d'exécution de la dir Dockerfile)
docker build --shm-size=2g -t centos-oracle:7.3.1611 .
Et encore une fois (taille --shm) lorsque vous exécutez le conteneur, assurez - Options DTI pour maintenir le fonctionnement du conteneur CentOS 7 après le CMD exécute
docker run --shm-size=2g --name oracle-db -d -t -i -p 5022:22 -p 5080:8080 -p 1521:1521 centos-oracle:7.3.1611
Enfin, vous devriez être en mesure de se connecter via ssh faire ssh vous a commencé, vous pouvez utiliser les journaux docker -f oracle-db à surveiller ssh sortie à propos de th Les clés ecdsa manquent. Note: Comme votre bâtiment répare encore et encore les choses, après avoir accepté un certificat ssh de votre client et que vous avez lancé une nouvelle commande de construction docker, vous devrez supprimer l'ancien certificat rm: remove regular file ‘/root/.ssh/known_hosts’? yes
. Le mot de passe est défini dans le Dockerfile à admin
ssh -p 5022 [email protected]
...
[email protected]'s password:
Authenticated to 127.0.0.1 ([127.0.0.1]:5022).
Une fois ssh est établie, vous pouvez maintenant exécuter sqlplus, connectez-vous en tant que système: Welcome1
[[email protected] ~]# sqlplus
SQL*Plus: Release 11.2.0.2.0 Production on Mon May 1 17:22:55 2017
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Enter user-name: system
Enter password:
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
SQL> select * 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
Si quelqu'un peut trouver une solution à la politique de SELinux arrêter le processus de configuration avec Oracle-xe ce serait génial d'avoir enfin résolu cela.