기본기 다지기/CS

[기본이론] 도커 컨테이너 만들기

syveany 2026. 2. 2. 21:15

Docker 기초 내용을 정리해보려고 한다.

예전에 플젝할 때 버전관리 때문에 애를 먹었던 적이 있었는데, 이때 도커를 쓰면 좋다고 들었었다.

그뒤로 한동안 도커를 꼭 사용해야하는 상황도 없고 심적 여유도 없었어서 따로 공부하지는 않고 있다가

이제는 정말 마음껏 공부할 수 있는 환경에 놓여지게 되어 그동안 미뤄뒀던 것들을 하나하나 차근차근 공부해보고자 한다.

(블로그 글도 이틀에 하나씩은 올려보려고 한다.)

 

명령어들은 맥 기준으로 썼다.

 

~ 목차 ~

1. 도커 기본 용어

2. 도커 컨테이너 만들기

  2.1 디렉토리 만들기

  2.2 이미지 생성 (docker build)

  2.3 컨테이너 생성 (docker run)

3. 간단 소감

 

1. 도커 기본 용어

도커 주요 용어로는 이미지(Image), 컨테이너(Container), 볼륨(Volume)이 있다.

이미지는 실행환경 모음집, 컨테이너는 실행환경 모음집 중 1개를 실행한 결과물, 볼륨은 데이터 저장소이다.

와닿지가 않아서 GPT한테 비유로 쉽게 설명해보라고 했더니

이미지는 요리 키트, 컨테이너는 요리, 볼륨은 냉장고 라고 했다. 설명이 직관적으로 이해되길래 언급한다.

 

큰 그림으로 나타내면 아래와 같다.

 

자세한 내용은 실행하면서 감을 잡아보자.

 

2. 도커 컨테이너 만들기

Docker build로 이미지를 만들고 docker run으로 컨테이너를 만들어야 한다.

 

2.1 디렉토리 만들기

먼저 저장할 디렉토리를 만들어준다. 나는 오늘날짜-docker1로 임의로 설정했다.

mkdir 260202-docker1
cd 260202-docker1

 

디렉토리 안에 아래와 같은 구조로 파일들을 생성해준다. 파일 새로 생성은 touch임

260202-docker1/

├─Dockerfile

├─requirements.txt

└─main.py

touch Dockerfile requirements.txt main.py

# Dockerfile: 도커 정보 (아래 코드 보면 더 자세하게 나옴)
# Requirements.txt: 뭐가 필요한지
# main.py: 코드

 

각각의 파일에 내용을 넣어준다. 파일 수정은 nano임

nano Dockerfile

 

그러고 뜬 창에 아래 내용을 적어준다.

FROM python:3.10-slim

WORKDIR /app # 작업폴더가 /app 임

# 필수 시스템 라이브러리 (opencv 때문에 필요함)
RUN apt-get update && apt-get install -y libgl1 && rm -rf /var/lib/apt/lists/*

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt # 패키지 설치 (build)

CMD ["python", "main.py"] # 컨테이너가 실행되면 자동으로 실행됨

 

적은 내용을 저장하고 나간다.

# ctrl+o(저장) -> Enter -> ctrl+x(닫기)

 

requirements.txt랑 main.py도 똑같이 아래 내용을 넣고 저장하고 나간다.

nano requirements.txt
# requirements.txt 내용 (대충 비전모델 돌릴 때 필요한 것들)
torch
torchvision
opencv-python
numpy
pillow
matplotlib

# ctrl+o(저장) -> Enter -> ctrl+x(닫기)
nano main.py
# main.py 내용 (진짜 단순하게)
import torch
import torchvision.models as models

model = models.resnet18(pretrained=True)
model.eval()

x = torch.randn(1, 3, 224, 224)
with torch.no_grad():
    y = model(x)

print("output shape:", y.shape)

# ctrl+o(저장) -> Enter -> ctrl+x(닫기)

 

2.2 이미지 생성 (docker build)

Dockerfile을 읽어서 이미지를 만드는 과정이다. 

나는 처음에 Dockerfile이 있는데 왜 docker build를 굳이 한 번 더 해서 이미지를 생성해야 하지?

그냥 Dockerfile 바탕으로 바로 docker run으로 컨테이너 생성시켜버리면 안되나?

라고 생각했는데 아니었음

 

쉽게 말하자면 

환경 정의(Dockerfile) -> 환경 생성(docker build) -> 환경 실행(docker run)

이 되는거임

즉, 환경을 글로 써놨다고 해서 환경이 생성되는건 아니니 docker build를 따로 해줘야 된다는 것임!

 

그래서 아래와 같이 build를 해주면 됨

docker build -t 260202-docker1 .

# docker build: Dockerfile을 보고 상자 하나 만들어줘
# -t 260202-docker1: 이름은 260202-docker1 이야 
# .: 빌드 위치는 여기야

 

2.3 컨테이너 생성 및 실행 (docker run)

자 이제 build로 생성된 환경을 실행시켜주면 된다.

나중에 main.py를 분명 자주 수정하게 될 것이기 때문에

Docerfile에서 main.py를 복사하지 말고 (이러면 build부터 다시 해야됨) main.py를 컨테이너에 그대로 붙여 쓰는 방법을 택했다.

아래와 같다.

docker run --rm -it -v "$PWD":/app -w /app 260202-docker1
# docker run 좀아까 만든 이미지로 컨테이너 하나 실행해줘
# --rm 끝나면 자동으로 삭제해줘
# -it 키보드 입력 받아서(-i) 터미널처럼 보여줘(-t)
# -v "$PWD":/app 내 폴더를 컨테이너 \app에 연결
# -w /app 실행 위치를 \app로 설정

 

그러면 아까 적어둔 main.py가 실행되면서 출력으로 output shape: 어쩌구 가 나온다. 그럼 일단 성공~!

 

이후에는 계속 docker run --rm -it -v "$PWD":/app -w /app 260202-docker1 로 쓰면 된다.

계속 쓰기에는 귀찮으니 아래와 같이 alias 라는 것을 만들어서 사용하면 된다고 한다.

alias run-docker='docker run --rm -it -v "$PWD":/app -w /app 260202-docker1'

 

그러면 아래처럼만 써도 도커 위에서 main.py가 돌아간다.

run-docker

 

3. 간단 소감

사실 그냥 간단한 실습만 해서 그런지 도커의 위력이 아직 와닿지가 않는다.

오늘은 여기까지만 정리하고 나중에 플젝할 때 실제로 한번 써봐야겠다.

 

 

끝~