본 문서는 공통 개발환경 구축을 위해 도커와 도커 컴포즈를 이용한 개발환경 구축에 대한 회고를 작성한 문서입니다.
사용 기술 및 환경 :
- Mac OS
- Docker
- Docker Compose
- Alpine Linux
- Rocky Linux
- MariaDB
- PostgreSQL
- Redis
- MongoDB
- PHP 7.3
- PHP 8.2
- PHP-FPM
- Nginx
기존 PHP 7.3 버전에 프레임워크 없이 개발된 서비스를 운영중이었으며 해당 서비스의 개발환경은 개발자 개개인의 로컬 환경에 맞춰 개발되어 있었습니다.
기존 운영중인 서비스의 사용자 수가 증가하면서 기존 서비스의 개편 및 신규 서비스의 개발이 필요하게 되었고 이에 따라 PHP 8.2 버전과 Laravel 프레임워크를 사용하여 새로운 버전의 서비스를 개발하기로 결정하였습니다.
하지만 기존 서비스의 개발 환경이 제각각이고 비 개발자들의 개발 환경 세팅 또한 지원해야하는 상황으로 인해 개발환경을 통합하고 표준화하여 개발자가 아니더라도 쉽게 개발환경을 구축할 수 있도록 도커와 도커 컴포즈를 이용한 개발환경 구축을 하기로 결정하였습니다.
이를 통해 개발자 개개인의 로컬 환경에 맞춰 개발되던 기존의 방식에서 벗어나 통합된 개발환경을 구축하여 개발자가 아니더라도 쉽게 개발환경을 구축할 수 있도록 하기 위한 목적으로 본 문서를 작성하게 되었습니다.
다음은 도커 컴포즈 파일의 구조입니다.
.
├── .gitignore
├── local-databases
│ ├── mariadb
│ ├── postgres
│ └── docker-compose.yml
└── local-php
├── .docker
│ ├── docker-compose.yml
│ ├── Dockerfile.php73
│ ├── Dockerfile.php82
│ ├── cache.conf
│ ├── error.conf
│ ├── nginx.conf
│ └── php.conf
└── project
- local-databases : 로컬 환경에서 사용할 데이터베이스를 구축하기 위한 디렉토리
- local-databases/mariadb : MariaDB 데이터를 저장하기 위한 디렉토리
- local-databases/postgres : PostgreSQL 데이터를 저장하기 위한 디렉토리
- local-databases/docker-compose.yml : 데이터베이스 환경을 구축하기 위한 도커 컴포즈 파일
- local-php : 로컬 환경에서 사용할 PHP 환경을 구축하기 위한 디렉토리
- local-php/.docker : PHP 환경을 구축하기 위한 도커 컴포즈 파일 및 설정 파일을 모아둔 디렉토리
- local-php/.docker/docker-compose.yml : PHP 환경을 구축하기 위한 도커 컴포즈 파일
- local-php/.docker/Dockerfile.php73 : PHP 7.3 버전을 위한 도커 파일
- local-php/.docker/Dockerfile.php82 : PHP 8.2 버전을 위한 도커 파일
- local-php/.docker/cache.conf : Nginx 캐시 설정 파일
- local-php/.docker/error.conf : Nginx 에러 페이지 설정 파일
- local-php/.docker/nginx.conf : Nginx 설정 파일
- local-php/.docker/php.conf : Nginx PHP-FPM 설정 파일
- local-php/project : 프로젝트 소스코드를 저장하기 위한 디렉토리
상세한 내용은 Local PHP 환경 구성과 Local Databases 환경 구성에서 확인하실 수 있습니다.
데이터베이스 환경의 경우 하나의 프로젝트만을 위한 것이 아닌 다른 프로젝트에서도 보편적으로 사용할 수 있는 것을 목표로 하였습니다.
그로 인해 여러 종류의 데이터베이스를 구축하였으며 데이터베이스 접속 정보를 통일하여 다른 프로젝트에서도 사용할 수 있도록 하였습니다.
또한 데이터베이스 환경을 구축할 때는 데이터베이스의 데이터를 저장하기 위한 디렉토리를 별도로 생성하여 데이터베이스를 더 쉽게 삭제하거나 백업할 수 있도록 하였습니다.
PHP 환경의 경우 기존 운영중인 서비스의 PHP 7.3 버전과 새로운 서비스의 PHP 8.2 버전을 구축하였으며 PHP-FPM과 Nginx를 사용하여 구축하였습니다.
PHP 환경 구축 시 Nginx의 기본 설정을 위해 따로 설정 파일들을 만들어 추가하였으며 소스 코드를 컨테이너 내부에 마운트하여 개발자가 소스 코드를 수정할 때 마다 컨테이너를 재시작하지 않아도 되도록 하였습니다.
또한 도커 파일에 systemd 설정을 추가하여 도커 컨테이너 내부에서 추가적인 환경 세팅이 가능하도록 구현 하였습니다.
해당 프로젝트는 단순히 도커와 도커 컴포즈를 설치한 뒤 도커 컴포즈 파일을 실행하는 것만으로 개발 환경을 구축할 수 있도록 하였으며 이를 통해 개발자가 아니더라도 쉽게 개발 환경을 구축할 수 있도록 하는 것을 목표로 하였습니다.
또한 하나의 프로젝트만을 위한 것이 아닌 다른 프로젝트에서도 보편적으로 사용할 수 있는 것을 목표로 하여 개발 환경 구축 시 다양한 프로젝트에서 사용할 수 있도록 하였습니다.
도커와 도커 컴포즈, Linux 환경에 대한 이해도를 높힐 수 있었던 좋은 경험이었습니다.