오늘은 Dockerfile 기본 문법 마무리 정리와 docker-compose의 개요와 하는 방법을 배웠다
Dockerfile
지난 시간에 step2 까지 했었고, step3부터 이어서 하겠다.
- Step3 : RUN, CMD, EXPOSE
- nginx 이미지를 그대로 받아서 컨테이너 구성 → 커스텀 x
- 단, 해당 컨테이너를 조작하여 → 이미지 구성 → 컨테이너 구성 (커스텀이됨)
- Dockerfile로 구성하여 nginx 작동시키면 → 커스텀한 이미지나 컨테이너 구성됨.
- nginx 이미지를 그대로 받아서 컨테이너 구성 → 커스텀 x
# RUN : shell 방식으로 기술
# /bin/bash 환경에서 실행됨
# 표현
# RUN echo "메세지" <- 이 방식으로 주로 구성
# RUN ["echo", "메세지"]
# RUN ["/bin/bash", "-C", "echo:메세지"]
# CMD
# 데몬 실행 -> 백그라운드에서 가동
# 컨테이너 내부에서만 명령어 작동
# 도커 파일내부에서 오직 1회만 기술 가능
# 만약, 여러개 있다면 -> 마지막것만 유효
# EXEC 스타일
# CMD ["python","app.py"]
# shell 스타일
# CMD python app.py
# EXPOSE
# 컨테이너가 사용할 포트
# 베이스 이미지
FROM ubuntu
# 베이스 관리 패키지 목록을 최신으로 업데이트 등등
RUN apt-get -y update && apt-get -y upgrade
# nginx 설치
RUN apt-get -y install nginx
# 웹서버
EXPOSE 80
# html 추가
# default.conf 수정하여 프록시 설정
# 백그라운드 가동
# 컨테이너 생성된후 작동되는 데몬 서비스
CMD ["nginx","-g","daemon off;"]
step4 : ENTRYPOINT, WORKDIR, ENV
# CMD
CMD ["nginx","-g","daemon off;"]
# 위, 아래 표현은 동일한 결과임
# ENTRYPOINT
ENTRYPOINT ["nginx"]
CMD ["-g","daemon off;"]
# WORKDIR
# 작업 디렉토리
# 이후 발생되는 명령어들이 모두 이경로 하위에서 작동됨
# ADD, COPY, RUN, CMD, ENTRYPOINT
# ENV
# Dockerfile 내에서 환경변수 담당
# ENV 키 값 <- 한줄에 하나
# ENV 키=값 <- 한줄에 여러개 정의 가능함
Step5 : LABLE, ARG
# LABEL
# 도커 파일을 기반으로 만들어지는 이미지의 정보 표기용
# LABEL 키 값
# LABEL 키=값
# ARG
# 도커 파일내 변수
# 정의 : ARG 변수명=값
# 사용 : $변수명
FROM ubuntu
# 변수 생성
ARG cus_title="docker 기반 커스텀 이미지"
# 이미지에 세팅한 정보
LABEL title=$cus_title
LABEL author "익명의 개발자"
# 변수값 체크
RUN echo $cus_title
# 도커 이미지 만드는 법
docker build -t test_ubuntu:1.5 ./step5
# 도커 실행하는 법
docker run -itd --name my_ubuntu5 test_ubuntu:1.5
# 확인하는 법, 도커 클라이언트 컨테이너에서 클릭 후 inspect를 확인하면 된다.
step6 VOLUME
# 호스트 os와 컨테이너간 폴더간 볼륨설정
# nginx 경우 -> 설정파일이 공유되면 수정부분을 호스트os에서 간편하게 진행 가능함.
FROM nginx
# ["호스트OS상 특정 경로 지정","컨테이너상 특정 경로"]
VOLUME ["/config","/etc/nginx/conf.d"]
이게 볼륨 마운트, 와 비슷한 내용이
Docker-compose
- 개념
- 서비스를 구성하는 모든 구성원들을 한번에 docker 기반으로 구성할때 사용
- 웹서비스 : web server + was server + database
- web server → nginx container (리눅스 기반 + nginx 설치)
- was server → fastapi container(리눅스기반 + 파이썬 + uvicorn + fastapi 설치)
- database → mysql container (리눅스기반 + mysql 설치)
- 위의 구성을 1개의 하드웨어에서 진행함!!
- 컨셉상
- 특정 컨테이너는 컴포즈에서 기술, 특정 컨테이너는 Dockerfile로 기술 구성
- 웹서비스 : web server + was server + database
- 서비스를 구성하는 모든 구성원들을 한번에 docker 기반으로 구성할때 사용
# 구조
# 루트
.
L app
L Dockerfile : fastapi 관련 도커파일 (핵심 서비스)
L main.py : 파이썬 구성된 fastapi 기반 코드(개발할 내용)
L requirements.txt : 서비스 구동을 위한 필요 패키지 목록
L nginx
L nginx.conf : nginx에서 fastapi로 프록시 하는 구성 (설정파일)
L docker-compose.yml : 컴포즈 파일 -> n개의 컨테이너 구성->연결->구동
먼저 docker-compose 파일의 구성부터 시작했다.

version
service
networks
volumes의 네 구역으로 먼저 yml파일이 구성된다.
서비스 구성이 메인이다.
1. mysql 데이터베이스 구성

docker-compose의 문법이다, 그냥 외울것
2. fastapi 서비스 구성 - was

기본 문법에 맞춰서 구성해준다. 그리고 프로그램이 돌아갈 수 있도록
requirements.txt 패키지 설치
main.py
dockerfile
파일들을 배치해준다.



3. nginx 리버스 프록시 서비스 구성 - web

4. 최종 디테일 세팅

각 파일들이 ec2에 들어가서도 바로 작동해야 하기때문에 세팅들을 해준다.
파이썬의 버전, 작업 디렉토리, requirements 설치 등 각종 명령들을 dockerfile에 세팅해준다
15번 줄이 DEV폴더 안에 있는 모든 파일들을 /APP으로 복사해준다
그 다음 기존에 MAIN.PY에 있던 메모 복사 내용을 모두 가져온다



마지막으로 nginx 설정파일인 .conf 파일에 내용을 추가해준다.
자세한 내용은 검색 고고
주된 내용은 다양한 요청들을 nginx를 통해서 8000번 포트로 들어온 요청을 80번 포트를 사용하는 nginx로 프록시 돌린다.

이제 mobaXterm을 키고 ec2를 실행한 뒤

docker-compose 실행 명령어를 입력해주면?

지금은 ec2를 꺼놔서 안되지만 로컬 ip주소에서 docs를 쳤을때 정상적으로 작동하는 모습이다.
ec2의 ip로 연결해뒀다면 그 ip 사이트로 들어가도 해당 결과를 얻을 수 있다.
그리고 docker client에 들어가면 세 가지 컨테이너가 동시에 돌아가는 모습을 볼 수 있다.

get 방식을 대입해도 정상적으로 데이터베이스가 운용되는것을 볼 수 있다.
docker의 길은 멀고도 험하다
복습 끝!
'ASAC-SK플래닛 T아카데미 데이터 엔지니어' 카테고리의 다른 글
| 25.11.21 32일차 [데이터 (분석, 인공지능) 워크 플로우, 데이터 수집] (1) | 2025.11.24 |
|---|---|
| 25.11.20 31일차 [Docker-compose ubuntu EC2 환경에서 구동 확인, Docker 기반 CI/CD 실습] (0) | 2025.11.20 |
| 25.11.18 29일차 [리눅스 개요, 리눅스 기본 명령어, 파일 디렉토리 다루기, 네트워크, 쉘 스크립트, 권한 프로세스 screen, 실무에서 자주쓰는 명령어 | 서비스 기획 특강] (0) | 2025.11.19 |
| 25.11.17 28일차 [Docker 개념, Docker CLI, Dockerfile] (0) | 2025.11.17 |
| 25.11.14 27일차 [git action을 이용한 EC2 배포 자동화하기] (0) | 2025.11.14 |