필요한 OS를 사전에 다운로드 진행
# OS 이미지 다운로드
## --plafform: linux/amd64로 사용할 예정
docker pull --platform ${PLATFORM} redhat/ubi9:9.4
Docker를 통해 필요한 패키지를 로컬 다운로드
# 파일명: Dockerfile.dependency
# 사전에 설치해둔 이미지로 로드됨
FROM redhat/ubi9:9.4
# 작업 디렉토리 설정
WORKDIR /app
COPY . /app
# utils 설치
RUN dnf install -y dnf-utils
# nginx 관련 패키지 다운로드
## 컨테이너 실행 시 명령어 자동 실행
CMD repotrack -p /app/rpms nginx && sleep infinity
패키지 설치를 위한 Image build
# 이미지 빌드
## --plafform: linux/amd64로 사용할 예정
## -f: Dockerfile 경로
## -t: 이미지 명
## ex) docker buildx build --platform linux/amd64 -f Dockerfile.dependency -t daegu_marathon .
docker buildx build --platform ${PLATFORM} -f ${DOCKFILE} -t ${IMAGE_NAME} .
Docker 컨테이너 실행
# 컨테이너 실행
## --plafform: linux/amd64로 사용할 예정
## -v: 컨테이너와 호스트 시스템 간에 마운트
## ex) docker run -v $(pwd)/rpms:/app/rpms --platform linux/amd64 b984584808ab
docker run -v ${HOST_PATH}:${CONTAINER_PATH} --platform ${PLATFORM} ${IMAGE_ID}
위 과정을 통해 HOST_PATH에 rpm패키지를 받을 수 있음.
위 과정을 통해 받은 패키지를 설치하고 nginx를 구동하는 이미지 생성
# 파일명: Dockerfile
FROM redhat/ubi9:9.4
# 작업 디렉토리 설정
WORKDIR /app
COPY . /app
# Node.js 설치
## NodeSource Node.js 20.x 리포지토리 추가
# RUN curl -fsSL <https://rpm.nodesource.com/setup_22.x> | bash -
## Node.js 설치
# RUN yum install -y nodejs-22.12.0
# corepack 활성화
# RUN corepack enable
## corepack 오프라인 워크플로
# RUN corepack install -g --cache-only ./packageManager/corepack.tgz
# 프론트 앱 설치 및 빌드
## 패키지 설치
# RUN yarn install --immutable
## App 빌드
# RUN yarn build
# 오프라인 설치
RUN dnf localinstall -y rpms/*.rpm --disablerepo=* --skip-broken
RUN nginx -h
# Nginx 설정 파일 복사
# COPY nginx/nginx.conf /etc/nginx/nginx.conf
# Nginx 포트 노출
# EXPOSE 80
# Nginx 시작
CMD ["nginx", "-g", "daemon off;"]
# 이미지 빌드
## --plafform: linux/amd64로 사용할 예정
## -f: Dockerfile 경로
## -t: 이미지 명
## ex) docker buildx build --platform linux/amd64 -f Dockerfile -t daegu_marathon_runner .
docker buildx build --platform ${PLATFORM} -f ${DOCKFILE} -t ${IMAGE_NAME} .
Docker 컨테이너를 실행하여 확인
# 컨테이너 실행
## --plafform: linux/amd64로 사용할 예정
## -d: 백그라운드로 실행
## --privileged: 시스템 리소스나 디바이스 접근이 필요할 때만 사용
## ex) docker run -d --platform linux/amd64 --privileged 8d0be310885c /sbin/init
docker run -d --platform ${PLATFORM} --privileged ${IMAEGE_ID} /sbin/init