728x90
반응형
SMALL
학습내용
- Docker 이미지
- Dockerfile
- Docker 이미지 최적화
- Docker 이미지 푸시
- Versioning 및 태그
학습정리
1. Docker 이미지
도커 이미지는 실행 가능한 애플리케이션을 포함한 패키지
컨테이너를 실행하는데 사용
테이너는 Docker 이미지를 기반으로 실행되며, 이미지에는 애플리케이션 코드, 라이브러리, 의존성 등이 포함
Layer 기반 구조로 구성되며, 동일한 레이어를 공유하여 효율적인 스토리지 사용 가능
주요 명령어
# 현재 시스템에서 사용 가능한 모든 Docker 이미지 목록 확인 $ docker images # 특정 이미지 다운로드 $ docker pull <이미지 이름> # 이미지 정보 확인 $ docker inspect <이미지 이름> # 이미지 삭제 $ docker rmi <이미지 이름>
불필요한 파일 줄이기
- .dockerignore 사용
- Docker 빌드 과정에서 제외 할 파일과 디렉토리를 지정하는 역할
- .dockerignore 사용
2. Dockerfile
Dockerfile은 Docker 이미지를 빌드하는데 사용 되는 스크립트 파일
작성예제
# 1️⃣ OpenJDK 17 기반 이미지 사용 FROM openjdk:17-jdk-slim # 2️⃣ 작업 디렉터리 설정 WORKDIR /app # 3️⃣ JAR 파일을 컨테이너로 복사 COPY target/my-app.jar app.jar # 4️⃣ 컨테이너 시작 시 실행할 명령어 CMD ["java", "-jar", "app.jar"]
Dockerfile로 이미지 빌드 및 실행
# 현재 디렉토리에서 Dockerfile을 기반으로 이미지 빌드 (-t 옵션: 태그 지정) docker build -t my-app . # 생성된 이미지 확인 docker images # Docker 컨테이너 실행 docker run -d -p 8080:8080 my-app
3. Docker 이미지 최적화
최적화 방법
- 불필요한 레이어 최소화
- 다단계 빌드 (Multi-stage build) 활용
- 경량 이미지 사용(alpine, scratch 등)
Multi-stage Build
불필요한 파일이나 도구를 포함하지 않도록 최종 이미지를 최소화 하는 기법
Java 예시
# 1️⃣ 빌드 단계 (Maven을 사용한 Java 빌드) FROM maven:3.8.7-openjdk-17 AS build # 작업 디렉터리 설정 WORKDIR /app # 소스 코드 및 pom.xml 파일 복사 COPY . . # 의존성 다운로드 및 패키징 (JAR 생성) RUN mvn clean package -DskipTests # 2️⃣ 실행 단계 (JRE만 포함된 이미지로 실행) FROM openjdk:17-jdk-slim # 작업 디렉터리 설정 WORKDIR /app # 빌드 단계에서 생성한 JAR 파일만 복사 COPY --from=build /app/target/my-app.jar app.jar # 컨테이너 실행 시 실행할 명령어 CMD ["java", "-jar", "app.jar"]
node 예시
# 1️⃣ 빌드 단계 (Node.js 애플리케이션 빌드) FROM node:16 AS build # 작업 디렉터리 설정 WORKDIR /app # 의존성 파일 복사 COPY package.json package-lock.json ./ # 의존성 설치 RUN npm install # 애플리케이션 코드 복사 COPY . . # 애플리케이션 빌드 (만약 빌드가 필요하다면) RUN npm run build # 2️⃣ 실행 단계 (최종 이미지) FROM node:16-slim # 작업 디렉터리 설정 WORKDIR /app # 빌드 단계에서 설치된 의존성 복사 COPY --from=build /app/node_modules /app/node_modules # 애플리케이션 파일 복사 COPY --from=build /app/dist /app/dist # 애플리케이션 실행 CMD ["node", "dist/app.js"]
4. Docker 이미지 푸시
Docker Hub 저장소에 이미지 푸시
# docker hub login docker login docker push {저장소유저명}/my-app:1.0.0 docker pull {저장소유저명}/my-app:1.0.0
5. Versioning 및 태그
Docker 이미지 버저닝
버저닝 처리방법
# 기존 이미지에서 새로운 태그로 버저닝 추가 docker tag <기존_이미지> <새로운_태그> docker tag my-app my-app:1.0.0 # 빌드시에 태그로 버저닝 추가 docker build -t my-app:1.0.0 .
시맨틱 버저닝(Semantic Versioning)
- 주버전(Major), 부버전(Minor), 패치버전(Patch) 로 구성
- Major.Minor.Patch 형식으로 버저닝
버전 형식 설명 1.0.0 초기 릴리즈 버전 1.1.0 기능(feature) 추가 (하위 호환 유지) 1.1.1 버그 수정 (패치 버전) 2.0.0 기존 기능을 변경하거나 호환되지 않는 수정
이슈사항
- docker-compose 명령어가 실행이 안되고 docker compose로만 작동하는 경우 해결방법
https://docs.docker.com/compose/install/sudo rm /usr/local/bin/docker-compose sudo ln -s /Applications/Docker.app/Contents/Resources/cli-plugins/docker-compose /usr/local/bin/docker-compose
참고자료
- Docker 기본 명령어
728x90
반응형
LIST
'TIL' 카테고리의 다른 글
9_4.Docker 를 활용한 Log 관리 (0) | 2025.02.20 |
---|---|
9_3.Docker 네트워크 및 데이터 관리 (0) | 2025.02.20 |
9_1.클라우드 및 Docker 개념 학습 (0) | 2025.02.17 |
8_5.MSA 애플리케이션 배포 자동화 CI/CD 구축 실습 (0) | 2025.02.17 |
8_4.MSA 운영 및 모니터링 구축 실습 (0) | 2025.02.14 |