저번주에 Azure Function을 써보았다.
로컬에서 계속 돌아가는 크롤러가 에져에만 올라가면(올라가기도 전에 에러뜨거나) 에러가 나온다
chromium을 띄울 수 없는 건지, Function App OS 가 문제인지 할 수 있는 시도는 다 해봤지만 큰 답이 나오질 않았다.
그래서 Docker를 이용해보기로 하였다.
Docker에 대한 설명을 아주 잘해주신 블로그가 있어서 참고하고 배우면서 내 프로젝트에 입혀보려고 해보았다.
출처 : subicura.com/2017/01/19/docker-guide-for-beginners-1.html
내 ts-node app을 도커에 올리는 과정을 기록해보자!
1. Dockerfile 생성
리눅스에서 Makefile 만드는 느낌과 비슷하다
의외로 코드가 간략해서 이해하기 쉽게 만들수 있다.
image를 만들어 도커 컨테이너에 올려야 하니, Dockerfile을 만들어서 내 코드를 Dockerizing 해야한다.
touch Dockerfile
//or
//in editor, save new as "Dockerfile"
그리고 Dockerfile 내에 코드를 한줄씩 작성해나가보자
From node:12
Docker Image를 어떤 이미지를 사용할 것인지를 정해주면 된다 뒤에는 버전이다.
WORKDIR /usr/src/app
워킹 디렉토리를 지정해준다
도커는 리눅스 커널을 이용하는 프로그램이니 학교에서 배웠던 우분투와 C프로그래밍에서의 root dir과 같은 개념이다.
COPY package*.json ./
node 를 해본 사람들이면 이 package.json이 얼마나 중요한지 알것이다.
건물 공사에서의 청사진 같은 느낌?!
아무튼 도커에 내 app의 node module들의 dependency를 설치해줘야 하기때문에 복사를 해준다
*는 락파일도 복사하기위해 해놓았다.
RUN yarn
도커 컨테이너에서 위에 복사해온 dependency 를 설치하기위한 명령어이다.
npm instsall 과 동일하다.
COPY . .
현재 dir에서의 모든 소스코드를 복사해서 도커화 시키기 위해 복사해준다.
그냥 소스코드들을 넣어준다고 생각하면된다.
EXPOSE 8080
도커 이미지를 run 할때 포트가 필요하다 (아직 도커 포트에 대한 이해가 완벽하지 않다.)
이렇게 포트를 설정해주면 된다.
CMD yarn start
그리고 마지막으로 컨테이너에서 실행할 명령어를 쳐준다.
처음엔 CMD ["yarn", "start"] 로 실행했는데 오류가 났었다. 그래서 검색해보니 구문을 간단히 저렇게 해도 된다길래 해보았더니 오류없이 잘 되었다.
2. Build Image
이미지를 준비해야한다
Repo와 tag를 지정해주는 명령어가 있긴한데 일단 빨리 빌드를 해서 돌려보고싶어서 그냥 빌드를 해봤다.
여차여차 기다리다보면 도커 이미지가 생긴다.
그러면 이 이미지를 컨테이너로 돌려보자!
IMAGE ID를 복사해두고 Run해보자!
그러면 도커 프로그램에 이렇게 땋! 뜬다
들어가보면 내 코드들이 컨테이너에서 잘 돌아가고 있는 것을 확인할 수 있다.
!! ISSUE
docker에서 chromium이 안열리는 오류가 났었다.
찾아보니 컨테이너안에서 특별히 설정을 해주거나 linux apt-get을 사용하여 크롬을 설치해주는 과정이 필요한듯 하다.
stackoverflow를 다 뒤지고 뒤져서 해답을 찾았다!
stackoverflow.com/questions/62345581/node-js-puppeteer-on-docker-no-usable-sandbox
Node.js + Puppeteer on Docker, No usable sandbox
i'm building a node.js LTS application. I followed puppeteer documentation, so my Dockerfile has this content: FROM node:12.18.0 WORKDIR /home/node/app ADD package*.json ./ # Install latest chro...
stackoverflow.com
크롬이 잘 설치되고 puppeteer가 잘 돌아가는듯 하였으나..!
sandbox 오류가 났다.
전에 puppeteer 브라우저를 launch 할때 args option으로 "--no-sandbox"를 넣어줬었는데 그걸 빼먹어서 오류가 난 모양이다.
args 로 넣어주니 잘 작동하였고 혹시나해서 찾아보니 역시나 였다!
stackoverflow.com/questions/50662388/running-headless-chrome-puppeteer-with-no-sandbox
Running headless Chrome / Puppeteer with --no-sandbox
Background I built an application that uses Puppeteer on my localhost. Now that I am trying to deploy it into a debian environment the script that runs Puppeteer is timing out. After researching i...
stackoverflow.com
드디어 잘 돌아가기 시작하고있다~!
'Develop' 카테고리의 다른 글
[아두이노] 선풍기 제어 아두이노 개발 - 3 (0) | 2022.06.21 |
---|---|
[아두이노] 선풍기 제어 아두이노 개발 - 2 (0) | 2022.06.20 |
[아두이노] 선풍기 제어 아두이노 개발 - 1 (0) | 2022.06.20 |
TS(JS) fetching 403 Forbidden (0) | 2021.03.18 |