반응형
도커 이미지 생성 방법
1. 도커 이미지란?
도커 이미지는 컨테이너를 실행하기 위한 읽기 전용 템플릿입니다. 애플리케이션, 라이브러리, 설정 파일, 실행 환경 등을 포함하며, 이를 기반으로 컨테이너를 생성합니다.
이미지 구조:
- 레이어(layer) 기반: 여러 개의 레이어가 쌓여 하나의 이미지가 만들어짐.
- 변경 사항이 생기면 새로운 레이어가 추가됨.
2. 도커 이미지를 생성하는 방법
2.1. 기존 이미지 사용
Docker Hub 또는 Private Registry에서 이미지를 다운로드하여 사용.
docker pull <이미지 이름>:<태그>
예: docker pull python:3.9
2.2. Dockerfile을 이용한 이미지 생성
Dockerfile은 도커 이미지를 생성하기 위한 설정 파일입니다. 이미지 생성 과정을 자동화하여 재사용성과 유지 보수성을 높임.
3. Dockerfile 작성법
3.1. 기본 명령어
- FROM: 베이스 이미지 지정.
FROM python:3.9
- WORKDIR: 작업 디렉토리 설정.
WORKDIR /app
- COPY: 파일 복사.
COPY . /app
- RUN: 명령 실행 (이미지 빌드 시 실행됨).
RUN pip install -r requirements.txt
- CMD: 컨테이너 시작 시 실행할 명령 설정.
CMD ["python", "app.py"]
- EXPOSE: 컨테이너에서 열릴 포트를 지정.
EXPOSE 5000
3.2. Dockerfile 예제
FROM python:3.9
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
4. 이미지 빌드 명령어
명령어: docker build
사용법:
docker build -t <이미지 이름>:<태그> <Dockerfile 경로>
예: docker build -t myapp:1.0 .
5. 이미지 태그 관리
태그는 이미지를 식별하는 데 사용됩니다.
- 기본 형식:
<이미지 이름>:<태그>
- 예:
myapp:1.0
- 태그 변경:
docker tag <기존 이미지> <새로운 이미지 이름>:<태그>
6. 이미지 최적화 팁
- 멀티스테이지 빌드 사용:
FROM node:14 AS builder WORKDIR /app COPY . . RUN npm install && npm run build FROM nginx:alpine COPY --from=builder /app/build /usr/share/nginx/html
- 불필요한 파일 제외:
.dockerignore
파일 작성.node_modules .git *.log
7. 실습 예제
7.1. Flask 애플리케이션 이미지 생성
1. 프로젝트 구조:
myapp/
├── app.py
├── requirements.txt
└── Dockerfile
2. Dockerfile 작성:
FROM python:3.9
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
3. 이미지 빌드: docker build -t flask-app:1.0 .
4. 컨테이너 실행: docker run -p 5000:5000 flask-app:1.0
퀴즈
- 도커 이미지의 레이어 구조에 대해 설명하세요.
CMD
와RUN
의 차이점을 설명하세요.- 다음 Dockerfile에서 잘못된 점은 무엇인가요?
FROM ubuntu COPY . /app RUN pip install flask CMD python app.py
- 멀티스테이지 빌드의 주요 이점은 무엇인가요?
.dockerignore
파일은 무엇을 위한 것이며, 작성 시 주의할 점은 무엇인가요?
반응형
'데이터 > IT 조금 전문적으로' 카테고리의 다른 글
CPU의 역사: 컴퓨터 혁신의 심장 (0) | 2025.02.03 |
---|---|
세계 최초의 그래픽 소프트웨어: 코렐드로우(CorelDRAW) (0) | 2025.01.17 |
Bluehost.com 에서 웹 호스팅 방법 (0) | 2025.01.02 |
Python에서 Range와 Slice 사용 예제 (0) | 2024.11.13 |
C 언어에서 포인터와 포인터 변수 (0) | 2024.11.13 |