[Docker] 2일차 - Dockerfile 작성부터 이미지 배포까지

2025. 3. 12. 03:55·BEYOND SW [4] DevOps

🤓도커 2일차✏️

도커 수업 2일차 내용 정리하는 글이다..

Dockerfile 작성 → 이미지 생성 → Docker Hub 배포 → 운영 환경 배포(가상머신) 


🧑🏻‍🏫실습 목표

👉 이미지를 직접 만들고, Docker Hub에 올리고, 운영 환경(VM)에 배포

  • Dockerfile 작성법 알아보기
  • Docker 이미지를 직접 빌드하고 실행해보기
  • Docker Hub에 이미지를 push하고, 운영 환경에서 pull하여 배포하기
  • 가상머신(Ubuntu)에서 Docker Compose로 서비스 구동

1️⃣ Dockerfile 작성과 개념 정리

✔️ Dockerfile이란?

도커 이미지를 만들기 위한 스크립트 파일이다.
쉽게 말하면, 우리가 필요한 앱 실행 환경을 구축하고 실행까지 자동화하는 설치 설명서다.


✔️ Dockerfile 주요 명령어

명령어 설명
FROM 베이스 이미지 지정 (어떤 OS, 환경에서 실행할지)
EXPOSE 외부에 노출할 포트 (문서화 용도, -p로 실제 연결)
ADD / COPY 파일 복사 (ADD는 압축 해제, URL 다운로드 지원)
CMD 컨테이너 시작 시 실행할 기본 명령어
ENTRYPOINT 무조건 실행할 명령어 (CMD보다 우선 적용됨)

✔️ CMD vs ENTRYPOINT

구분 CMD ENTRYPOINT
실행 명령어 덮어쓰기 가능 (docker run 명령어로 변경 가능) 항상 실행됨 (사용자 명령어 무시하고 실행)
사용 사례 디폴트 실행값 제공 (테스트나 개발 편의) 배포 시 고정된 실행 명령 강제 실행

✔️ ADD vs COPY

구분 COPY ADD
기능 단순 파일 복사 파일 복사 + 압축 해제 + URL에서 직접 다운로드 지원
추천 사용법 일반적으로 COPY 사용 특별한 상황(압축 파일 자동 해제 등)에만 ADD 사용

2️⃣ 백엔드 Dockerfile 작성 및 이미지 빌드 실습

✔️ 백엔드 프로젝트 폴더 구조

/backend
├── build/libs/demo-0.0.1-SNAPSHOT.jar
└── Dockerfile

✔️ Dockerfile 작성 (Spring Boot 애플리케이션)

# 베이스 이미지 선택
FROM openjdk:17-ea-slim-buster

# 포트 노출 (문서화 목적)
EXPOSE 8080

# JAR 파일 복사
ADD ./build/libs/demo-0.0.1-SNAPSHOT.jar /app.jar

# 컨테이너 시작 시 실행할 명령어
CMD java -jar /app.jar

✔️ 빌드 및 실행 명령어

이미지 빌드

docker build -t {도커허브아이디}/backend:1.1 .

로컬 실행 테스트

docker run -d --name backend -p 8080:8080 {도커허브아이디}/backend:1.1

3️⃣ Docker Hub에 이미지 Push하기

✔️ Docker Hub 로그인

docker login

✔️ 이미지 Push

docker push {도커허브아이디}/backend:1.1

💡 주의

  • 도커허브아이디/이미지명 형식 맞춰야 업로드됨
  • backend:1.1처럼 버전 태그 붙이는 습관 들이기

4️⃣ 프론트엔드 Vue 프로젝트 Dockerfile 작성과 배포

✔️ Vue 프로젝트 폴더 구조

/frontend
├── nginx
│   ├── dist/           # Vue 빌드 결과물
│   └── default.conf    # NGINX 설정 파일
└── Dockerfile

✔️ Dockerfile 작성 (NGINX + Vue)

# 베이스 이미지 선택
FROM nginx:latest

# 정적 파일 복사
COPY ./nginx/dist /usr/share/nginx/html

# NGINX 설정 파일 복사
COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf

# 기본 포트 노출
EXPOSE 80

✔️ 빌드 및 실행 명령어

docker build -t {도커허브아이디}/frontend:1.1 .
docker run -d --name vue-frontend -p 3000:80 {도커허브아이디}/frontend:1.1
docker push {도커허브아이디}/frontend:1.1

5️⃣ 최종 통합 Docker Compose 파일 작성

✔️ 프로젝트 통합 구조

/fullstack
├── backend/
├── frontend/
├── docker-compose.yml

✔️ docker-compose.yml 작성

version: "3"

services:
  frontend:
    image: {도커허브아이디}/frontend:1.1
    ports:
      - 3000:80

  backend:
    image: {도커허브아이디}/backend:1.1
    ports:
      - 8080:8080

  db:
    image: mariadb:latest
    ports:
      - 9999:3306
    environment:
      - MARIADB_ROOT_PASSWORD=qwer1234
      - MARIADB_DATABASE=web

6️⃣ 가상머신(Ubuntu)에서 운영환경 배포하기

✔️ 준비사항

  • 🖥️ VMWare Workstation 에 Ubuntu 서버 준비
  • 💬사용량을 넉넉히 해준다.
Memory: 4GB
CPU: 2 Core
Disk: 50GB

✔️ Docker & Docker Compose 설치

apt update
apt install -y docker.io docker-compose

한꺼번에..⤵️

apt update && install -y docker.io docker-compose

 


✔️ Docker Hub에서 이미지 Pull

docker pull {도커허브아이디}/backend:1.1
docker pull {도커허브아이디}/frontend:1.1

✔️ docker-compose.yml 파일 복사 후 실행

scp docker-compose.yml user@vm_ip:/home/user/
ssh user@vm_ip
cd /home/user
docker-compose up -d

✔️ 접속 테스트

브라우저 → 가상머신 IP:3000 (프론트엔드)
Postman → 가상머신 IP:8080 (백엔드 API)


 

🔥 번외! 도커 허브에 업로드한 내 이미지 확인하기

  1. Docker Desktop 프로그램 실행
  2. Docker Desktop - Docker Hub 메뉴에서 내 아이디 검색!!
  3. 업로드한 backend, frontend 이미지가 보인다!!!

👉🏻 여기서도 pull 해올 수 있다 ~~

 

 

 

 

 

...

목 어깨가 넘나 아프다 벌써 4시라니!!!!!!!!!!🙀🙀

 

'BEYOND SW [4] DevOps' 카테고리의 다른 글

[Docker +] 쉘 프로그래밍 Shell Programming 문법과 간단 실습  (1) 2025.03.13
[Docker] 2일차 - 도커 네트워크의 이해 실습  (2) 2025.03.12
[Docker] 1일차 실습 - docker-compose.yml + 설정 문법  (0) 2025.03.12
[Docker] 🐋Docker run 명령어 + ⌨️주요 옵션들  (1) 2025.03.10
[Docker] 1일차 실습 - 프론트엔드(Vue.js), 백엔드(Spring Boot)  (2) 2025.03.10
'BEYOND SW [4] DevOps' 카테고리의 다른 글
  • [Docker +] 쉘 프로그래밍 Shell Programming 문법과 간단 실습
  • [Docker] 2일차 - 도커 네트워크의 이해 실습
  • [Docker] 1일차 실습 - docker-compose.yml + 설정 문법
  • [Docker] 🐋Docker run 명령어 + ⌨️주요 옵션들
알파카1234
알파카1234
기대와는 다른 현실에 실망하고, 대신 생각지도 않던 어떤 것을 얻고, 그로 인해 인생의 행로가 미묘하게 달라지고, 한참의 세월을 지나 오래전에 겪은 멀미의 기억과 파장을 떠올리고, 그러다 문득 자신이 어떤 사람인지 조금 더 알게 되는 것. 생각해보면 나에게 여행은 언제나 그런 것이었다. - 김영하 『여행의 이유』 p. 51.
  • 알파카1234
    알파카 로그
    알파카1234
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (97)
      • BEYOND SW [1] 기반기술 (20)
        • 강의 메모 (2)
        • 리눅스 & 네트워크 (8)
        • SQL & DB (6)
        • 소프트웨어공학 아키텍처 (4)
      • BEYOND SW [2] 프론트엔드 (0)
        • HTML CSS (0)
      • BEYOND SW [3] 백엔드 (28)
      • BEYOND SW [4] DevOps (14)
      • BEYOND SW [5] 최종프로젝트 (4)
      • WEB front-end 개념정리 (4)
        • 웹 동작 원리와 개념 (0)
        • 웹퍼블리싱을 위한 HTML + CSS (2)
        • 웹퍼블리싱을 위한 Javascript (2)
      • 딥러닝 AI 공부 (4)
      • 2021-가을학기 (16)
        • 프로그래밍개론 (8)
        • 심리통계분석 I (8)
        • 데이터베이스설계와질의 (0)
      • 2024-봄학기 (0)
        • 프로그래밍언어론 (0)
        • 현대사회와심리학 (심리학개론) (0)
        • 현대사회와언어심리학 (언어심리학개론) (0)
      • 잡담 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    명령프롬프트 장고 명령어
    파이썬
    Django
    도커 허브에 이미지 업로드
    도커 이미지 push
    django 백엔드
    wsl update failed
    파이썬 접근제어자
    django rest framework 모델
    django db
    작문
    db.sqlite3
    django rest framework 객체 저장되는 곳
    리눅스 도커 설치
    ubuntu docker 설치 명령어
    도커 이미지 pull
    docker desktop 무한대기
    명령프롬프트 django 명령어
    (wsl update 오류 해결 방법)
    django 모델 객체가 저장되는 곳
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
알파카1234
[Docker] 2일차 - Dockerfile 작성부터 이미지 배포까지
상단으로

티스토리툴바