Docker. 내 애플리케이션 Dockerizing 하기

0. 기반 파일 https://github.com/nice-card/express-example 1. 프로젝트 위치 확인 현재 경로를 프로젝트 경로로 설정하고 확인하기 2. Dockerfile, .dockerignore 추가 프로젝트 루트에 Dockerfile을 새로 만들기. Dockerfile 프로젝트 루트에 만들기. # === build stage === FROM node:20-alpine AS build WORKDIR /app COPY package*.json ./ RUN npm ci # dev 포함 (tsc 사용) COPY . . RUN npm run build # dist/ 생성 # === runtime stage === FROM node:20-alpine WORKDIR /app ENV NODE_ENV=production COPY package*.json ./ RUN npm ci --omit=dev # 런타임에 필요한 것만 # 빌드 결과만 가져오기 COPY --from=build /app/dist ./dist EXPOSE 3000 CMD ["npm", "start"] # package.json의 "start": "node dist/index.js" .dockerignore 불필요한 파일이 이미지에 안 들어가게 막는 용도 ...

October 9, 2025

Docker. 컨테이너와 이미지

컨테이너 애플리케이션의 구성 요소(프론트엔드, API, DB 등)을 각각 격리된 프로세스로 실행하는 환경. 특징 호스트의 어떤 환경에도 의존하지 않고, 필요한 라이브러리와 설정을 모두 포함한 독립된 환경으로 존재한다. 서로 다른 컨테이너는 격리되어 있어서 하나가 망가져도 다른 컨테이너에 영향을 주지 않는다. 컨테이너 vs. VM VM은 자체 커널, 드라이버, 프로그램을 갖춘 완전한 운영체제이기 때문에, 단일 애플리케이션을 분리하기 위해 VM을 사용하는 것은 오버헤드가 크다. 컨테이너는 실행에 필요한 모든 파일을 갖춘 고립된 프로세스이다. 여러 컨테이너를 실행하더라도 모두 동일한 커널을 공유하므로, 더 적은 인프라에서 많은 애플리케이션을 실행할 수 있다. ...

October 8, 2025

Docker. Docker 시작하기

Docker 애플리케이션 개발, 배포 및 실행을 위한 개방형 플랫폼 특징 Note. 컨테이너는 개발 환경 자체가 아니라 애플리케이션를 실행하는 격리된 프로세스다. 일반적으로 개발은 호스트 환경에서 이루어지고, 컨테이너는 실행 및 테스트 환경으로 사용된다. -> 그런데 vscode에서 쓰는 dev container는…? 컨테이너를 사용한 앱 개발 Docker 컨테이너 안에서 앱을 띄우기 때문에 “환경이 달라서 동작하지 않는다”와 같은 문제 해결 ex. Node, Python, MySQL같은 것을 도커로 묶어서 개발 컨테이너는 완전한 실행 단위 컨테이너 하나는 완전한 실행 단위이기 때문에 QA, 테스트, CI/CD 환경에서 그대로 사용 같은 이미지 → 같은 코드, 같은 환경 → 어디서든 일관된 실행이 가능하다. 애플리케이션을 컨테이너 형태로 배포 클라우드나 로컬 서버로 그대로 옮겨서 실행하면 된다. 수명 주기 관리 build, run, stop, rm, push 모든 것을 Docker가 명령어 단위로 관리해준다. 반응형 배포 및 확장 Docker는 어디서나 똑같이 돌고, 원하면 즉시 늘리거나 줄일 수 있다. ...

October 8, 2025

Docker. Docker Desktop 실습해보기

설치하기 공식 문서에 설치 가이드 설명 잘 되어있으니 알아서… 첫 번째 컨테이너 실행하기 docker run -d -p 8080:80 docker/welcome-to-docker http://localhost:8080 에서 이 컨테이너의 프론트엔드 방문 가능. Docker Desktop 사용해보기 컨테이너 탭 Logs — docker logs <container-name> 컨테이너 내부에서 실행 중인 프로세스의 표준 출력을 그대로 보여줌. 디버깅할 때 많이 사용하는 부분 Inspect — docker inspect <container-name> 컨테이너의 환경 변수, 포트 바인딩, 실행 명령, 마운트 경로, 네트워크, 상태 등 메타데이터를 JSON으로 보여줌 Bind mounts 로컬 호스트와 컨테이너 사이의 폴더 연결 정보를 보여줌 ex) -v ~/project:/app → 내 컴퓨터의 ~/project 폴더가 컨테이너 내부 /app에 연결됨. 로컬 파일 수정 시 컨테이너에 즉시 반영되기 때문에 개발할 때 자주 사용 Exec — docker exec -it <container-name> 실행 중인 컨테이너 내부에 직접 명령어를 입력할 수 있는 쉘 세션을 엶. 컨테이너 내부 구조 탐색, 빠른 테스트, 수동 디버깅에 사용 Files — docker cp, docker exec ls 컨테이너 내부의 파일 시스템 탐색 호스트 ↔ 컨테이너 간 파일을 복사할 수 있음 Stats: docker stats <container-name> 컨테이너의 실시간 리소스 사용량(CPU, 메모리, 네트워크, I/O) 등을 모니터링 성능 문제나 리소스 병목을 추적할 때 사용 여러 컨테이너 동시 모니터링 가능 직접 컨테이너를 사용해서 개발해보기 0. 프로젝트 클론 우선 Docker에서 제공하는 예제 앱 가져오기 ...

October 8, 2025