본문 바로가기
공부

wsl + ubuntu + docker + docker-compose + superset + oracle

by 자비리뷰 2023. 9. 17.

google431442800671f652.html
0.00MB

 

내가 하는 방식(?)이 오답일 가능성이 높다.

(또한 현재 방식으로 제대로 돌아가는 건지 검증은 아직 못했다.)

하지만 나중에 나와같은 실력의 사람에게 나의 5일간의 뻘짓이 도움이 돼

당신의 해답을 찾는데 시간절약을 할 수 있을거라 생각해 적어본다.

 

깔끔히 정리할 시간은 없을 거 같고 참고한 블로그와 내가 적은 명령어(?)를 적어두겠다.

(참고로 난 비전공에 개발공부(?) 6개월 차이니 알아서 걸러들었으면 좋겠다.)


https://weejw.tistory.com/612

뭐니뭐니해도 가장 도움이 된 블로그는 위의 블로그였다.

 

오라클은 

https://collabnix.com/how-to-run-oracle-database-in-a-docker-container-using-docker-compose/

 

https://collabnix.com/how-to-run-oracle-database-in-a-docker-container-using-docker-compose/

 

collabnix.com

이 사이트를 참조해 설치했는데 지금 위 사이트가 접속이 안된다.

월요일날 회사 가서 저 사이트를 참조해 깔아야 하는데 망했다.

(글 작성한 날이 23년 09월 16일이었는데 17일 새벽에 다행히 사이트가 복구됐다.)

 


WSL 및 우분투 설치는 

https://ingu627.github.io/tips/install_ubuntu/

 

윈도우10에서 리눅스(Linux) 설치하기 (Ubuntu on WSL2)

AWS에서 가상의 환경을 작업하던 중, 내 PC에서 구동해 보았으면 싶어서 설치를 진행해 보았습니다. 윈도우10 환경에서 wsl2를 설치해봅니다.

ingu627.github.io

이 글을 참조해 설치할 수 있었다.

 


도커 설치는

https://goddaehee.tistory.com/313

 

[ Windows ] docker desktop 설치하기 (WSL2 Ubuntu 활용)

Windows 용 Docker Desktop 설치하기 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ Docker Desktop 설치하기 ] 입니다. : ) 0. Docker Desktop 이란? - Docker Desktop을 통해 Docker를 간편하게 설정하여 사용할 수 있다.

goddaehee.tistory.com

이 글을 참조해 설치할 수 있었다.


 

superset에 여러 버전이 있는 거 같다.

 

여러사람들이 

git clone https://github.com/apache/superset.git
cd superset
git chechout 2.1.0 or 3.0.0

이런 방식으로 설명해 줬는데

난 왜 그런지 모르겠지만 2.1.0 브랜치로 변경이 안 됐다.

 

(뇌피셜)그렇다고 master브랜치의 것으로 만들면 master브랜치는 매일매일 완벽하지 않은 것들이 push 돼 제대로 동작하지 않는 거 같다.

 

여튼 그래서 공식적으로 발표된 버전을 깔고 싶었는데

대략 두 가지 방법을 찾은 거 같은데

하나는 docker hub에서 받는 것과, git 허브에서 받는 방법을 찾았다.

docker hub에서 받는 방법은 그냥 이런 게 있구나 정도만 보고 해보지는 않았다.

 


docker hub

https://hub.docker.com/r/apache/superset/tags?page=1&name=2.1.0 

 

Docker

 

hub.docker.com

이 Tag검색을 해 제대로 된 버전을 받으면 되는 거 같은데 뭐가 워낙 많아 뭐가 뭔지 모르어서 docker hub에서 받는 건 포기했다.

((뇌피셜) 2.1.0rc3 혹은 2.1.0. 혹은 2.1.0rc1 같은 걸 받으면 되는 거 같기도 한데 여튼 난 잘 모르겠다)

 


git hub

https://github.com/apache/superset/wiki

 

Home

Apache Superset is a Data Visualization and Data Exploration Platform - apache/superset

github.com

내가 영어가 짧아 잘 모르겠지만

위의 Releases의 

  • Latest completed/voted releases may be found here

여기가 공식적으로 출시한 버전을 다운 받을 수 있는 공간인 거 같다.

here을 누르면

이렇게 다운받을 수 있는 창이 나온다.

(뇌피셜) 참고로 나는 최초에 2.1.1을 받았는데 이 버전은 http://localhost:8088로 하면 admin/admin 으로 접속이 되는데 ip주소로 접속을 하면 계속 같은 페이지만 돌려줘서 욕하다가

https://github.com/apache/superset/issues/24579

 

Login page issue · Issue #24579 · apache/superset

Hi, Last week, I installed Superset using the Docker Compose method. I did the following steps exactly: git clone https://github.com/apache/superset.git cd superset sudo docker-compose -f docker-co...

github.com

위의 글을 보고 2.1.0으로 다운받기로 했다.

2.1.0은 로그인이 잘 되더라.

 


그 뒤 우분투에 접속해

wget https://dist.apache.org/repos/dist/release/superset/2.1.0/apache-superset-2.1.0-source.tar.gz
tar -zxvf apache-superset-2.1.0-source.tar.gz
cd apache-superset-2.1.0rc3/

# <- 이 부분은 오라클 쓸 사람만
	cd docker/
	touch requirements-local.txt
	echo "cx_Oracle" > requirements-local.txt
	cd ..
# ->

nano docker-compose-non-dev.yml
x-superset-image: &superset-image apache/superset:2.1.0

(뇌피셜) 위의 git게시판(?)에서 진짜 안전하게 2.1.0 버전을 받기 위해 docker-compose-non-dev의 image를 latest에서 2.1.0으로 고정해주라고 하는 거 같다.

docker-compose -f docker-compose-non-dev.yml pull
docker-compose -f docker-compose-non-dev.yml up

이렇게 컨테이너를 만들어주니 

로그인이 가능했다.

 


superset에 oracle을 연결하기위해서는 

위에 cx_Oracle이라는 드라이버가 필요한 거 같다.

해당 드라이버를 깔면

이 리스트에 Oracle을 찾을 수 있는 거 같다.

 

oracle://아이디:비밀번호@아이피:포트/SID

oracle://아이디:비밀번호@localhost:1521/SID

oracle://아이디:비밀번호@아이피:포트/SID
oracle://아이디:비밀번호@localhost:1521/SID

이렇게 적으면 접속이 돼야 하는데 

위와 같이 오류가 뜬다.

 

이걸 해결하려고 안 되는 영어로 몇 시간 검색해보니

Oracle Client를 받아주면 된다고 한다.

https://www.oracle.com/kr/database/technologies/instant-client/linux-x86-64-downloads.html

 

여기서 자신의 버전에 맞게

Base - one of these packages is required / Tools - optional packages

를 받으면 되는 거 같다.

 

(뇌피셜)최초에 oracle 버전 19.3.0.0.0을 깔아서 버전이 맞는 oracle Client를 받아야 하는 줄 알고 몇 시간 찾다가 없어서 울며 겨자먹기로 19.20.0.0.0을 설치해봣는데 대충 같은 버전이면 호환이 되는 거 같다.

(뇌피셜)위의 oracle설치하는 블로그에서는 21c로 설치했는데 오라클 클라이언트는 19.20.0.0.0으로 설치했는데도 동작하더라

 

난 위에서 두 번째 것과, 맨 밑에 것을 받아 사용했다.

 


https://bramhyun.tistory.com/65

wget https://download.oracle.com/otn_software/linux/instantclient/1920000/oracle-instantclient19.20-basic-19.20.0.0.0-1.x86_64.rpm
wget https://download.oracle.com/otn_software/linux/instantclient/1920000/oracle-instantclient19.20-sqlplus-19.20.0.0.0-1.x86_64.rpm

sudo apt-get install alien
sudo alien -c oracle-instantclient19.20-sqlplus-19.20.0.0.0-1.x86_64.rpm
sudo alien -c oracle-instantclient19.20-basic-19.20.0.0.0-1.x86_64.rpm

위 블로그를 참조해서 받아온 rpm을 deb파일로 바꿀 수 있었고

받은 deb파일을 apache-superset-2.1.0rc3 폴더에 넣어준다.

(뇌피셜)나는 몰랐는데 이렇게 멈춰 있으면 rpm을 deb로 바꾸는 과정 중이니 아무 것도 하지 말고 (꽤 많이) 기달리면

이런 식으로 완료됐다 안내해준다.

압축 풀린 deb파일을 apache-superset-2.1.0rc3폴더에 옮겨준다.

 

그 뒤 apache-superset-2.1.0rc3 폴더의 Dockerfile을 수정해줘야 하는데

이부분은 내가 docker를 제대로(?) 아는 게 아니라 그냥 되는 대로 그때 그때 인터넷 서칭을 해 하다보니 가장 불안한 부분이다.(이전에 적혀있던 Dockerfile의 내용을 다 지워도 되는 건가 모르겠다....)

FROM apache/superset:2.1.0

USER root

RUN apt-get update && apt-get install -y libaio1 alien wget && rm -rf /var/lib/apt/lists/*

WORKDIR /opt

# RPM convert DEB
ADD ./oracle-instantclient19.20-basic_19.20.0.0.0-2_amd64.deb /opt/
ADD ./oracle-instantclient19.20-sqlplus_19.20.0.0.0-2_amd64.deb /opt/

RUN dpkg -i oracle-instantclient19.20-basic_19.20.0.0.0-2_amd64.deb && \
    dpkg -i oracle-instantclient19.20-sqlplus_19.20.0.0.0-2_amd64.deb && \
    rm oracle-instantclient19.20-basic_19.20.0.0.0-2_amd64.deb && \
    rm oracle-instantclient19.20-sqlplus_19.20.0.0.0-2_amd64.deb

ENV LD_LIBRARY_PATH /opt/oracle/instantclient_19_20:/usr/lib:${LD_LIBRARY_PATH}
더보기
FROM apache/superset:2.1.0
# 어드민/어드민 로그인 안 되는 거 때문에 기본 이미지를 변경했다.

USER root

RUN apt-get update && apt-get install -y libaio1  && rm -rf /var/lib/apt/lists/*

WORKDIR /opt
ADD ./oracle-instantclient19.20-basic_19.20.0.0.0-2_amd64.deb /opt/
ADD ./oracle-instantclient19.20-sqlplus_19.20.0.0.0-2_amd64.deb /opt/
RUN dpkg -i oracle-instantclient19.20-basic_19.20.0.0.0-2_amd64.deb && \
    dpkg -i oracle-instantclient19.20-sqlplus_19.20.0.0.0-2_amd64.deb && \
    rm oracle-instantclient19.20-basic_19.20.0.0.0-2_amd64.deb oracle-instantclient19.20-sqlplus_19.20.0.0.0-2_amd64.deb

ENV LD_LIBRARY_PATH /opt/oracle/instantclient_19_20:/usr/lib:${LD_LIBRARY_PATH}

09월 16일 오전까지만 해도

위의 Dockerfile로 잘 작동했는데 오후에 해보려고 하니 작동이 았됐다.

시발시발하며 해결해보려고 노력했으나

16일 오후 ~ 17일 15시까지 해결을 못해

포맷하고 윈도우부터 새로 설치했는데도 동작이 안돼

더보기 밖의 내용처럼 새로 하나하나 타이핑하니 동작이 됐다.

 

아마 내가 뭔가를 잘못 건드린 거 같다..

무슨 일인지 모르겠지만

alien이 빠져있어서 그랬던 건가?

모르겠다. 짜증만 난다.

ar x 파일명.deb
zstd -d < control.tar.zst | xz > control.tar.xz
zstd -d < data.tar.zst | xz > data.tar.xz
ar -m -c -a sdsd 변경파일명.deb debian-binary control.tar.xz data.tar.xz
rm debian-binary control.tar.xz data.tar.xz control.tar.zst data.tar.zst

이렇게 대충(?) 작성해주고

 

docker-compose-non-dev.yml파일에 접속해

  superset:
    env_file: docker/.env-non-dev
    image: *superset-image # 이부분
    container_name: superset_app
    command: ["/app/docker/docker-bootstrap.sh", "app-gunicorn"]
    user: "root"
    restart: unless-stopped
    ports:
      - 8088:8088
    depends_on: *superset-depends-on
    volumes: *superset-volumes
  superset:
    env_file: docker/.env-non-dev
    build: # 이부분
      context: . # 이부분
      dockerfile: Dockerfile # 이부분
    container_name: superset_app
    command: ["/app/docker/docker-bootstrap.sh", "app-gunicorn"]
    user: "root"
    restart: unless-stopped
    ports:
      - 8088:8088
    depends_on: *superset-depends-on
    volumes: *superset-volumes

이렇게 바꿔주고

docker-compose -f docker-compose-non-dev.yml build superset
docker-compose -f docker-compose-non-dev.yml up

이걸 다시 실행 해 빌드를 해주면 된다.

나는 잘 모르기 때문에 저 문구를 실행하기 전에 기존의 컨테이너를 삭제한 다음 진행했다.

 

그걸 실행하면 기존의 이미지가

이런 식으로 내가 빌드한 이미지가 올라가게 된다.

아마 그 이미지 안에는 oracle client가 들어있어서 기존의 1.15gb였던 게 1.51gb가 되는 거 같다.


이 글 작성하기 전만 해도 됐는데

다시 해보려고 삭제하고 해보니

docker-compose -f docker-compose-non-dev.yml build superset

빌드부분에서 막혔다.

일단 작성하는 글 날아갈 위험이 있으니 중간저장 하겠다.

 


위와 같이 다(?) 한 뒤에 연결하려고 해도

아마

오라클의 컨테이너와 슈퍼셋의 컨테이너가 개별적(?)이어서 연결이 안 될 것이다.

따라서

docker network create 연결할_임의의_네트워크_이름

위의 명령어로 네트워크를 만들고

오라클의 docker-compose.yml과

superset의 docker-compose-non-dev.yml 파일의 맨 밑에

# ... (기존 코드 생략)

networks:
  default:
    external:
      name: 연결할_임의의_네트워크_이름

위와같이 적어주면

 

이제 두 컨테이너가 (아마) 연결이 될 것이다.

 

참고로 지금 집이어서 이게 서버에서도 잘 작동할지는 미지수이다.

(로컬(localhost나 127.0.0.1)에서는 위와 같은 복잡한 일 없이도 잘 연결이 되던데..)

 

내일 회사에 가서 해보고 되는지 업데이트를 해보도록 하겠다. 

 


다시 생각해보니 network로 연결할 게 아니라

docker-compose-non-dev.yml에 오라클오 생성하게 만들면 되는 문제일 거 같다.

근데 그러면 또 일이 커질 거 같아서

생각만 하고 글은 마치겠다.

 


결국 이 글은 검증하지 못했다.

'공부' 카테고리의 다른 글

이 글은 검색이 되는 가?  (0) 2023.09.26
공부거리  (0) 2023.09.17
예외처리  (0) 2023.08.18
김영한 http강의 - http 메서드  (0) 2023.08.17
김영한 http강의  (0) 2023.08.17