본문 바로가기

Study/TIL | AWS

2차 개인 프로젝트 CI/CD 배포 자동화 구축

🚧 GitHub Actions CI/CD 구축 중 겪은 주요 문제 정리

MSA 구조의 auth-service를 GitHub Actions + Docker + EC2 + Docker Hub + SSH 방식으로 자동 배포하면서 여러 시행착오를 겪었다.

그 중 특히 기억에 남는 오류와 그 해결 과정을 정리해본다.

[1] GitHub에 코드 푸시
      ↓
[2] GitHub Actions 실행됨
      ↓
[3] Docker 이미지 빌드 (.jar → 이미지)
      ↓
[4] Docker Hub에 업로드
      ↓
[5] EC2에 SSH 접속
      ↓
[6] EC2에서 docker-compose pull & up 명령어 실행
      ↓
[7] 컨테이너가 실행되고 서비스 배포 완료

 

 (1) src/main/resources/application.yml 파일을 Base64 인코딩하여 출력

cat src/main/resources/application.yml | base64

 

 

(2) application.yml 파일을 Base64 인코딩 후 Github Secrets 'APPLICATION_YML'에 추가 

 

 

(3) .gitignore에 application.yml 추가 

 

 

(4) main 브랜치 git actions 

name: CI/CD Docker Deploy to EC2

on:
  push:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      # 1. GitHub 리포지토리 체크아웃
      - name: Checkout code
        uses: actions/checkout@v4

      # 2. Docker Hub 로그인
      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_PASSWORD }}

      # 3. 도커 이미지 빌드 & 푸시 - auth-service
      - name: Build & Push auth-service
        # working-directory: ./msa-auth-service
        run: |
          
          # resources 디렉토리가 없을 경우 생성
          mkdir -p src/main/resources 
          
          # GitHub Secrets에 등록한 application.yml 내용을 복사
          echo "${{ secrets.AUTH_APPLICATION_YML }}" | base64 -d > src/main/resources/application.yml
          
          docker build -t ${{ secrets.DOCKER_HUB_USERNAME }}/auth-service .
          docker push ${{ secrets.DOCKER_HUB_USERNAME }}/auth-service

      # 4. EC2에 SSH 접속 & 배포
      - name: Deploy to EC2 via SSH
        uses: appleboy/ssh-action@v1.0.0
        with:
          host: ${{ secrets.EC2_HOST }}
          username: ${{ secrets.EC2_USER }}
          key: ${{ secrets.EC2_SSH_KEY }}
          script: |
            cd ~/auth-service
                      
            docker-compose pull auth-prod
            docker-compose up -d auth-prod
            docker image prune -f

      # 5-1. 성공 시 알림
      - name: Send Discord Success Notification
        if: success()
        uses: Ilshidur/action-discord@master
        env:
          DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_BACK }}
        with:
          args: |
            ✅ [${{ github.actor }}]님이 `${{ github.repository }}` 레포지토리에서 **배포를 완료**했어요!
            🔗 커밋: ${{ github.sha }}

      # 5-2. 실패 시 알림
      - name: Send Discord Failure Notification
        if: failure()
        uses: Ilshidur/action-discord@master
        env:
          DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_BACK }}
        with:
          args: |
            ❌ [${{ github.actor }}]님이 `${{ github.repository }}` 레포지토리에서 **배포에 실패**했어요!
            🔍 에러 로그를 확인해주세요.

 

 

(5) dev 브랜치 git actions 

name: CI/CD Docker Deploy to EC2 - DEV

on:
  push:
    branches: [ dev ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      # 1. GitHub 리포지토리 체크아웃
      - name: Checkout code
        uses: actions/checkout@v4

      # 2. Docker Hub 로그인
      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_PASSWORD }}

      # 3. 도커 이미지 빌드 & 푸시 - auth-service
      - name: Build & Push dev auth-service
        # working-directory: ./msa-auth-service
        run: |
          
          # resources 디렉토리가 없을 경우 생성
          mkdir -p src/main/resources 
          
          # GitHub Secrets에 등록한 application.yml 내용을 복사
          echo "${{ secrets.AUTH_APPLICATION_YML }}" | base64 -d > src/main/resources/application.yml
          
          docker build -t ${{ secrets.DOCKER_HUB_USERNAME }}/auth-service:dev .
          docker push ${{ secrets.DOCKER_HUB_USERNAME }}/auth-service:dev

      # 4. EC2에 SSH 접속 & 배포
      - name: Deploy to EC2 via SSH
        uses: appleboy/ssh-action@v1.0.0
        with:
          host: ${{ secrets.EC2_HOST }}
          username: ${{ secrets.EC2_USER }}
          key: ${{ secrets.EC2_SSH_KEY }}
          script: |
            cd ~/auth-service
            
            docker-compose pull auth-service-dev
            docker-compose up -d auth-service-dev
            docker image prune -f

      # 5-1. 성공 시 알림
      - name: Send Discord Success Notification
        if: success()
        uses: Ilshidur/action-discord@master
        env:
          DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_BACK }}
        with:
          args: |
            ✅ [${{ github.actor }}]님이 `dev` 브랜치에서 **배포를 완료**했어요!
            🔗 커밋: ${{ github.sha }}

      # 5-2. 실패 시 알림
      - name: Send Discord Failure Notification
        if: failure()
        uses: Ilshidur/action-discord@master
        env:
          DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_BACK }}
        with:
          args: |
            ❌ [${{ github.actor }}]님이 `dev` 브랜치에서 **배포를 실패**했어요!
            🔍 에러 로그를 확인해주세요.

 

 

(6) auth-service Dockerfile

FROM gradle:8.4-jdk17 AS builder
COPY . /app
WORKDIR /app
RUN gradle clean build -x test

FROM openjdk:17-jdk-slim
WORKDIR /app
COPY --from=builder /app/build/libs/*-SNAPSHOT.jar ./app.jar
EXPOSE 8100
ENTRYPOINT ["java", "-jar", "app.jar"]

 

 

(7) git actions 실행 후 확인 

git add .
git commit -m "feat : 커밋 메시지"
git push -u origin main or git push -u origin dev


배포 과정 중 오류들

 

🔥 1. Docker 로그인 오류: Username and password required

📌 에러 로그

Error: Username and password required

❓ 원인

  • docker/login-action@v3에서 Docker Hub 로그인을 시도했는데,
    DOCKER_HUB_USERNAME 또는 DOCKER_HUB_PASSWORD가 GitHub Secrets에 누락되었거나 오타가 있었음.

✅ 해결 방법

  • GitHub 레포지토리 > Settings → Secrets에 아래 두 개를 정확하게 등록:
    • DOCKER_HUB_USERNAME: Docker Hub ID
    • DOCKER_HUB_PASSWORD: 비밀번호 또는 Access Token (추천)

🔥 2. GitHub Actions에서 bad substitution 오류

📌 에러 로그

bad substitution

❓ 원인

  • echo "${{ secrets.APPLICATION_YML }}" > src/main/resources/application.yml 같은 식으로
    GitHub Actions 템플릿 문법 (${{ }})을 Shell 스크립트 내부에서 직접 사용했기 때문

✅ 해결 방법

  • application.yml 파일을 base64로 인코딩하여 Secrets에 저장하고, Actions에서 복호화해서 사용
# 로컬에서 인코딩 
base64 -i src/main/resources/application.yml

 

# Actions에서 복호화 echo "${{ secrets.APPLICATION_YML_BASE64 }}" | base64 -d > src/main/resources/application.yml
# Actions에서 복호화 
echo "${{ secrets.APPLICATION_YML_BASE64 }}" | base64 -d > src/main/resources/application.yml

🔥 3. EC2 SSH 연결 실패: no such host

📌 에러 로그

dial tcp: lookup *** on 168.63.129.16:53: no such host

❓ 원인

  • EC2_HOST 값에 잘못된 도메인이 들어가 있었음

✅ 해결 방법

  • GitHub Secrets에 EC2_HOST 값을 정확한 EC2 퍼블릭 IP 또는 퍼블릭 DNS로 설정
    예: ec2-3-38-204-1.ap-northeast-2.compute.amazonaws.com

(1) ssh 접속 

ssh -i "my-key.pem" ubuntu@ec4-2-32-48-125.ap-northeast-2.compute.amazonaws.com

 

 

(2) 

mkdir -p ~/auth-service
cd ~/auth-service

 

 

(3) docker-compose.yml 작성 

nano docker-compose.yml
version: '3.8' 

services:
  auth-prod:
    image: dockerhub_id/auth-service:latest
    ports:
      - "8100:8100"
    container_name: auth-prod
    depends_on:
      - mysql
    networks:
      - msa-network

  mysql:
    image: mysql:8.0
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: database password
      MYSQL_DATABASE: database name
    ports:
      - "3306:3306"
    volumes:
      -  mysql-data:/var/lib/mysql
    networks:
      - msa-network

networks:
  msa-network:

volumes:
  mysql-data:

 

✅ 입력 후 저장:

  • Ctrl + O → 저장
  • Enter → 확인
  • Ctrl + X → 종료

 

vybz.kr:8100/ping 실행 

 

 


CI/CD 자동 배포에서 컨테이너가 안 뜨고 계속 실패했던 원인

✅ 1. application.yml이 Docker 이미지에 포함되지 않음

🔥 실제 문제:

echo "${{ secrets.AUTH_APPLICATION_YML }}" base64 -d > src/main/resources/application.yml

→ base64 -d를 파이프로 연결하지 않고 문자열처럼 잘못 작성해서
실제로는 application.yml이 생성되지 않음 → Docker 이미지에 포함되지 않음

📌 영향:

  • Spring Boot 앱 실행 시 datasource 설정이 없어서 실패
  • 로그에서 Failed to determine a suitable driver class, url not specified 등 발생

✅ 2. GitHub Secrets에 들어간 base64 값이 macOS에서 잘못 인코딩됨

🔥 실제 문제:

base64 -i src/main/resources/application.yml

→ macOS에선 되지만 GitHub Actions(Linux 기반)에서는 이 -i 옵션이 무효

📌 영향:

  • GitHub Actions에서 디코딩 시도할 때 에러 없이 실행은 되지만 내용이 없음
  • 결과적으로 Dockerfile 내에 application.yml 파일이 없어 앱이 죽음

✅ 3. GitHub Actions에서 디코딩 후 내용 확인을 안 했음

🔥 놓쳤던 부분:

초기에 디코딩 후 실제 application.yml이 잘 들어갔는지 검증하지 않음

📌 해결책:

아래처럼 디코딩 후 내용을 출력해서 확인하는 단계 추가

 
      - name: Build & Push auth-service
        run: |
          
          # resources 디렉토리가 없을 경우 생성
          mkdir -p src/main/resources 
          
          # GitHub Secrets에 등록한 application.yml 내용을 복사
          echo "${{ secrets.AUTH_APPLICATION_YML }}" | base64 -d > src/main/resources/application.yml
          
          # 디코딩된 application.yml 확인
          echo "application.yml 내용:"
          cat src/main/resources/application.yml
          
          docker build -t ${{ secrets.DOCKER_HUB_USERNAME }}/auth-service .
          docker push ${{ secrets.DOCKER_HUB_USERNAME }}/auth-service

→ 이걸로 문제가 있는지 바로 확인 가능했음


eureka-service

 

name: CI/CD Docker Deploy to EC2

on:
  push:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      # 1. GitHub 리포지토리 체크아웃
      - name: Checkout code
        uses: actions/checkout@v4

      # 2. Docker Hub 로그인
      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_PASSWORD }}

      # 3. 도커 이미지 빌드 & 푸시 - auth-service
      - name: Build & Push eureka-service
        run: |
          
          # resources 디렉토리가 없을 경우 생성
          mkdir -p src/main/resources 
          
          # GitHub Secrets에 등록한 application.yml 내용을 복사
          echo "${{ secrets.EUREKA_APPLICATION_YML }}" | base64 -d > src/main/resources/application.yml
          
          # 디코딩된 application.yml 확인
          echo "application.yml 내용:"
          cat src/main/resources/application.yml
          
          docker build -t ${{ secrets.DOCKER_HUB_USERNAME }}/eureka-service .
          docker push ${{ secrets.DOCKER_HUB_USERNAME }}/eureka-service

      # 4. EC2에 SSH 접속 & 배포
      - name: Deploy to EC2 via SSH
        uses: appleboy/ssh-action@v1.0.0
        with:
          host: ${{ secrets.EC2_HOST }}
          username: ${{ secrets.EC2_USER }}
          key: ${{ secrets.EC2_SSH_KEY }}
          script: |
            cd ~/eureka-service
            
            docker-compose pull eureka
            docker-compose up -d eureka
            docker image prune -f

      # 5-1. 성공 시 알림
      - name: Send Discord Success Notification
        if: success()
        uses: Ilshidur/action-discord@master
        env:
          DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_BACK }}
        with:
          args: |
            ✅ [${{ github.actor }}]님이 `${{ github.repository }}` 레포지토리에서 **배포를 완료**했어요!
            🔗 커밋: ${{ github.sha }}

      # 5-2. 실패 시 알림
      - name: Send Discord Failure Notification
        if: failure()
        uses: Ilshidur/action-discord@master
        env:
          DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_BACK }}
        with:
          args: |
            ❌ [${{ github.actor }}]님이 `${{ github.repository }}` 레포지토리에서 **배포에 실패**했어요!
            🔍 에러 로그를 확인해주세요.

 

FROM gradle:8.4-jdk17 AS builder
COPY . /app
WORKDIR /app
RUN gradle clean build -x test

FROM openjdk:17-jdk-slim
WORKDIR /app
COPY --from=builder /app/build/libs/*-SNAPSHOT.jar ./app.jar
EXPOSE 8761
ENTRYPOINT ["java", "-jar", "app.jar"]

 

spring:
  application:
    name: eureka-service

server:
  port: 8761

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false

management:
  metrics:
    enable:
      system: false

 

 

mkdir -p eureka-service
cd eureka-service

 

nano docker-compose.yml
version: '3.8' 

services:
  eureka :
    image: dockerhub_id/eureka-service:latest
    ports:
      - "8761:8761"
    container_name: eureka
    networks:
      - msa-network

networks:
  msa-network:

 

git add .
git commit -m "feat : 커밋 메시지"
git push -u origin main

 


gateway-service

 

name: CI/CD Docker Deploy to EC2

on:
  push:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      # 1. GitHub 리포지토리 체크아웃
      - name: Checkout code
        uses: actions/checkout@v4

      # 2. Docker Hub 로그인
      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_PASSWORD }}

      # 3. 도커 이미지 빌드 & 푸시 - gateway-service
      - name: Build & Push gateway-service
        run: |
          
          # resources 디렉토리가 없을 경우 생성
          mkdir -p src/main/resources 
          
          # GitHub Secrets에 등록한 application.yml 내용을 복사
          echo "${{ secrets.GATEWAY_APPLICATION_YML }}" | base64 -d > src/main/resources/application.yml
          
          # 디코딩된 application.yml 확인
          echo "application.yml 내용:"
          cat src/main/resources/application.yml
          
          docker build -t ${{ secrets.DOCKER_HUB_USERNAME }}/gateway-service .
          docker push ${{ secrets.DOCKER_HUB_USERNAME }}/gateway-service

      # 4. EC2에 SSH 접속 & 배포
      - name: Deploy to EC2 via SSH
        uses: appleboy/ssh-action@v1.0.0
        with:
          host: ${{ secrets.EC2_HOST }}
          username: ${{ secrets.EC2_USER }}
          key: ${{ secrets.EC2_SSH_KEY }}
          script: |
            cd ~/gateway-service
            
            docker-compose pull gateway
            docker-compose up -d gateway
            docker image prune -f

      # 5-1. 성공 시 알림
      - name: Send Discord Success Notification
        if: success()
        uses: Ilshidur/action-discord@master
        env:
          DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_BACK }}
        with:
          args: |
            ✅ [${{ github.actor }}]님이 `${{ github.repository }}` 레포지토리에서 **배포를 완료**했어요!
            🔗 커밋: ${{ github.sha }}

      # 5-2. 실패 시 알림
      - name: Send Discord Failure Notification
        if: failure()
        uses: Ilshidur/action-discord@master
        env:
          DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_BACK }}
        with:
          args: |
            ❌ [${{ github.actor }}]님이 `${{ github.repository }}` 레포지토리에서 **배포에 실패**했어요!
            🔍 에러 로그를 확인해주세요.

 

 

FROM gradle:8.4-jdk17 AS builder
COPY . /app
WORKDIR /app
RUN gradle clean build -x test

FROM openjdk:17-jdk-slim
WORKDIR /app
COPY --from=builder /app/build/libs/*-SNAPSHOT.jar ./app.jar
EXPOSE 8000
ENTRYPOINT ["java", "-jar", "app.jar"]

 

 

server:
  port: 8000
  forward-headers-strategy: framework

spring:
  application:
    name: gateway-service

  main:
    web-application-type: reactive

  cloud:
    gateway:
      default-filters:
        - DedupeResponseHeader=Access-Control-Allow-Origin Access-Control-Allow-Credentials
      global-cors:
        cors-configurations:
          '[/**]':
            allowedOrigins:
              - 'http://localhost:3000'
            allow-credentials: true
            allowedHeaders:
              - x-requested-with
              - Authorization
              - content-type
              - credential
              - X-AUTH-TOKEN
              - X-CSRF-TOKEN
            allowedMethods:
              - PUT
              - PATCH
              - GET
              - POST
              - DELETE
              - OPTIONS
      routes:
        - id : auth-service
          uri : lb://auth-service
          predicates:
            - Path=/auth-service/**
          filters:
            - StripPrefix=1

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://eureka:8761/eureka/



 

mkdir -p gateway-service
cd gateway-service

 

 

nano docker-compose.yml
version: '3.8'

services:
  gateway:
    image: dockerhub_id/gateway-service:latest
    ports:
      - "8000:8000"
    container_name: gateway
    networks:
      - msa-network

networks:
  msa-network:

 

 

git add .
git commit -m "feat : 커밋 메시지"
git push -u origin main

 


🧨 MSA 배포 과정에서 겪은 문제점과 해결 방법 (feat. Docker Compose)

💡 문제 1. 컨테이너 간 통신 실패 (eureka 연결 안 됨)

  • 현상: auth-service, gateway-service가 http://eureka:8761/eureka/로 Eureka에 등록되지 않음
  • 원인: 도커 컨테이너 간 통신을 위한 공통 네트워크(msa-network)가 없었음
docker network create msa-network

 

 

💡 문제 2. 컨테이너가 같은 네트워크에 묶여있지 않아 DNS가 안됨

  • 현상: Gateway가 auth-service를 찾지 못해 503 오류 발생
  • 원인: 각 서비스의 docker-compose.yml에 네트워크를 선언하긴 했지만, 공통 네트워크를 공유하지 않음
  • 해결 방법: 각 서비스별 docker-compose.yml에 아래 설정 추가
networks:
  msa-network:
    external: true

 

 

eureka-service docker-compose.yml : 

version: '3.8' 

services:
  eureka :
    image: jiho0815/eureka-service:latest
    ports:
      - "8761:8761"
    container_name: eureka
    networks:
      - vybz-network

networks:
  vybz-network:
    external: true

 

 

gateway-service docker-compose.yml :

version: '3.8'

services:
  gateway:
    image: jiho0815/gateway-service:latest
    ports:
      - "8000:8000"
    container_name: gateway
    networks:
      - vybz-network

networks:
  vybz-network:
    external: true

 

 

auth-service docker-compose.yml : 

version: '3.8' 

services:
  auth-prod:
    image: jiho0815/auth-service:latest
    ports:
      - "8100:8100"
    container_name: auth-prod
    networks:
      - vybz-network

networks:
  vybz-network:
    external: true

 

version: '3.8' 

services:
  mysql:
    image: mysql:8.0
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: 20010815
      MYSQL_DATABASE: msa-practice
    ports:
      - "3306:3306"
    volumes:
      -  mysql-data:/var/lib/mysql
    networks:
      - vybz-network

networks:
  vybz-network:
    external: true

volumes:
  mysql-data:

network 목록 확인 

docker network ls
NETWORK ID     NAME          DRIVER    SCOPE
e159f0a6cb20   msa-network   bridge    local

 

 

msa-network에 대한 상세 정보를 JSON 형식으로 출력 : 

docker network inspect msa-network
[
    {
        "Name": "msa-network",
        "Id": "e159f0a6cb2012a72aba230b4161c95bfd6725acd5e2c8a8cf3f79c11f96c2b7",
        "Created": "2025-05-21T12:01:50.349982686Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.22.0.0/16",
                    "Gateway": "172.22.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "0798e8193bcbcf37a9034e8f5fe76b8e89e50244bcb98dbad0334921e7ab68ce": {
                "Name": "eureka",
                "EndpointID": "870170cec90ccd6eed6b9a124aad069b8fd5c74b3fb86506330b04fc95f96416",
                "MacAddress": "02:42:ac:16:00:02",
                "IPv4Address": "172.22.0.2/16",
                "IPv6Address": ""
            },
            "2ec812cab25c0c34677576dfee7912366bb2eac849078f5468105ac7e44edcd2": {
                "Name": "auth-prod",
                "EndpointID": "1304e49ea59b3489908e913e3f3150304b0d4cd7d645364e520db78bc9835121",
                "MacAddress": "02:42:ac:16:00:05",
                "IPv4Address": "172.22.0.5/16",
                "IPv6Address": ""
            },
            "ccf4d95f1ff7f8c2f4ffc9b6dd1ff7148990cf8e92176a46f40419354c28a3f5": {
                "Name": "mysql",
                "EndpointID": "1717f8cff84a30146ad3e4535413a86b469f7ddd615bc2fdb1daa38403cb2bc6",
                "MacAddress": "02:42:ac:16:00:03",
                "IPv4Address": "172.22.0.3/16",
                "IPv6Address": ""
            },
            "cf4985531530b7e1675ffb09141cef2a01d0e6ecf8cf9dcc1abe8e3d498fc6b0": {
                "Name": "gateway",
                "EndpointID": "37251bbf2fa2ff4769130d8b7c77bdcd5fc4cc4e1a1d88f352a70d52ed7906dc",
                "MacAddress": "02:42:ac:16:00:04",
                "IPv4Address": "172.22.0.4/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

 


상위 폴더 안에 auth-service, eureka-service, gateway-service, mysql 등을 넣자 ! 

그 전에 폴더와 파일, 이미지들을 정리하자 ! 

 

목표로 하는 구조 : 

vybz/
├── auth-service/
│   └── docker-compose.yml
├── eureka-service/
│   └── docker-compose.yml
├── gateway-service/
│   └── docker-compose.yml
├── mysql/
│   └── docker-compose.yml

 

(1) 현재 실행 중인 컨테이너 확인

docker ps -a

 

(2) 실행 중인 컨테이너 중지 및 삭제 

docker stop auth-prod mysql eureka gateway
docker rm auth-prod mysql eureka gateway

 

 

(3) 불필요한 네트워크 삭제

docker network ls
docker network rm msa-network

 

(4) 불필요한 볼륨도 정리

docker volume ls
docker volume rm mysql-data

 

 

(5) 이미지 삭제 

docker images
docker rmi <이미지ID>

 

 

(6) 마지막으로 확인

docker ps -a        
docker network ls    
docker volume ls

 

 

(7) docker-compose.yml 삭제 

cd 서비스 이름
rm -rf docker-compose.yml

 

(8) 빈 폴더 삭제 

rmdir auth-service

 

(9) vybz 최상위 폴더 생성 

mkdir vybz
cd vybz

 

 

(10) auth-service, eureka-service, gateway-service, mysql 폴더 생성 

mkdir -p auth-service 
mkdir -p eureka-service
mkdir -p gateway-service
mkdir -p mysql

 

 

(11) 각 서비스마다 docker-compose.yml 생성 후 작성 

nano docker-compose.yml

 

 

(12) 최상위 경로에서 네트워크 생성

docker network create vybz-network

 

 

(13) 각 서비스 실행

cd vybz/mysql
docker-compose up -d

cd ../eureka-service
docker-compose up -d

cd ../auth-service
docker-compose up -d

cd ../gateway-service
docker-compose up -d