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 스크립트 파일을 실행하시면 알아서 빌드가 진행됩니다.
빌드가 좀 오래 걸립니다. i5-4590/8GB 시스템에서 2563초가 걸렸습니다. (42분) 18c Express binary 다운로드 때문에 이렇게 걸린 것 같습니다.
2. docker 컨테이너 생성
$ cd ~/oracle
$ vi docker-compose.yml
docker 실행을 위해 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
정상적으로 컨테이너가 실행에 성공했는지 확인하기 위해 위의 명령어를 입력합니다.
State에서, (health: starting)
이라고 뜨면 컨테이너가 켜지는 중이라는 뜻입니다. (healthy)
가 될 때까지 기다려야 합니다. 저는 약 6~8분정도 걸렸습니다. 아마 초기 세팅때문에 조금 오래 걸린 것 같네요.
$ docker-compose down
docker-compose down
을 입력하면 컨테이너가 종료됩니다.
4. Oracle Database 연결
sqldeveloper를 사용하여 방금 생성한 Oracle Database 컨테이너에 연결합니다.
위와 같이 입력해주시면 됩니다. 비밀번호는 아까 docker-compose.yml 에서 설정한 대로 입력하면 됩니다.
docker를 로컬에서 실행중이면 호스트 이름에는 localhost
를 입력하시면 됩니다. 외부 서버에서 실행중이라면 해당 서버 주소를 입력하시면 됩니다.
접속이 잘 된 것을 확인할 수 있습니다.