🤓도커 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)
🔥 번외! 도커 허브에 업로드한 내 이미지 확인하기
- Docker Desktop 프로그램 실행
- Docker Desktop - Docker Hub 메뉴에서 내 아이디 검색!!
- 업로드한
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 |