사람들이 Docker에서 데이터베이스를 실행하는 것에 대해 이야기 할 때 컨테이너에 데이터를 저장한다는 의미는 아닙니다. 그들은 DB 소프트웨어로 도커 이미지를 가지고 데이터를 볼륨 (컨테이너 볼륨이 아닌 바인드 볼륨)으로 마운트하는 것에 대해 이야기하고 있습니다.
볼륨은 Docker에서 필수적인 부분이며 결함이 있거나 고정 된 것이 아닙니다. Docker는 상태 비 저장 (마이크로) 서비스를 위해 만들어진 것이 아닙니다 .
내가 원하는대로 , Docker에서 데이터베이스를 실행하지 않는 기술적 이유를 찾을 수 없으므로 불행히도 인수의 다른 측면을 선택하여 원하는 대답을하지 못할 수도 있습니다.
(나는 베어 메탈과 도커에 익숙한 오라클과 기본 설정을 지나면 작동하기가 다소 악명 높기 때문에 Oracle을 예로 사용하고 있습니다.)
- 컨테이너에 DB 소프트웨어 자체를 패키징하면 일반적인 버전의 이점을 얻을 수 있습니다. 어디에서나 동일한 버전을 사용하고, 종속성 / 공유 라이브러리 문제를 피하고, 개발자 랩톱에서 또는 필요한 곳 어디에서나 동일한 DB를 회전시킬 수 있습니다.
- 그것은이다 스냅 은 어디서나 실행지고; 업데이트는 사소한 것입니다. 모든 Docker 혜택이 적용됩니다. Dockerhub에는 Oracle 이미지가 있습니다.이 이미지를 사용하면 1 ~ 3 분 안에 (그리고 물론 다른 데이터베이스에서도) 작동중인 DB를 스핀 업할 수 있습니다.
- 사람들은 성능 테스트를 수행 한 후 볼륨과 베어 메탈간에 I / O 차이를 발견하지 못했습니다 ( https://www.percona.com/blog/2016/02/11/measuring-docker-io-overhead/ , https : // stackoverflow .com / questions / 21889053 / what-is-the-the-time-time-of-a-a-docker-container ).
- 어쨌든 Docker는 어쨌든 모든 I / O를 가로채는 것과는 다릅니다. 표준 Linux 도구 (이 경우 바인드 마운트, Docker-fu를 가능하게하는 내부 커널 테이블 조작)로 창의력을 발휘합니다.
- 분명히 그것은 DB의 두 인스턴스를 실행할 수 있고 동일한 파일에서 작동하도록 할 수는 있지만 아무도 그것을 암시하지는 않습니다. Docker는 볼륨에 자동으로 동시 마법없이 액세스 할 수있는 방법을 제공하지 않습니다. 나머지 혜택은 여전히 적용됩니다. DB 자체가 이와 같은 충돌을 감지하지 못하면 볼륨을 이미 사용 중일 때 두 번째 컨테이너의 회전을 거부하는 CMD 스크립트를 이미지에 제공하는 것이 좋습니다.
- 베어 메탈 DB 서버를 끄지 않는 것처럼 컨테이너를 조심스럽게 돌리거나 내리는 것이 좀 더주의를 기울여야하지만 상당히 관리가 쉬워야합니다.
이제 상황에 따라 그렇지 않은 부드러운 이유 가있을 수 있습니다.
- 예를 들어, Oracle (회사)은 RDBMS를 Docker 컨테이너에서 실행하는 경우 확실히 지원하지 않습니다. 그러나 개발자 및 테스트 환경에서만도 커화 된 Oracle RDBMS 이미지를 사용 중일 수 있으며, 베어 메탈 프로덕션 서버용으로 예약 할 수 있습니다. (그러나 라이센스를 지불하는 것을 잊지 마십시오 ...).
- 작전 팀이 Docker에 익숙하지 않은 경우 실수로 모든 것을 죽이고 데이터 파일을 파괴하는 것이 조금 더 쉬울 수 있습니다.
- 당신은 매우 빠른 전용 SAN 스토리지 많은 양의 이미 큰 전용 금속 DB 머신을 가지고 있고, 다른 어쨌든 아무것도 실행하지 않으면, 단지 containerize하는 도커를 사용하여 아무 소용이 없을 것이다 사람들을 당신이되므로 결코 바로 그 때 다른 서버를 회전하지가 100GB 또는 심지어 TB의 데이터입니다. 결국 프로덕션 환경에서 Oracle과 같은 RDBMS는 모든 복제, 데이터 무결성, 다운 타임없는 페일 오버 등 측면에서 매우 발전했습니다. 이 인수는 단지 " RDBMS를 컨테이너화 할 필요 는 없다 "는 것입니다. "하지 말아야한다"는 말이 없습니다. 컨테이너를 통해 또는 상상할 수있는 다른 이유로 데이터베이스 소프트웨어 업그레이드를 롤아웃하기를 원할 수도 있습니다.
그래서 당신은 간다. 꼭 않는다 (영원히 감사 할 것입니다) 개발자 및 테스트 환경을위한 최소한, 당신의 DB를 dockerize. 생산, 그것은 취향에 내려 올 것이다, 그리고 거기에 적어도, 나는 또한 전문 DBA / 옵스 최상의 앉아 솔루션을 선호 - 그들은 베어 메탈 DB 서버 작업 수십 년의 경험이있는 경우, 모든 방법으로 그들을 신뢰를 계속합니다. 그러나 클라우드에 모든 IT를 보유한 신생 기업이라면 Docker 컨테이너는 전체 그림에서 양파의 한 부분입니다.