nodejs web dockerizing

  • 기존에 만들었었던 Nodejs Express WEB 프로젝트를 도커라이징 해보았다
  • 얄팍한 코딩사전님의 가장 쉽게 배우는 도커를 보고 시도했다
  • 도커가 이런거구나 하고 느낀 순간이였다.. 마치 신세계…
  • 이번 도커라이징을 통해서 내 프로젝트를 도커가 설치되어있는 다른컴퓨터에서 매우 쉽게 돌려볼 수 있다는걸 알게되었다

기존 상태 설명

디렉터리 구조
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
.
├── node_modules/
├── web
│ ├── bin
│ │ └── www
│ ├── public/
│ ├── routes/
│ ├── utils/
│ ├── views/
│ └── app.js
├── .gitattributes
├── .gitignore
├── package-lock.json
├── package.json
├── README.md
└── sqldump.sql
  • 그냥 node express 서버와 db덤프 파일인 sqldump.sql 가 구분없이 한 디렉터리에 있었다

벡엔드와 데이터베이스로 분리하기

  • backend, database 폴더를 만든다
  • backend폴더로 sqldump.sql와 깃허브, 프리티어 세팅 등을 제외한 99.9999%의 소스파일들을 이동한다
  • database폴더로 sqldump.sql을 이동
sqldump.sql 이동
1
2
3
database
└── scripts
└── sqldump.sql
  • 이런식으로 node express 서버와 db를 분리할 수 있었다

Dockerfile 작성하기

backend

backend/Dockerfile
1
2
3
4
5
6
7
8
FROM node:12.18.3

WORKDIR /usr/src/app

COPY . .
RUN npm i

CMD ["npm", "start"]
  • 내가 로컬에서 사용하는 환경을 토대로
  • 내 앱에 맞는 노드버전을 가져와서
  • /usr/src/app 라는 워크디렉터리에
  • backend 아래있는 모든 파일들을 복사해오고
  • RUN 명령어로 npm i로 종속성을 설치한다
  • 그리고 CMD 명령으로 backend 서버를 실행시킨다

database

database/Dockerfile
1
2
3
4
5
6
7
8
FROM mariadb:10.5

ENV MYSQL_USER mysql_user
ENV MYSQL_PASSWORD 1234
ENV MYSQL_ROOT_PASSWORD 1234
ENV MYSQL_DATABASE webtest

COPY ./scripts/ /docker-entrypoint-initdb.d/
  • 내가 로컬에서 사용했던 마리아디비 버전 그대로 가져왔다
  • 데이터베이스 관련 환경변수들을 정의해주고
  • scripts 디렉터리에 있는 dump파일을 /docker-entrypoint-initdb.d/ 로 복사한다
  • /docker-entrypoint-initdb.d/ 는 데이터베이스를 생성할 때,
  • 하위 sql을 가지고 데이터베이스를 초기화해준다

후기

  • 메모리 딸린다…
  • 처음에는 좋아서 이것저것 다 도커라이징할려고 했는데,
  • 하다보니까 메모리가 딸려서 마우스가 뚝뚝 끊겼다…

참고

rds sqldump 하기

cmd
1
2
3
4
5
6
7
8
mysqldump -h database-1.aaaaaaaaaaaa.ap-northeast-2.rds.amazonaws.com ^
-u root ^
-p12341234 ^
--port=3306 ^
--single-transaction ^
--routines ^
--triggers ^
--databases TestDB > aaaa.sql
  • 윈도우 cmd에서 aws rds mysqldump를 해보았다

윈도우 따라하기

  • cmd를 관리자 권한으로 실행한다
cmd
1
cd C:\Program Files\MariaDB 10.5\bin
  • mysqldump.exe가 있는 경로까지 이동한다. (나는 로컬에 마리아 디비가 설치되어 있어서..)
cmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mysqldump -h {rds 엔드포인트} ^
-u root ^
-p{rds 비밀번호} ^
--port=3306 ^
--single-transaction ^
--routines ^
--triggers ^
--databases {db명} > {백업파일위치}

mysqldump -h database-1.aaaaaaaaaaaa.ap-northeast-2.rds.amazonaws.com ^
-u root ^
-p12341234 ^
--port=3306 ^
--single-transaction ^
--routines ^
--triggers ^
--databases TestDB > aaaa.sql
  • 자신에 맞게 설정하고 명령을 붙여넣는다

sqldump

  • 내 mysql, mariadb 백업, 덤프하는 방법

mysqldump

cmd
1
2
3
mysqldump -u root -p --databases {db_name} > {백업파일위치}

mysqldump -u root -p --databases mydb > backup.sql
  • 현재 db내용을 백업할 수 있다

‘mysqldump’은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다

  • mysql 또는 mariadb의 경우…
  • db 설치 경로에 들어가서 mysqldump를 검색한다
  • 내 경우 C:\Program Files\MariaDB 10.5\bin이 경로에 있었다
  • 해당 위치에서 cmd를 실행시키고 명령을 실행해주면된다

액세스가 거부되었습니다

  • cmd를 관리자 권한으로 실행한다

mysql

1
2
3
mysql < {백업파일위치}

mysql < backup.sql
  • 이렇게 백업해둔 .sql파일로 복구할 수 있다