본문 바로가기
네트워크/클라우드

🐳 Docker와 연동 기술 완전 정리 (이벤트, Dockerfile, Node.js, Flask 등)

by Mostlove 2025. 5. 16.
728x90

📌 1. Docker Events로 도커 작업 추적하기

도커에서는 컨테이너에서 일어나는 각종 상황들(컨테이너 생성, 이미지 실행, 파일 추가/삭제 등)을 이벤트라고 한다. 이를 실시간으로 확인하려면 다음 명령어를 사용한다:

docker events

특정 항목만 필터링하려면 --filter 옵션을 사용:

docker events --filter 'type=image'

이 명령어를 실행해 둔 상태에서 다른 창에서 컨테이너를 실행하면 그 이벤트가 기록됨:

docker run --name ubunt ubuntu:18.04

→ 이 실행 로그는 첫 번째 터미널 창에 표시된다.


📦 2. 컨테이너 리소스 현황 보기

현재 도커가 사용하는 이미지, 컨테이너, 볼륨 등의 자원을 확인하려면:

docker system df

결과는 다음 정보를 포함한다:

  • TYPE: 이미지, 컨테이너, 볼륨 등
  • TOTAL: 전체 개수
  • ACTIVE: 현재 활성화된 항목
  • SIZE: 실제 사용된 공간
  • RECLAIMABLE: 삭제 가능한 공간

🔍 3. cAdvisor로 컨테이너 모니터링

cAdvisor는 Google이 만든 컨테이너 리소스 실시간 모니터링 도구다. 하나의 컨테이너만 볼 수 있다.

docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest

🔹 --detach=true 대신 -d로 간단히 표현 가능
🔹 여러 컨테이너를 동시에 모니터링하려면 Prometheus, Kubernetes 등의 도구를 사용해야 한다.


🧱 4. Dockerfile 작성법과 이미지 생성

도커 이미지를 만드는 대표적인 방식은 Dockerfile을 사용하는 것.

🧾 Dockerfile 기본 명령어

명령어 설명
FROM 베이스 이미지 설정
RUN 이미지 생성 시 명령 실행
WORKDIR 작업 디렉터리 지정
ENV 환경 변수 설정
EXPOSE 포트 개방
ADD, COPY 파일 복사/추가
ARG 빌드 시 인자 설정
ENTRYPOINT 실행 시 반드시 실행될 명령
CMD 기본 실행 명령 (1개만 가능)

💡 예시

FROM ubuntu:latest
RUN apt update && apt install -y nginx
WORKDIR /app
COPY . /app
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

빌드 & 실행:

docker build -t my_nginx .
docker run -d -p 8080:80 my_nginx

📦 5. Multi-Stage Build로 이미지 용량 줄이기

앱을 빌드할 때 개발용 이미지(golang 등)와 운영용 이미지(alpine 등)를 두 단계로 나눠서 빌드하는 방법.

예시

# 1단계: 빌드용
FROM golang
ADD main.go /root
WORKDIR /root
RUN go build -o mainApp main.go

# 2단계: 실행용 (가볍게)
FROM alpine:latest
WORKDIR /root
COPY --from=0 /root/mainApp .
CMD ["./mainApp"]

이렇게 하면 최종 이미지가 훨씬 작아짐 (수백 MB → 수십 MB).


🌐 6. Node.js, Express, React, Flask와의 연동

✅ Node.js

  • 자바스크립트 기반의 서버 플랫폼
  • 비동기 처리 + 가볍고 빠름
  • Apache 없이도 웹 서버 역할 가능

✅ Express.js

  • Node.js용 웹 프레임워크
  • API 서버 구축 시 유용
  • JSP나 Spring 같은 역할

✅ React

  • 프론트엔드 웹 프레임워크
  • PHP, JSP를 대체하는 구조
  • 실행 시 Node.js도 자동 실행됨

✅ Flask (파이썬 웹 프레임워크)

  • Django보다 가볍고 간단한 Python용 웹 서버
  • .html 파일을 불러와 웹 페이지 구성 가능
  • 확장 기능으로 다양한 인증, DB 연동 기능도 사용 가능
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run()

🔗 웹 프레임워크 관계 요약

  • Node.js: 서버 역할 (Apache 대체)
  • Express: Node.js용 웹 프레임워크
  • React: 사용자 인터페이스 구성 (프론트엔드)
  • Flask: Python 기반 백엔드 서버

💡 웹 브라우저는 .html만 직접 해석 가능. .js, .php 등은 서버에서 렌더링*해 html로 전송함
*렌더링: 코드 결과를 html로 변환해 사용자에게 출력하는 과정