IT일상

Oracle Database 18c XE docker 설치

  • 인프라
Profile picture

Written by solo5star

2021. 10. 2. 19:59

Oracle Database를 docker로 설치하는 방법이 타 DB보다 조금 복잡하여 글로 남겨보려고 합니다.

mariadb나 postgresql의 경우 그냥 hub.docker.com에서 container image를 바로 pull하면 됩니다.

$ sudo apt install docker docker-compose git -y

시작하기 전, docker, docker-compose, git이 설치되어 있지 않다면 설치 후 진행해야 합니다.

1. docker 이미지 빌드

$ git clone https://github.com/oracle/docker-images

Oracle사에선 Oracle Database를 docker로 빌드하기 위한 스크립트를 제공합니다. git clone 명령어를 사용하여 다운로드합니다.

$ cd docker-images/OracleDatabase/SingleInstance/dockerfiles
$ ./buildContainerImage.sh -v 18.4.0 -x

그리고 buildContainerImage.sh 를 실행하여 docker 이미지를 빌드합니다.

-v 옵션은 버전, -x 옵션은 빌드 대상의 데이터베이스가 Express Edition임을 의미합니다.

버전은 18c Express 를 선택했습니다. 18 이외의 버전을 사용할 시 binary를 따로 다운로드 받은 후 dockerfiles 아래의 폴더 (dockerfiles/<version>)에 넣으셔야 합니다. 자세한 것은 https://github.com/oracle/docker-images/blob/main/OracleDatabase/SingleInstance/README.md#building-oracle-database-container-images 를 참고해주세요.

buildContainerImage.sh 스크립트 파일을 실행하시면 알아서 빌드가 진행됩니다.

1

빌드가 좀 오래 걸립니다. i5-4590/8GB 시스템에서 2563초가 걸렸습니다. (42분) 18c Express binary 다운로드 때문에 이렇게 걸린 것 같습니다.

2. docker 컨테이너 생성

$ cd ~/oracle
$ vi docker-compose.yml

docker 실행을 위해 docker-compose.yml을 생성합니다.

docker-compose.yml
version: "3"
services:
  oracle-xe-18c:
    image: oracle/database:18.4.0-xe
    container_name: oracle-xe-18c
    restart: unless-stopped
    ports:
      - 1521:1521
      - 5500:5500
    volumes:
      # The data volume to use for the database.
      # Has to be writable by the Unix "oracle" (uid: 54321) user inside the container!
      # If omitted the database will not be persisted over container recreation.
      - ./oradata:/opt/oracle/oradata
      # Optional: A volume with custom scripts to be run after database startup.
      # For further details see the "Running scripts after setup and on startup" section below.
      #- ./scripts/startup:/opt/oracle/scripts/startup
      # Optional: A volume with custom scripts to be run after database setup.
      # For further details see the "Running scripts after setup and on startup" section below.
      #- ./scripts/setup:/opt/oracle/scripts/setup
    environment:
      # The Oracle Database SYS, SYSTEM and PDB_ADMIN password (default: auto generated).
      - ORACLE_PWD=1234
      # The character set to use when creating the database (default: AL32UTF8).
      #- ORACLE_CHARACTERSET=AL32UTF8

docker-compose.yml 의 내용은 위와 같이 작성합니다. 영어로 된 주석은 GitHub에서 가져온 것입니다. 상황에 맞게 주석 해제하여 사용하시면 됩니다. 자세한 내용은 https://github.com/oracle/docker-images/blob/main/OracleDatabase/SingleInstance/README.md#running-oracle-database-18c-express-edition-in-a-container 를 참고해주세요.

  • 비밀번호는 ORACLE_PWD 환경변수를 수정하여 변경할 수 있습니다.
  • 데이터는 oradata 폴더에 저장되도록 지정하였습니다.

Oracle Database는 컨테이너 내부적으로 54321이라는 UID를 사용하기 때문에, 폴더에 권한을 설정하여야 데이터가 정상적으로 저장됩니다.

$ mkdir oradata
$ sudo chown 54321 oradata

위의 명령어를 입력하여 oradata 폴더를 생성하고 소유자를 54321로 바꿔주세요.

3. docker 실행

$ docker-compose up -d

위의 명령을 실행하면 docker-compose.yml 에서 정의했던 내용대로 docker 컨테이너가 생성 · 실행됩니다.

$ docker-compose ps -a

정상적으로 컨테이너가 실행에 성공했는지 확인하기 위해 위의 명령어를 입력합니다.

2 3

State에서, (health: starting) 이라고 뜨면 컨테이너가 켜지는 중이라는 뜻입니다. (healthy)가 될 때까지 기다려야 합니다. 저는 약 6~8분정도 걸렸습니다. 아마 초기 세팅때문에 조금 오래 걸린 것 같네요.

$ docker-compose down

docker-compose down 을 입력하면 컨테이너가 종료됩니다.

4. Oracle Database 연결

4

sqldeveloper를 사용하여 방금 생성한 Oracle Database 컨테이너에 연결합니다.

5

위와 같이 입력해주시면 됩니다. 비밀번호는 아까 docker-compose.yml 에서 설정한 대로 입력하면 됩니다.

docker를 로컬에서 실행중이면 호스트 이름에는 localhost를 입력하시면 됩니다. 외부 서버에서 실행중이라면 해당 서버 주소를 입력하시면 됩니다.

6

접속이 잘 된 것을 확인할 수 있습니다.


Profile picture

Written by solo5star

안녕하세요 👋 개발과 IT에 관심이 많은 solo5star입니다

  • GitHub
  • Baekjoon
  • solved.ac
  • about
© 2023, Built with Gatsby