도커의 기본 개념부터 확인하기 위한 가장 단순한 실습이다.
Dockerfile 작성 → 이미지 빌드 → 실행(run) 의 전체 과정을 직접 경험해보자.
Dockerfile
FROM python:3.8-slim
WORKDIR /app
COPY main.py /app
CMD ["python", "./main.py"]
main.py
import sys
print("Hello, Docker world")
print(sys.version_info)
docker build -t hello-docker-world .
docker images
docker run hello-docker-world
결과 예시
Hello, Docker world
sys.version_info(major=3, minor=8, micro=18, releaselevel='final', serial=0)
docker ps # 실행중인 컨테이너 확인
docker rmi [image id] -f
Docker Hub에서 이미지를 다운받아 실행해보자.
docker search nginx
docker pull nginx:latest
docker run -it -d -p 8001:80 --name nginxserver nginx:latest
-d : 백그라운드 실행(detached)-p : 포트 포워딩 (로컬:컨테이너)--name : 컨테이너 이름 지정curl localhost:8001
또는 브라우저에서\
➡️ http://localhost:8001 접속
docker start nginxserver
컨테이너가 이미 생성되어 있다면
run대신start로 다시 실행 가능
docker exec -it nginxserver bash
→ 리눅스 쉘 환경에서 직접 파일 수정 가능
docker cp new.html nginxserver:/usr/share/nginx/html/index.html
이번엔 Python 머신러닝 코드를 Docker로 감싸서 실행해본다.
Dockerfile
FROM python:3.8-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY model_learn.py .
CMD ["python", "model_learn.py"]
requirements.txt
scikit-learn
pandas
numpy
model_learn.py
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
X, y = load_iris(return_X_y=True)
model = LogisticRegression(max_iter=200)
model.fit(X, y)
print("Model trained successfully!")
print("Accuracy:", model.score(X, y))
docker build -t scikitlearn_modellearn .
docker run --name mldevelopment scikitlearn_modellearn
docker tag scikitlearn_modellearn:latest oriori88/scikitlearn_modellearn:latest
docker push oriori88/scikitlearn_modellearn:latest
docker pull oriori88/scikitlearn_modellearn:latest
docker run --name mldevelopment oriori88/scikitlearn_modellearn:latest
단계 핵심 명령어 의미
빌드 docker build -t <이름> . Dockerfile 기반 이미지 생성
실행 docker run <이미지> 컨테이너 실행
상태확인 docker ps -a 컨테이너 상태 조회
재시작 docker start <이름> 기존 컨테이너 재실행
로그확인 docker logs <이름> 실행 결과 출력 확인
이미지삭제 docker rmi <id> 이미지 제거
Dockerfile → build → image → run 흐름이 기본 구조임을 이해했다.run은 한 번성 실행임을 확인했다.