맥북 Docker 빌드 및 kubernetes 배포 3단계

맥북 Docker 빌드 및 Kubernetes 배포하는 방법을 안내합니다. 또한, Ingress-NGINX 컨트롤러 이슈를 해결하는 방법도 포함합니다.

맥북 Docker 빌드

1. Kubernetes 환경 설정

1.1 Homebrew 설치

먼저 Homebrew가 설치되어 있는지 확인합니다. 없다면, 다음 명령어를 통해 설치합니다.

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

1.2 Docker Desktop 설치

Docker Desktop은 Mac에서 Kubernetes를 사용할 수 있도록 합니다.

1. Docker Desktop을 공식 웹사이트에서 다운로드하고 설치합니다.

2. Docker Desktop을 실행한 후, 환경 설정(Settings)에서 Kubernetes를 활성화합니다.

1.3 kubectl 설치

kubectl은 Kubernetes 클러스터를 관리하는 도구입니다.

brew install kubectl

2. 맥북 Docker 빌드 및 배포

2.1 Dockerfile 작성

다음은 Node.js 애플리케이션을 위한 Dockerfile 예제입니다.

# Install dependencies only when needed
FROM node:16 AS deps

WORKDIR /app
COPY package.json yarn.lock next.config.js ./
RUN yarn install --frozen-lockfile

# Rebuild the source code only when needed
FROM node:16 AS builder
WORKDIR /app
COPY . .
COPY --from=deps /app/node_modules ./node_modules

RUN yarn build && yarn install --production --ignore-scripts --prefer-offline

# Production image, copy all the files and run next
FROM node:16 AS runner
WORKDIR /app

ENV NODE_ENV=production

COPY --from=builder /app/public ./public
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./package.json
COPY --from=builder /app/next.config.js ./next.config.js

EXPOSE 3000

ENV PORT=3000

CMD ["node_modules/.bin/next", "start"]

2.2 Docker 이미지 빌드 및 푸시

Docker Buildx를 사용하여 다중 아키텍처 이미지를 빌드하고 푸시합니다.

1. Docker Buildx 설정:

docker buildx create --use
docker buildx inspect --bootstrap

2. ECR 로그인 (AWS CLI 사용):

aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 123123123.dkr.ecr.ap-northeast-2.amazonaws.com

3. Docker 이미지 빌드 및 푸시:

docker buildx build --platform linux/amd64,linux/arm64 -t 776525613317.dkr.ecr.ap-northeast-2.amazonaws.com/hiddenmoney-legacy:prod-apply --push .

맥북에서 이렇게 하지 않는다면 exec /usr/local/bin/docker-entrypoint.sh: exec format error 발생하니 주의하자

3. Nginx Controller 이슈

Kubernetes 에서 Ingress 리소스 추가에 다음과 같이 에러가 발생.

error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": failed to call webhook: Post "https://ingress-nginx-controller-admission.ingress-nginx.svc:443/networking/v1/ingresses?timeout=10s":

ingress-nginx-controller를 사용하지 않는 것으로 확인 하여 리소스 체크 부분을 일단 다음과 같이 제거 작업 항상 백업은 중요하다.

kubectl get validatingwebhookconfiguration ingress-nginx-admission -o yaml > ingress-nginx-admission.yaml
kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission

ingress 생성

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  namespace: default
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: my-app.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-service
            port:
              number: 80

Ingress 리소스를 적용합니다.

kubectl apply -f ingress.yaml

맥북 Docker 빌드 및 Kubernetes 배포 결론

이 블로그 포스트에서는 맥북에서 Kubernetes 환경을 설정하고, Docker 빌드를 수행하며, Ingress-NGINX 컨트롤러의 이슈를 해결하는 방법을 다루었습니다. 이 가이드를 따라하면 로컬 개발 환경에서 Kubernetes를 효과적으로 사용할 수 있습니다.

위의 단계들을 통해 맥북에서 Kubernetes를 설정하고 Docker 컨테이너를 빌드 및 배포할 수 있습니다. 또한, Ingress-NGINX 컨트롤러의 이슈를 해결하여 안정적인 서비스를 제공할 수 있습니다.

다른 정보는 아래 확인 하세요/

Kubernetes Elastic APM NestJS 환경구성 2가지