Home [soldout] Docker를 활용한 개발 환경 관리
Post
Cancel

[soldout] Docker를 활용한 개발 환경 관리

# 문제점


만약 프로젝트를 제작하면서 개인 로컬 환경에서 모든 플랫폼을 직접 설치해 코드 작성 및 테스트를 진행하고 문제가 없어 외부 서버에 배포를 한다고 가정했을 때, 배포 환경과 개발 환경의 차이로 인해 발생할 수 있는 문제점은 개발 환경에서 제어할 수 없고 예측하기 힘들 것입니다. 이러한 문제를 해결하기 위해서는 어플리케이션 구성을 위한 여러 플랫폼의 종류나 버전이 항상 동일하게 유지되고 수정될 수 있도록 독립적인 개발 및 배포 환경이 필요했습니다.

# 해결방안


Docker

Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 오픈소스 가상화 플랫폼으로 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하며, 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있습니다.

가상화의 개념은 다음 블로그를 참고하시기 바랍니다.

결론적으로, Docker를 활용해 컨테이너를 구성하고 각 컨테이너가 상호 독립적으로 동작함으로써 리소스의 활용을 효율적으로 해 성능을 높이고 관리적인 측면에서도 애플리케이션이 개발 환경에 구애받지 않도록 동일하게 구성할 수 있습니다.

또한, Docker Desktop을 직접 다운받아 컨테이너를 띄우고 터미널 명령어를 통해 개발 환경을 구축해도 되지만 Docker compose를 이용하면 yml파일에 명령어를 작성함으로써 간편하게 환경 관리 및 실행을 할 수 있습니다.

Docker compose

Docker compose란, 여러 개의 컨테이너로부터 이루어진 서비스를 구축, 실행하는 순서를 자동으로 하여, 관리를 하나의 파일에서 간단하게 할 수 있도록 해주는 기능을 의미합니다.

dockor-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
version : "3"
services:
  db:
    platform: linux/x86_64
    container_name: soldout-db
    image: mysql
    environment:
      MYSQL_DATABASE: soldout_db
      MYSQL_USER: soldout
      MYSQL_PASSWORD: 1234
      MYSQL_ROOT_PASSWORD: 1234
    volumes:
      - ./db/data:/var/lib/mysql:rw
    ports:
      - "3306:3306"
    restart: always

  redis-docker:
    container_name: soldout-redis
    image: redis:latest
    volumes:
      - ./example-docker-data/redis:/data
    ports:
      - "6379:6379"

위 코드처럼 compose 파일을 준비하여 커맨드를 1회 실행하면, 그 파일로부터 설정을 읽어들여 모든 컨테이너 서비스를 실행시키는 것이 가능하게 해줍니다.

# 마치며


Docker를 활용해 서버 환경을 독립적으로 운용하고 관리하면서 플랫폼의 버전관리를 용이하게 할 수 있고, 환경 변화에 따른 장애에 대한 대비를 할 수 있게 되었습니다.

# 참고자료


  • https://aws.amazon.com/ko/docker/
  • https://engineer-mole.tistory.com/221
  • https://khj93.tistory.com/entry/Docker-Docker-%EA%B0%9C%EB%85%90
  • https://www.samsungsds.com/kr/insights/220222_kubernetes1.html (Container Runtime 상세 설명)
This post is licensed under CC BY 4.0 by the author.

[soldout] Session을 구성하기 위한 저장소 플랫폼 선정

[soldout] GitHub flow를 통한 브랜치 관리