이제 인스턴스 서버 접속까지 완료되었고, DB 생성만 하면 끝이다. DB의 경우 오라클을 사용하려고 하는데, 오라클을 그냥 설치하는 것이 아닌 docker를 먼저 설치하고 도커 이미지로 oracle 11g를 설치하려고 한다. docker에 대한 설명까지 작성하면 글이 너무 길어질 것 같으니 다른 게시글을 참고하자..
순서
1. 구획(Compartments) 생성
2. 가상 클라우드 네트워크(Virtual Cloud Networks) 생성
3. 인스턴스(Instances) 생성
4. 예약된 퍼블릭 IP(Reserved Public IP) 할당
5. ssh 서버 접속
6. DB생성
지난번에 비밀번호를 통해 접속할 수 있도록 만들어두긴 했지만, 관리자 권한이 있는 계정은 따로 만지지 않았기 때문에 그 전처럼 private key 로 접속해야된다.. 우선 ssh 서버에 다시 접속해본다.
ssh ubuntu@[IP] -i .\ssh-key-202x-xx-xx.key
# 관리자 모드 진입
sudo su
# apt update
sudo apt update (관리자 모드이기 때문에 sudo 생략 가능)
docker 사용을 위한 패키지들을 설치해준다
# docker 사용을 위한 패키지들
sudo apt install apt-transport-https
sudo apt install ca-certificates
sudo apt install curl
sudo apt install software-properties-common
PPA : Personal Package Archive.
우분투는 우분투 소프트웨어 센터에 등록된 프로그램 및 버전만 다운받을 수 있다. 이 방식이 편리하고 검증된 프로그램만 다운받을수 있다는 점에서 안전하지만 새로운 버전이 빨리 업데이트 되지 않는다는 단점이 있다. 업데이트 주기는 우분투가 업데이트 되는 6개월인데, 보다 자유롭게 최신 버전과 등록되지 않은 프로그램을 다운받을수 있도록 도와주는것이 PPA다.
그 다음, docker의 공식 gpg키를 추가해준다. gpg키는 docker에만 존재하는 것은 아니고, 리눅스 패키지 관리 툴이 이 프로그램 패키지가 유효한지 확인하기 위해 설치 전 gpg키로 검증하는 과정을 거친다고 한다. 그래서 curl로 gpg키를 다운받아 apt 키 리스트에 추가해야된다. gpg키를 다운받고 바로 apt 키 리스트에 추가하기 위해 파이프라인( | )을 사용하여 add 를 해준다.
# docker 의 공식 gpg 키 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
docker의 공식 저장소도 추가해준다. 아래 명령어를 실행하면 apt 리스트에 docker가 추가된다.
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
최신 docker 버전을 다운받기 위해 apt-get 패키지 업데이트 해주고 apt-get으로 docker 최신버전을 설치한다. docker엔진은 기업용인 EE(Enterprise Edition) 과 무료제공인 CE(Community Edition) 이 있다. 필자는 CE버전을 설치했다. (apt-get 말고 위에서 했던 apt 도 가능하다. 근데 그냥 apt-get으로 했다.)
#5 apt 업데이트
sudo apt-get update
#6 공식 저장소에서 docker 최신 패키지 설치
sudo apt-get install docker-ce
docker 설치를 확인하기 위해 버전을 확인하고, 기본 이미지인 hello-world 를 이용하여 컨테이너를 만들어본다
# docker 버전 확인
docker -v
# docker 기본 이미지 hello-world
sudo docker run hello-world
우선 공개된 oracle 이미지들을 확인한다.
# docker 에서 공개된 이미지들 확인
docker search oracle-xe-11g
이 중에 가장 추천 수가 높은 이미지를 선택해서 다운로드 받았다.
# docker 이미지 다운로드
docker pull oracleanutshell/oracle-xe-11g
처음 다운로드 했을 때 아래 에러가 나서 뭔가 검색해봤더니
Error response from daemon: pull access denied for oracleanutshell/oracle-xe-11g,
repository does not exist or may require
'docker login': denied: requested access to the resource is denied
run 명령에 오타가 있었다.. 스펠링 체크하고 다운로드 다시 했다.
# docker 이미지 다운로드
docker pull oracleinanutshell/oracle-xe-11g
# 다운받은 이미지 실행
docker run -d -p 1521:1521 oracleinanutshell/oracle-xe-11g
oracle 이미지가 정상적으로 실행되었는지 확인한다. oracle shell 로 접속하기 위해 컨테이너 NAME 값이 필요하니 확인해두자.
# docker 이미지 실행 확인
docker ps
정상적으로 실행되었다. 이제 서비스가 실행되었으니 oracle 에 접속해본다.
우선 실행중인 oracle shell 로 접속한다. 위에 사진에서 기억해 둔 NAME 값을 사용해야된다.
# 실행중인 docker 컨테이너로 진입
docker exec -it [NAME] bash (필자의 경우 sad_novel)
진입에 성공했으면 기존 서버에서 컨테이너명으로 변경되는 것을 확인할 수 있다. 이제 sqlplus 로 SQL 에 접속한다. 초기 관리자 정보는 system/oracle 이다.
보안을 위해 초기 비밀번호부터 변경한다. 커맨드 창에 password 를 입력하고 변경하고자 하는 비밀번호를 입력해준다.
이제 DB툴을 사용하여 Oracle 외부 접속을 해볼건데, 필자는 dbeaver 를 사용해서 접속할 예정이다. dbeaver 를 설치한다. dbeaver 다운로드 페이지에서 Windows (installer) 를 눌러 다운받았다.
한국어 기본값으로 깔려있으니 그대로 진행하고
어차피 이 PC에서는 계정을 현재 계정만 사용하기에 For me 로 해서 진행했다.
구성 요소도 변경사항 없이 그대로 진행
나머지도 변경사항 없이 그대로 다음 다음 설치로 진행해서 다운로드를 완료하였다.
dbeaver 를 실행했을 때 빈 화면이면 상단 맨 왼쪽에 아이콘을 클릭하거나, ctrl + shift + n 을 누르면 된다.
필자는 오라클에 연결할 것이기 때문에 oracle 을 선택해주고 next
Host 에 인스턴스 서버의 IP를 입력하고 포트는 1521 그대로 사용한다. Password 에 아까 변경해 둔 비밀번호를 입력하고 왼쪽 하단에 Test Connection 을 눌러서 정상적으로 연결됐는지 확인한다.
최초 접속인 경우에는 드라이버가 설치되어있지 않기 때문에 드라이버를 설치하라고 팝업창이 나온다. 설치해주도록 하자.
근데 아마 연결이 안될 것이다. 인스턴스 서버를 생성하면 열리는 기본 포트는 80밖에 없기 때문에 1521 포트를 추가로 열어주어야되기 때문이다. 인스턴스 서버로 들어가서 포트를 열어주도록 하자.
우선 인스턴스에 들어가서 서브넷을 클릭한다.
서브넷 화면으로 들어가서 아래로 내려보면 보안 목록이 있다. 기본 보안 목록에서 따로 추가한 것이 없기 때문에 default 보안 목록을 클릭하여 들어간다.
아래로 내려보면 현재 수신 규칙이 22번 포트만 열려있는 것을 확인할 수 있다. 1521 번을 추가로 열어주도록 수신 규칙 추가(Add Ingress Rules)를 클릭한다.
모든 접속을 허용해주기 위해 소스 CIDR 에 0.0.0.0/0을 입력해주고 대상 포트 범위(Destination Port Range)에 1521 입력, 설명사항에 oracle 접속용 포트임을 적어준 뒤 수신 규칙 추가를 눌러 추가해주었다.
그리고 다시 접속을 시도해봤는데..
읭
oracle 에 다시 접속해서 DB명을 확인해보니
# DB명 확인하는 방법
SELECT NAME FROM v$database;
DB명이 XE 로 돼있었다. Database 를 XE 로 변경하고 다시 시도해본다.
굿
Finish 를 누르면 이제 DB 접속까지 완료된 것을 볼 수 있다. 헤헤
블로그에 글을 쓰면서 하니까 힘들긴 한데 확실히 기록을 하면서 진행하니까 훨씬 기억에 잘 박히기도 하고 혹시나 나중에 다시 사용해야될 일이 있을 때 여기저기 뒤져보는거 없이 진행할 수 있다는게 좋을거 같아 계속 작성할 생각이다. 일단 현재 시리즈는 여기서 마무리되지만 웹 서버 배포와 여러가지 하고싶은 것을 다 할거기 때문에 아직 넘어야 할 산이 많이 남아있다. 일단 이번 포스트는 여기서 마치며.. 다음에 해볼 내용을 구상해봐야겠다..