가장 빨리 만나는 Docker 18장 - 3. Oracle 데이터베이스 Dockerfile 작성하기

저작권 안내
  • 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
  • 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.

Docker로 Django 애플리케이션 구축하기

이재홍 http://www.pyrasis.com 2014.08.02 ~ 2014.09.20

Oracle 데이터베이스 Dockerfile 작성하기

데이터베이스 이미지를 생성하기 전에 Oracle 사이트에서 Oracle 11g Express Edition 패키지를 받습니다. 웹 브라우저에서 다음 URL에 접속합니다.

그림 18-3 Oracle 11g Express Edition 패키지 다운로드

Accept License Agreement를 클릭하고 Oracle Database Express Edition 11g Relase 2 for Linux x64를 받습니다. 파일을 받으려면 Oracle 계정으로 로그인을 해야합니다. Oracle 계정이 없다면 먼저 가입을 합니다.

oracle-xe-11.2.0-1.0.x86_64.rpm.zip 파일의 압축을 풀면 Disk1 디렉터리에 rpm 파일이 들어있습니다. 이 rpm 파일을 데이터베이스 이미지를 생성할 리눅스 서버로 복사합니다. Windows에서는 WinSCP(http://www.winscp.net), Mac OS X에서는 sftp 명령을 사용하면 됩니다.

이제 데이터베이스 이미지를 생성합니다. oracle 디렉터리를 생성하고 다음 내용을 Dockerfile로 저장합니다.

~$ mkdir oracle
~$ cd oracle
~/oracle/Dockerfile
FROM centos:centos7

RUN yum install -y net-tools bc openssh-server
RUN rm -rf /var/lock
RUN mkdir -p /var/lock/subsys

WORKDIR /tmp
ADD oracle-xe-11.2.0-1.0.x86_64.rpm /tmp/
RUN yum install -y oracle-xe-11.2.0-1.0.x86_64.rpm
RUN rm -rf oracle-xe-11.2.0-1.0.x86_64.rpm

WORKDIR /u01/app/oracle/product/11.2.0/xe/config/scripts
RUN sed -i "s/memory_target/#memory_target/g" init.ora
RUN sed -i "s/memory_target/#memory_target/g" initXETemp.ora
RUN echo -e "pga_aggregate_target=200540160\nsga_target=601620480" >> init.ora
RUN echo -e "pga_aggregate_target=200540160\nsga_target=601620480" >> initXETemp.ora

RUN sed -i "s/#PermitRootLogin/PermitRootLogin/g" /etc/ssh/sshd_config
RUN sshd-keygen

ADD entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

EXPOSE 22
EXPOSE 1521
EXPOSE 8080

ENTRYPOINT /entrypoint.sh
  • yum install 명령으로 net-tools, bc, openssh-server 패키지를 설치합니다.
  • /var/lock 파일을 삭제하고 /var/lock/subsys 디렉터리를 생성합니다.
  • /tmp 디렉터리에 oracle-xe-11.2.0-1.0.x86_64.rpm 파일을 추가하고 yum install 명령으로 설치합니다. 그리고 설치가 끝나면 rpm 파일을 삭제합니다.
  • Oracle 설정 파일인 init.ora, initXETemp.ora 파일을 수정합니다.
    • memory_target#을 추가하여 사용하지 않도록 수정합니다.
    • pga_aggregate_target=200540160, nsga_target=601620480 두 줄을 추가합니다.
  • SSH 서버를 설정합니다.
    • /etc/ssh/sshd_configPermitRootLogin 부분에서 #을 삭제하여 root로 로그인할 수 있도록 설정합니다.
    • sshd-keygen 명령으로 서버 키 쌍을 생성합니다.
  • entrypoint.sh 파일을 추가한 뒤 실행할 수 있도록 권한을 설정합니다.
  • EXPOSE에 22, 1521, 8080을 설정하여 22, 1521, 8080번 포트에 접속할 수 있도록 합니다.
  • ENTRYPOINT에 /entrypoint.sh 파일을 설정하여 컨테이너가 시작되었을 때 스크립트 파일을 실행합니다.

다음 내용을 entrypoint.sh로 저장합니다.

~/oracle/entrypoint.sh
#!/bin/bash

if [ -z $ORACLE_PASSWORD ]; then
  exit 1
fi

echo "export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe" > /etc/profile.d/oracle.sh
echo "export ORACLE_SID=XE" >> /etc/profile.d/oracle.sh
echo "export PATH=$PATH:/u01/app/oracle/product/11.2.0/xe/bin" >> /etc/profile.d/oracle.sh
source /etc/profile.d/oracle.sh

printf 8080\\n1521\\n$ORACLE_PASSWORD\\n$ORACLE_PASSWORD\\nn | /etc/init.d/oracle-xe configure
echo "root:$ORACLE_PASSWORD" | chpasswd

/usr/sbin/sshd -D
  • 환경 변수에 ORACLE_PASSWORD가 없으면 데이터베이스를 실행하지 않고 빠져나옵니다.
  • /etc/profile.d/oracle.sh 파일에 ORACLE_HOME, ORACLE_SID, PATH 환경 변수를 설정하고, source 명령으로 설정값을 적용합니다.
    • /u01/app/oracle/product/11.2.0/xe는 Oracle 데이터베이스가 설치된 디렉터리입니다.
    • Oracle 11g Express Edition이므로 XE를 설정합니다.
    • sqlplus 등의 명령을 사용할 수 있도록 실행 파일 경로도 설정합니다.
  • printf 명령을 사용하여 /etc/init.d/oracle-xe configure를 실행할 때 설정값을 넣습니다. 8080, 1521을 설정하고, 비밀번호는 환경 변수의 ORACLE_PASSWORD 값을 설정합니다.
    • /etc/init.d/oracle-xe configure를 실행하면 자동으로 Oracle 서비스가 실행됩니다.
  • SSH로 접속할 수 있도록 root 계정의 비밀번호를 환경 변수의 ORACLE_PASSWORD 값으로 변경합니다.
  • /usr/sbin/sshd -D 명령을 실행하여 SSH 서버를 foreground로 실행합니다.

docker build 명령으로 이미지를 생성합니다.

~/oracle$ sudo docker build --tag oracle .

저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

2014-11-30