본문 바로가기

전체 글

(291)
[docker] cli 명령어들 도커에서 이미지나 컨테이너와 관련된 작업을 하기 위해서는 docker client 상에 정의된 명령어를 이용해야 한다. 여기서는 중요한 명령어 몇가지를 정리한다. 도움말 docker --help 각종 명령 뒤에 --help 을 덧붙이면 해당 명령에 대한 여러 옵션이나 도움말 등을 볼 수 있다. docker run 도커 이미지로부터 컨테이너를 생성한 후 실행하는 명령이다. run 명령은 생성(create) + 실행(start) 2개 명령이 조합된 것으로, 컨테이너를 쉽게 실행하기 위한 줄임 명령이라고 생각할 수 있다. docker run [options] image_name [command] options : 대상이 되는 이미지에 대해 적용할 옵션. image_name : 다운로드 할 이미지 이름. htt..
[nodejs] esmodule 사용 -> "type" : "module" npm init을 통해 package.json을 생성하면 require 및 exports을 이용한 CommonJS을 이용하게 된다. CommonJS 환경에서만 지원하는 환경변수들 (__dirname, __filename 등)이 있기도 하고, 기존 방식에 하자가 있어서 esmodule 방식이 나온 것은 아니기 때문에 굳이 esmodule 방식을 이용할 필요는 없으나, 최근 많이 이용하는 대부분의 프레임워크들이 esmodule 방식으로 사용되므로 프로젝트 내 일관성을 위해 채택하는 것도 좋다. 프로젝트 내에서 esmodule 방식을 이용하기 위해서는 package.json 내 type 설정을 변경해야 한다. { //some settings ... "type":"module" } type은 "module" 및..
[docker] Vmmem 이 지나치게 메모리를 잡아먹는 현상 문제점 윈도우 운영체제에서 WSL2를 이용하여 도커 사용 중 우연히 작업관리자를 보았는데, Vmmem이라는 프로그램이 엄청난 양의 메모리를 사용하고 있다는 사실을 알게 되었다. Vmmem은 윈도우 환경에서 WSL을 이용할 때 사용하는 프로그램으로, 윈도우 환경에서 리눅스 운영체제를 구현하기 위해 사용되는 가상 머신이라고 한다. 인터넷을 통해 찾아본 결과, 많은 사람들이 WSL 에서 WSL2로 업데이트 한 이후 메모리를 과다하게 이용 + 메모리 해제가 되지 않는 현상을 겪었다고 한다. 이 현상은 docker desktop을 이용할 때 더욱 두드러진다. docker-desktop 사용시 WSL2 환경에서 기본 운영체제 이외의 다른 서비스도 함께 시작되는데, 해당 환경들이 상당한 메모리를 잡아먹고도 제대로 메..
[docker] 오늘의 삽질 : nginx 서버, ERR_EMPTY_RESPONSE 에러 문제점 Dockerfile의 내용을 다음과 같이 구성했다. FROM node:alpine as builder WORKDIR '/home/node/app' RUN chown -R node:node . COPY package.json . RUN npm install COPY . . #volume 같은 것은 개발 단계에나 의미 있는 코드지, 이미 개발된 코드에서는 관심 영역이 아님. # USER node RUN npm run build # /home/node/app # USER root # RUN Phase FROM nginx COPY --from=builder /home/node/app/build /usr/share/nginx/html 이후 다음 명령을 shell 상에 순서대로 입력했다. docker bui..
[docker] 오늘의 삽질 : failed to solve with frontend dockerfile.v0: failed to create LLB definition: rpc error: code = Unknown desc = error 발생한 문제 강의를 듣고, WSL2 환경에서 Dockerfile을 빌드하여 이미지를 만드려고 했다. 사용된 Dockerfile은 다음과 같다. FROM node:alpine as builder WORKDIR '/home/node/app' # app 폴더의 소유권을 node 유저로 변경 -> 후 build 폴더 만들 때 이용된다. RUN chown -R node:node . COPY package.json . RUN npm install COPY . . #volume 같은 것은 개발 단계에나 의미 있는 코드지, 이미 개발된 코드에서는 관심 영역이 아님. USER node RUN npm run build # /home/node/app # RUN Phase FROM nginx COPY --from=builde..
[docker] 오늘의 삽질 : permission denied, mkdir '/app/node_modules/.cache' 도커 관련 강의를 들으며 리액트 프로젝트를 도커 이미지로 만드는데, 다음과 같은 에러가 발생했다. 당시 내가 사용한 도커파일 코드는 다음과 같다. FROM node:alpine WORKDIR '/app' COPY package.json . RUN npm install COPY . . EXPOSE 3000 # 어떤 포트로 내보낼 것인가에 대한 일종의 약속에 불과함. 실제 포트 연결이 필요하다면 run -p 외부:내부 를 이용. CMD ["npm", "run", "start"] EACCES 는 대략 엑세스 문제가 발생했다는 에러로, 현재 상태에서는 /app/node_modules/.cache 파일에 문제가 있는 것으로 보인다. mkdir을 통해 파일을 생성하는 것을 권장하는 것으로 보아, 실제로 파일이 없는..
[docker] 오늘의 삽질 → docker daemon is not running & wsl2 apt-get can't connect to security.ubuntu.com 결과적으로 현재 문제는 컴퓨터를 최신 상태로 업데이트 하면서 해결 되었다. 그러나 정말 이유도 모른채 해결되어버린 문제라, 혹시 차후에 해당 상황이 다시 발생한다면 오늘의 행동을 재현해보기 위해 이 글을 써본다. 당시 상황을 설명하면, 나는 WSL2 환경에서 도커 이미지를 만드는 연습을 위해 vscode을 실행하려 했다. 당시 컴퓨터로 웹서핑을 조금 한 후, WSL2을 켠 상태였다. 나는 다음과 같은 명령을 통해 vscode을 실행했다. code . // 현재 폴더에서 vscode을 실행한다 그런데 vscode가 업데이트를 진행하면서도 몇분이고 0% 상태에 머물렀다. 이후 3번 이상 vscode 실행을 시도했지만 여전히 제대로 실행되지 않았기에, 나는 어떤 문제가 있으리라 판단하여 몇가지 작업을 시도해봤..
[nextjs] pre-rendering & getStaticProps · getServerSideProps Pre-Rendering 리액트 프레임워크를 이용하여 만들어진 웹페이지는 하나의 html 파일을 공유한다. index.html 파일은 body 내에 id가 'root'인 div 태그를 하나 가지고 있는데, React.createPortal을 사용하지 않는 이상 리액트에서의 모든 렌더링은 root 태그 안에서 수행된다. 따라서 리액트 기반 사이트의 초기 페이지 구성은 매우 단순하다. 에 'react' 라이브러리를 통해 관리되는 virtual DOM이 반영된다는 것은 알겠는데, 위의 는 무엇일까? 리액트 기반 페이지는 자바스크립트에 크게 의존한다. 기본적으로 react 라이브러리는 순수 자바스크립트 기능을 통해 DOM을 구성하며, 해당 내용을 react-dom 라이브러리를 통해 실제 웹사이트에 반영한다. 이..