ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • docker-compose 개발 환경 만들기
    Server/Container 기술 2024. 12. 9. 17:37

    nginx + next.js(next-ts-app) + mariaDB + springboot(backend) 구성으로 설정해 보려고 한다.

     

    1. 종류 및 설치방법

    1.1. Docker Desktop란?

    Docker Desktop은 Docker 컨테이너 기반의 애플리케이션을 로컬 개발 환경에서 쉽게 실행하고 관리할 수 있도록 제공되는 GUI 기반의 도구이다. Docker의 주요 기능을 그래픽 사용자 인터페이스(GUI)와 명령줄 인터페이스(CLI)로 모두 사용할 수 있어, 초보자부터 숙련된 개발자까지 편리하게 Docker를 사용할 수 있다.

    비상업적 용도는 무료, 상업적 용도로는 유료로 전환되어 필자는 현재 Rancher 및 Colima를 사용하고 있다.

     

    1.2. Rancher란?

    Rancher는 여러 Kubernetes 클러스터를 중앙에서 관리할 수 있는 오픈 소스 플랫폼이다. 다양한 환경(온프레미스, 클라우드 등)에 분산된 Kubernetes 클러스터를 통합적으로 운영, 관리, 모니터링하며, DevOps 팀이 컨테이너 기반 애플리케이션을 보다 효율적으로 개발, 배포, 운영할 수 있도록 지원한다.

    설치 방법은 MacOS에 Rancher 설치 방법을 참고 바란다.

     

    1.3. Colima란?

    Colima는 가볍고 효율적인 컨테이너 관리 도구로, Docker Desktop을 대체하거나 보완하는 데 적합하고 필자는 주로 Docker Desktop의 라이선스 제약을 피하고 싶을 때 사용하였다.

    설치 방법은 Colima란를 참고 바란다.

    필자는 오라클을 로컬에서 띄우려고 했더니 Rancher에서 제약이 있어서 Colima에서 오라클을 설치해 보았다.

     

    2. 사용 방법

    • docker-compose.local.yml
    services:
      next-ts-app:
        image: gundam/nextjs:1.0.0
        container_name: t1-next-ts-app
        build:
          context: ./next-ts-app/src
          dockerfile: local.Dockerfile
        volumes:
          - ./next-ts-app/src:/app # 전체 소스 폴더를 마운트
        restart: always
        # ports:
        #   - "3000:3003"
        # depends_on:
        #   - backend
        networks:
          - my_network
    
      nginx:
        image: nginx:latest
        container_name: t1-nginx
        # build:
        #   context: ./nginx
        #   dockerfile: local.Dockerfile
        volumes:
          - ./nginx/conf/conf.d/default.conf:/etc/nginx/conf.d/default.conf
        restart: always
        ports:
          - ${TEST_NGINX_PORT}:80
        depends_on:
          - next-ts-app
        networks:
          - my_network
    
      mariadb:
        image: mariadb:10.6.8
        container_name: t1-mariadb
        restart: unless-stopped
        environment:
          - MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD
          # - MYSQL_DATABASE=$MYSQL_DATABASE
        ports:
          - 3307:3306
        volumes:
          - /Users/deokjoonkang/dev/opt/database/data/react-and-java/mariadb:/var/lib/mysql
        user: "1000:1000"
        networks:
          - my_network
    
    networks:
      my_network:
        driver: bridge

     

    • .env 파일

    환경변수를 지정하고 ${TEST_NGINX_PORT}와 같이 사용이 가능하다.

    # 데이터베이스 설정
    MYSQL_ROOT_PASSWORD=test1234@
    # MYSQL_DATABASE=sample_db
    # MYSQL_USER=sample_user
    # MYSQL_PASSWORD=sample_password
    
    TEST_NGINX_PORT=3005

     

     

    3. 설정파일

    3.1. nginx

    • conf/conf.d/default.conf
    server {
        listen 80;
        # server_name example.com;
    
        location / {
            proxy_pass http://next-ts-app:3003;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
        
    }
    • local.Dockerfile

    이렇게도 사용할 수 있지만 필자는 docker-compose에서 설정한 이미지로 사용하였다.

    # Use the Nginx image from Docker Hub
    FROM nginx:stable-alpine
    
    # Remove the default Nginx configuration file
    # RUN rm /etc/nginx/conf.d/default.conf
    
    # COPY ./conf/conf.d/default.conf /etc/nginx/conf.d/default.conf

     

    3.2. next.js

    • local.Dockerfile
    FROM node:21.1.0 as dev
    
    RUN mkdir /app
    WORKDIR /app
    
    # ENV NODE_ENV production
    
    COPY package*.json ./
    COPY yarn.lock ./
    COPY .env.local ./
    
    RUN yarn
    
    EXPOSE 3000
    
    CMD ["yarn" , "dev"]
    • .env.local
    PORT=3003
    
    NEXT_PUBLIC_ENV=LOCAL

     

    3.3. mariaDB

    /Users/deokjoonkang/dev/opt/database/data/react-and-java/mariadb 경로를 생성하고 권한을 준다.

    $ sudo chmod -R 777 /Users/deokjoonkang/dev/opt/database/data/react-and-java/mariadb

     

     

    좀더 옵션들이 많이 있지만 간단하게만 설정하고 이후에 좀더 세밀하게 설정해보자.

     

    4. 실행

    컨테이너 시작 (builld 하면서 백그라운드 실행)

    `docker-compose.local.yml`에서 설정되어 있는 Dockerfile 및 설정 값으로 `--build`옵션으로 이미지를 빌드하고 `-d` 옵션으로 백그라운드로 컨테이너를 시작한다.

    $ docker-compose -f docker-compose.local.yml up --build -d

     

    컨테이너 중지 및 삭제

    `docker-compose.local.yml`에서 설정된 컨테이너들을 모두 중지하고 삭제한다.

    $ docker-compose -f docker-compose.local.yml down

     

    성공

     

    참고

    디렉토리 구조

     

    참고로 networks는 컨테이너간 통신이 되도록 추가해 줘야 합니다.

     

    https://github.com/dchkang83/react-and-java

     

     

     

     

    'Server > Container 기술' 카테고리의 다른 글

    docker-compose란?  (0) 2024.12.09
    Colima란  (0) 2024.11.09

    댓글

Designed by Tistory.