RHEL에서는이 작업을 수행하지 않았지만 최소한 CentOS 7을 호스트에 직접 설치하여이 작업을 수행 할 수있었습니다 (충분히 근접). 그 다음 호스트는 ssh에 대해 설정되었고 업데이트 & 업그레이드, vsftp ftp/tls, selinux, docker 등을 설정했습니다. 지원해야 할 호스트가 필요하다는 것을 알았을 때 나는 mkimage-yum.sh를 사용하여 기본 이미지를 만들었습니다. (https://github.com/moby/moby/blob/master/contrib/mkimage-yum.sh). 이것은 아래의 Dockerfile에서 참조 된 이미지를 생성 한 것입니다 (centos-base-image : 7.3.1611).
uname -a
Linux CentOS7 3.10.0-514.16.1.el7.x86_64 #1 SMP Wed Apr 12 15:04:24 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
docker version
Client:
Version: 1.12.6
API version: 1.24
Package version: docker-common-1.12.6-16.el7.centos.x86_64
Go version: go1.7.4
Git commit: 3a094bd/1.12.6
Built: Fri Apr 14 13:46:13 2017
OS/Arch: linux/amd64
Server:
Version: 1.12.6
API version: 1.24
Pack age version: docker-common-1.12.6-16.el7.centos.x86_64
Go version: go1.7.4
Git commit: 3a094bd/1.12.6
Built: Fri Apr 14 13:46:13 2017
OS/Arch: linux/amd64
이 시점부터 파일 시스템에서 인접한 Dockerfile과 assets 디렉토리를 만들었습니다. 자산 dir에서 Linux x64 용 Oracle Database Express Edition 11g 릴리스 2의 사본을 압축 해제하고 몇 가지 환경 변수를 설정할 setOracleEvn.sh 파일을 작성했습니다. 이제 xe tar의 내용을 압축 해제 했으므로 Disk1/response/xe.rsp 파일을 업데이트하여 기본 포트와 암호를 구성하십시오.
이 시점에서 ADD ADS 이 컨테이너에 어설 션 디렉토리 인 dockerfile을 생성하고 rpm을 호출하고 XE를 설치할 수 있어야합니다. 추출 된 Disk1/response/xe.rsp 파일을 사용하여 기본 포트와 암호를 구성하는 것이 가장 간단한 해결책이었습니다 (sed 명령 사용 안 함). 순수한 스크립팅 설치를 원한다면 원하는 설치 프로그램을 추가하고 설치 작업을 수행 할 수 있습니다.
나는 몇 가지 장애물로 실행 :
이
- 64메가바이트의 부두 노동자의는/dev/SHM 기본은 오라클 구성을 실행하는 작은이다.
- SELinux 정책이 성공적으로 실행에서
/etc/init.d/oracle-xe configure < response/xe.rsp
중지에 대한 문제.
- RPM -h (해시) 옵션은 구성 프로세스를 중단합니다.
- 컨테이너 CMD의 모든 실행 후 중지하는 경향이있다.
정보 디렉토리 구조 및 파일 :
LS -la 부모 디렉토리에서
drwxr-xr--. 3 user group ... assets
-rwxr-xr--. 1 xxx xxx ... 1 11:22 Dockerfile
LS -la 자산/
-rwxr-xr--. 1 xxx xxx ... exportOracleEnv.sh
drwxr-xr--. 3 xxx xxx ... oracle-xe-11.2.0-1.0x86_64
LS - 자산/oracle-xe-11.2.0-1.0x86_64
,451,515,
drwxr-xr--. 4 xxx xxx ... Disk1
LS -la 자산/오라클 XE-11.2.0-1.0x86_64/디스크 1
-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 응답/xe.rsp을 - HTTP 포트, TNS 리스너 포트 아무것도하지만, 자사의 무효 확인 , 암호 및 부팅시 y/n을 사용합니다 (주석이 파일에 남아 있으면 문제가 발생합니다).
8080
1521
welcome1
welcome1
y
VI 자산/exportOracleEnv.sh - 설정 오라클은 모든 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
Dockerfile 조금 바쁜 위해 바르하지만 내가 일하는 것을 얻을 수있었습니다 방법이다. 나는 며칠 동안은 이제 도커를 사용하고 있으며, 2 주 동안 리눅스를 사용하여 가장 우아한 해결책이 없다는 것을 용서합니다.당신은 당신이 용기를 실행할 때
docker build --shm-size=2g -t centos-oracle:7.3.1611 .
그리고 다시 (--shm 크기), 확인 --shm 크기합니다 (Dockerfile의 디렉토리에서 실행)를 지정 빌드 할 때
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
확인 - CMD를 마지막으로
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
확실 SSH를 시작하게 ssh를 통해 연결할 수 있어야합니다을 실행 한 후 DTI 옵션은 SSH를 감시하기 위해 -f 오라클 DB는 고정 표시기 로그를 사용할 수 있으며, CentOS는 7 용기 프로그램을 계속 실행하기 th에 관한 결과 ecdsa 열쇠가 누락되었습니다. 참고 : 건물을 반복해서 설치하면서 클라이언트의 ssh 인증서를 수락하고 새 docker 빌드 명령을 발행 한 후에는 이전 인증서 rm: remove regular file ‘/root/.ssh/known_hosts’? yes
을 제거해야합니다. 암호는 SSH는 지금, SQLPLUS를 실행하는 시스템으로 로그인 할 수 있습니다 설정되면
ssh -p 5022 [email protected]
...
[email protected]'s password:
Authenticated to 127.0.0.1 ([127.0.0.1]:5022).
를 관리자에하는 Dockerfile에 설정됩니다 사람이 SELinux 정책에 대한 해결책을 마련 할 수있는 경우
[[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
을 welcome1 oracle-xe로 구성 프로세스를 중지하면 마침내 해결할 수 있습니다.