node express 로 개발한 소스 코드를 docker로 올릴 때의 이점
Dockerfile 🐳
FROM node:18-alpine
RUN apk add g++ make py3-pip
EXPOSE 3000
WORKDIR /project
COPY . /project
RUN npm install
CMD ["npm", "run","start"]
- alpine으로 경량화된 이미지를 만든다. (경량화 목적)
- node를 쓰다보면 암호화가 대개 쓰이는데 (bcrypt 등) 이 라이브러리는 파이썬 기반이기 때문에 python 환경을 설치해주어야 한다. 혹은 alpine을 사용하지 않는 방법도 있다.
- EXPOSE 다음에는 현재 앱이 구동되는 포트번호를 붙인다.
- 마지막으로 package.json에 있는 명령어로 앱을 실행한다. 이 때 주의할 점은 이때 사용한 명령어가
nodemon을 사용한 명령어라면 api를 호출할 때마다 cors error를 맞닥뜨리게 될 것이다. 이를 다시 한번 확인하자.
docker-compose.yml 🐋🦈
version: "3.7"
services:
backend:
build:
context: .
dockerfile: Dockerfile
container_name: project
ports:
- 3000:3000
volumes:
- ./app:/project/app
restart: "always"
db:
platform: linux/x86_64 # 우회
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: ""
MYSQL_ROOT_PASSWORD: ""
MYSQL_TCP_PORT:
TZ: "Asia/Seoul"
ports:
- 3306:3306
그리고 해당 명령어를 입력해준다.
(sudo) docker-compose build // 빌드
(sudo) docker-compose up -d // 실행
docker ps (실행 중인 컨테이너 목록을 확인 가능하다.)
AWS deploy
docker image를 build할 때 해당 에러를 마주한다면 먼저 모든 불필요한 메모리가 삭제되었는지를 확인한다.
Error❗️
no space left on device
df-h / docker 용량 확인
Docker Volume : 컨테이너 내부에 사용되는 파일들이 저장되는 장소로 휴지통의 개념을 가지고 있어 파일 삭제 시 바로 삭제되지 않는다. 해당 파일들 때문에 실제 사용하는 파일 용량보다 Volume의 용량이 더 큰 경우가 있다고 한다.
해당 디렉토리안에 파일을 지워서 용량을 확보 할 수 있다.
docker container prune : 중지된 모든 컨테이너 삭제
docker image prune : 사용하지 않는 이미지 삭제(dangling images)
docker volume prune : 컨테이너와 연결되지 않은 모든 볼륨 삭제
docker network prune : 컨테이너와 연결되지 않은 모든 네트워크 삭제
👍 docker system prune -a : 위에 명령어를 통합해서 한번에 실행. 사용하지 않는 모든 오브젝트를 삭제 (prune images, containers, networks along with volumes)