도커는 왜 사용할까?
현업에선 도커를 필수라고 생각할 정도로 사실상 안 쓰는 기업이 없다. 도커를 쓰는 이유에는 여러 가지 장점이 있지만, 그중에서 핵심 장점 딱 1가지만 기억하면 된다.
이식성 : 특정 프로그램을 다른 곳으로 쉽게 옮겨서 설치 및 실행할 수 있는 특성
예시로 확인해보자.
친구는 컴퓨터에 MySQL을 아무 에러 없이 설치했다. 하지만 내 컴퓨터에서는 같은 방식으로 설치해도 에러가 발생한다. 버전 차이, 운영체제 차이, 다른 프로그램과의 충돌 등 다양한 원인이 존재한다. 이런 문제는 설치 과정이 복잡할수록 더 번거롭고 귀찮게 느껴진다.
이러한 환경 차이를 깔끔하게 해결해 주는 툴이 `도커(Docker)`이다. 도커를 사용하면 어떤 컴퓨터에서도 동일한 환경을 빠르게 구축하고 에러 없이 MySQL을 설치하고 실행할 수 있다.
실무 및 팀프로젝트 관점으로 정리하자면
1. 도커를 이용한 팀워크의 이점
- 버전 충돌 문제 해결
- 언어나 프레임워크는 주로 버전 관리 시스템(VCS)에 명시되어 버전 차이가 적다.
- 그러나 설치형 데이터베이스(DB)의 경우 버전 차이로 인한 이슈가 자주 발생한다.
- 도커(Docker)를 사용하면 이미지에 언어, 프레임워크, DB 버전을 모두 명시할 수 있다.
- 독립적인 실행 환경 제공
- 도커 컨테이너는 로컬 환경의 간섭 없이 독립적으로 구동된다.
- 따라서 팀원 간의 환경 차이로 인한 문제를 걱정할 필요가 없다.
- 자동화된 환경 설정
- Dockerfile을 사용하면 설치할 언어, 프레임워크, 패키지를 코드로 명시할 수 있다.
- 이를 통해 어느 컴퓨터에서든 동일한 환경을 자동으로 설치하고 실행할 수 있다.
2. 도커를 이용한 서버에서의 이점
- 개발 환경과 동일한 서버 환경 구축
- 도커를 사용하면 이미지를 통해 개발 환경과 동일한 환경을 서버에 쉽게 구축할 수 있다.
- 서버 확장 및 이전의 용이함
- 서비스 인기에 따라 서버를 늘리거나 더 좋은 서버로 이전해야 할 때, 전 서버의 언어와 프레임워크를 새 서버에 일일이 설치하는 번거로움을 해결할 수 있다.
- 도커 이미지만 가져와 컨테이너를 생성하면 빠르게 동일한 환경을 구축할 수 있다.
- 다중 서비스 배포 가능
- 하나의 물리 서버에서 여러 도커 컨테이너를 실행하여 여러 서비스를 동시에 배포할 수 있다.
- (예: AWS EC2나 구름 IDE도 이 원리로 동작).
- 버전 충돌 문제 해결
- 같은 언어와 프레임워크를 사용하더라도 필요한 버전이 다를 수 있는 경우가 있다.
- 도커 컨테이너는 독립적으로 구동되므로 버전 차이로 인한 이슈를 걱정할 필요가 없다.
3. 도커의 자원적, 성능적 이점
- 가벼운 가상화 방식
- 기존의 가상화 기술(예: virtual machine)은 각 가상 환경마다 독립된 커널 OS를 생성해야 한다.
- 이로 인해 무겁고 느린 실행 속도와 자원 고정 문제가 발생한다.
- 효율적인 리소스 사용
- 도커는 새로운 커널 OS를 생성하지 않고 기존의 커널 OS의 커널 자원을 공유하여 사용한다.
- 이로 인해 가볍고 빠른 실행 속도를 제공한다.
- 유동적인 자원 할당
- 도커 컨테이너는 고정된 자원 할당이 아닌 유동적 자원 사용이 가능하다.
- 이를 통해 서버 환경에서도 성능을 더욱 효율적으로 활용할 수 있다.
- 비유를 통한 이해
- 기존 방식: 한 건물 내에 사무실마다 독립된 발전소와 물탱크를 설치 (비효율적)
- 도커 방식: 한 건물의 발전소와 물탱크를 유동적으로 나눠 사용 (효율적)
결론
도커 사용하는 이유를 정리한 이유는 지금 하고 있는 부트캠프 개인과제 필수구현 요소에 포함되어 있기 때문이다. 그래서 부랴부랴 블로그 등을 활용해 도커를 설치하고 설정파일도 추가했지만, 사용하는 이유도 모르고 개인 프로젝트이다 보니 하면서도 왜 하는 거지?라는 생각이 들었던 것 같다.
하지만 정리를 하고 나니, 도커를 사용하는 이유를 알게 되었고 개발자들이 겪던 환경세팅 및 싱크를 맞추는데 겪던 고충을 말끔히 해결시켜 준다.
이후엔 도커 사용법과 사용하는 주프레임워크와 AWS에서 사용하는 방법 등을 정리해 봐야겠다.
참고
도커(Docker)를 사용하는 이유는 무엇일까?
도커를 사용하면 개발 환경을 이미지화 시키고 해당 이미지를 통해 개발 및 배포 환경을 쉽게 컨테이너화 시켜 구축할 수 있다. 이런 도커를 사용하는 이유에 대해 간단히 알아보자.개발을 하다
velog.io
비전공자도 이해할 수 있는 Docker 입문/실전 강의 | JSCODE 박재성 - 인프런
JSCODE 박재성 | 비전공자 입장에서도 쉽게 이해할 수 있고, 실전에서 바로 적용 가능한 Docker 입문/실전 강의를 만들어봤습니다!, 🤬 에라이, 못 해먹겠네!비전공자로 개발을 시작해 여러 회사에
www.inflearn.com
'DevOps > Docker' 카테고리의 다른 글
[Docker] 도커 명령어 (2) | 2024.12.23 |
---|---|
[Docker] 가상화 기술(하이퍼바이저 vs 컨테이너) (2) | 2024.12.18 |