Cloud, IT Infra/Docker & Kubernetes

Docker 실습

준레논 2025. 12. 30. 11:49

 

ipp 기업에서 'SW Tool : Docker, Kubernetes 등 클라우드⦁컨테이너 기술'을 사용해본 사람을 뽑는다하여

작게나마 실습을 진행해보려고 한다.

 

목표 설정

Docker

  • 왜 쓰는가?
  • Dockerfile을 만들어보았는가?
  • 컨테이너로 서비스를 띄워보았는가?

Docker 실습

- 실습 목표: 내가 만든 서버를 Docker로 감싸서 실행해본다.

 

1. 먼저 flask로 간단한 서버를 만든다.

from flask import Flask
app = Flask(__name__)

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

app.run(host="0.0.0.0", port=5000)

 

서버가 실행되었다.

 

2. 다음으로 Dockerfile을 작성한다.

FROM python:3.10-slim

WORKDIR /app
COPY app.py .
RUN pip install flask

CMD ["python", "app.py"]

- FROM: 컨테이너의 기본 OS 및 실행 환경 정의

- WORKDIR: 컨테이너 내부 작업 디렉토리 지정

- RUN: 이미지 빌드 단계에서 필요한 의존성 설치

- CMD: 컨테이너가 시작될 때 실행할 기본 명령을 정의

 

이제 docker Desktop을 키고 아래 명령을 입력한다.

docker build -t hello-docker .
docker run -p 5000:5000 hello-docker

docker로 감싼 서버가 실행이 되었다.

이제 '서버 환경 의존성 없이' 실행이 가능하다.


이미지 vs 컨테이너?

한 줄 요약

이미지 = 설계도 / 컨테이너 = 실행 중인 인스턴스

 

이미지(Image)

  • 실행 파일 + 라이브러리 + 설정이 모두 들어있는 템플릿
  • 정적 (변하지 않음)
  • Dockerfile로 만듦
  • 복사해서 컨테이너 여러 개 생성 가능
  • ex) 붕어빵 틀, 클래스(class)
docker build -t my-image .

 

컨테이너(Container)

  • 이미지를 실제로 실행한 것
  • 동작 중인 프로세스
  • 상태를 가진다(로그, 메모리 등)
  • ex) 붕어빵, 객체(object)
docker run my-image

 

실제 흐름

Dockerfile -- (build) --> Image -- (run) --> Container(실행 중)


실무 관점의 포인트

Q. 컨테이너 안에서 파일 수정하면 이미지도 바뀌나요?

A. 바뀌지 않는다. 컨테이너는 이미지의 복사본이기 때문이다. (이미지는 read-only)

 

Q. 이미지와 컨테이너 차이 (요약)

이미지는 애플리케이션과 실행 환경을 포함한 불변의 템플릿이고, 컨테이너는 해당 이미지를 실행한 실제 인스턴스이다.
하나의 이미지를 통해 여러 컨테이너를 생성할 수 있습니다.

 

즉 Image는 정적, Container는 동적이다.


다음 목표

다음은 웹을 구현하며 여러 서비스(server + MySQL)를 한번에 띄우기 위해 docker-compose를 사용하는 실습을 진행해보도록 하겠다.