본 문서는 Windows 환경에서 도커를 사용할 때 IO 속도 이슈에 대한 내용을 다룹니다.
사용 기술 및 환경:
- Docker Desktop for Windows
- Docker Compose
- Windows 10 Pro
- PHP 8.2
- Nginx
- Laravel
기존 개발 서버로 macOS를 사용하다가 Windows 환경에서 개발을 진행하게 되었습니다.
기본적으로 Docker Compose를 사용하여 컨테이너를 통해 개발 환경을 구축하는 것을 선호하여 Docker Desktop을 설치하고 사용하게 되었습니다.
웹 서버가 동작하는 컨테이너와 프로젝트 디렉토리를 마운트하고 단순히 Html 파일을 띄우는 정도의 간단한 작업은 문제가 없었으나 Laravel 프레임워크를 사용하여 개발을 진행하면서 IO 속도 이슈가 발생하게 되었습니다.
Windows 환경에서 도커를 사용할 때 IO 속도 이슈가 발생하는 이유는 Windows의 파일 시스템이 Linux의 파일 시스템과 다르기 때문입니다.
Windows의 파일 시스템은 NTFS 파일 시스템을 사용하고 도커 컨테이너는 Linux의 파일 시스템을 사용하기 때문에 Windows의 파일 시스템과 Linux의 파일 시스템 간의 호환성 문제로 인해 IO 속도 이슈가 발생하게 됩니다.
Laravel 프레임워크 사용 시 가장 문제가 되는 부분은 vendor 디렉토리로 Composer를 통해 설치된 패키지들이 저장되는 디렉토리입니다.
vendor 디렉토리는 Composer를 통해 패키지를 설치할 때 매우 많은 파일들이 생성되기 때문에 IO 속도 이슈가 두드러지게 발생하게 됩니다.
Windows 환경에서 도커를 통해 Laravel 프레임워크를 사용할 때 IO 속도 이슈를 해결하기 위한 방법은 다음과 같습니다.
composer install
명령어로 프로젝트 디렉터리에 vendor 디렉토리를 생성합니다.- vendor 디렉터리를 마운트된 디렉터리 외부로 이동합니다.
- 프로젝트 디렉터리에 vendor 디렉터리를 심볼릭 링크로 연결합니다.
위와 같은 방법을 통해 IO 속도 이슈를 완전히 해결할 수는 없었지만 이전 3000ms 이상 걸리던 속도가 200ms로 개선되었습니다.
예전에도 Windows 환경에서 개발을 진행한 경험이 있었지만 Docker를 사용하면서 처음으로 IO 속도 이슈를 경험하게 되었습니다.
확실히 개발 환경으로 macOS나 Linux를 사용하는 것이 Windows보다는 편리하다는 것을 느꼈습니다.