도커 이미지, 도커 컨테이너를 효율적으로 관리하려고 할 때 가 있다.
만약 여러 프로젝트에서 공용으로 사용할 Ubnutu 이미지를 만들어 Base 이미지로 활용될 수 있으며, CI/CD 시간을 줄이고자 Multi Stage Build 을 이용할 수 도 있다.
멀티 스테이지 빌드
멀티 스테이지 빌드는 하나의 Dockerfile에서 스테이지를 여러 개로 나누어 빌드 프로세스를 만드는 것을 말한다.
각 스테이지는 이미지의 일부분을 생성하며, 이전 스테이지에서 생성된 파일을 다음 스테이지로 전달할 수 있다. 이 과정으로 최적화가 가능하다.
멀티 스테이지 빌드의 장점
- 이미지 크기 감소
- 빌드 프로세스 간소화
- 의존성 관리 용이성
- 이미지 크기 감소
사용 예시
CI/CD 과정에서 쓰이며 마지막 스테이지에는 최소한의 파일과 패키지만 존재한다.
FROM docker.my-team.com/backend-team/ubuntu:22.04 AS baseOS
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install
COPY . .
RUN npm run build
FROM nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=baseOS /app/build /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"]
베이스 이미지
베이스 이미지는 다른 이미지의 기반이 되는 이미지로, 보통 운영체제나 미들웨어 등의 기본 환경을 제공하며 기존 이미지를 확장하는 방법등을 통해 베이스 이미지를 만들 수 있다.
베이스 이미지의 장점
- 원하는 OS, 미들웨어를 사전에 설정하여 개발 환경을 표준화
- 보안 및 성능 향상을 위해 필요한 패키지와 환경변수 등을 사전 미리 포함
사용 예시
특정 언어나 프레임워크를 지원하는 베이스 이미지를 만들어 개발자들이 공통된 개발 환경을 사용할 수 있다.
보안 패치나 성능 향상을 위한 설정을 포함한 베이스 이미지를 만들어 여러 프로젝트에서 사용할 수 있다.
FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive
RUN sed -i 's/archive.ubuntu.com/kr.archive.ubuntu.com/g' /etc/apt/sources.list
RUN apt-get update && apt-get install -y \
curl \
wget \
nano \
nodejs \
npm \
golang \
php \
python3 \
python3-pip \
build-essential \
libssl-dev \
libffi-dev \
&& rm -rf /var/lib/apt/lists/*
RUN ln -s /usr/bin/node /usr/bin/node2
ENV GOPATH /go
ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH
COPY php.ini /etc/php/7.4/cli/php.ini
RUN pip3 install --upgrade pip \
&& pip3 install virtualenv
WORKDIR /app
CMD ["bash"]
결론으로
Docker 환경에서 개혹은 운영할 경우 멀티 스테이지 빌드와 베이스 이미지를 사용하여 개발/서비스의 일관성을 유지할 수 있다. 이러한 기능을 잘 활용해서 이미지 빌드 프로세스를 최적화하고 표준화된 개발 환경을 구축하는 것은 소프트웨어 개발과 배포의 효율성을 향상시키는 데 중요한 요소이니 적극 활용해야 한다.
'DevOps > 도커 (Docker)' 카테고리의 다른 글
[Docker] - 006. Docker Swarm 이란 (0) | 2024.05.06 |
---|---|
[Docker] - 005. Docker Compose 활용하기 (0) | 2024.05.04 |
[Docker] - 003. DockerFile 캐싱 전략 (0) | 2024.04.19 |
[Docker] - 002. Docker CLI 와 이미지 만들기 (0) | 2024.04.17 |
[Docker] - 001. 도커 vs 가상화(VM)의 차이 (0) | 2024.04.09 |