#Docker 에 대한 오해
“Docker 1.0 발표에 대한 Hacker News 토론” 에서 “Docker Misconceptions” 라는 포스팅을 보고.
오해: Docker를 배우면, 다른 시스템 관련된 것들은 더이상 안 배워도 된다?
- 아니다. 운영환경에서 사용하려면, 아래와 같은 것들을 매우 깊게 관리하는 것이 필요하다.
- secured private image repository (index)
- orchestrating container deploys with zero downtime
- orchestrating container deploy roll-backs
- networking between containers on multiple hosts
- managing container logs
- managing container data (db, etc)
- creating images that properly handle init, logs, etc
- much much more…
오해: Docker 컨테이너 1개 당 1개의 프로세스만 가져야 한다?
- 아니다. 단일 프로세스가 아니라 “역할 기반 가상 머신”의 방향으로 Docker 를 관리하는 것이 좋다.
- 나쁜 예: ssh, cron, app, web server 를 컨테이너로 나누는 것.
- 좋은 예: app, db, redis 를 컨테이너로 나누는 것.
- 이것은 이론적으로 논쟁이 있다.
- 만약 이 주장에 동의하지 않는다면 “Microservices - Not a free lunch! - High Scalability” 이것을 읽어 봐라.
오해: Docker를 사용하면, configuration management (CM) tool이 필요없다?
- 부분적으로 사실이다.
- Docker를 사용하면 설정관리의 필요성은 낮아진다.
- 하지만 provision, deploy, manage your servers 를 위한 orchestration tool이 절대적으로 필요하다.
Ansible
같은 툴이 이런 곳에 사용하기 좋다.- (Ansible 이 짱이라는 내용이 뒤에 이어짐. 생략)
오해: Docker를 당장 사용해야만 하겠군!
지금 당장 운영환경에 Docker를 도입하려면, 당신의 운영환경이 아래의 것들을 만족해야 한다.
- secured least-privilege access (key based logins, firewalls, fail2ban, etc)
- restorable secure off-site database backups
- automated system setup (using Ansible, Puppet, etc)
- automated deploys
- automated provisioning
- monitoring of all critical services
- and more (documentation, etc)
만약 인프라의 심각한 구멍(critical holes in your infrastructure)을 가지고 있는 채 Docker를 사용하려고 하는 것은. 불안정한 절벽 끝에 페라리를 주차해 놓은 것과 같다.
오해: 속도와 일관성을 위해 Docker를 사용해야만 하겠군!
여기에 Docker를 사용하지 않고, 속도와 일관성을 유지하는 방법들이 나옴.
- 설정관리 도구인 Ansible, Puppet 사용하기.
- 클라우드 이미지 사용하기.
- Version Pinning (버전 명시하기)
- e.g. 설정관리 도구에서 nginx가 아니라 ‘nginx version 1.4.6-1ubuntu3’ 로 명시해서 설치.
- 배포 버전 관리
- 배포 패키징
그럼 언제 Docker를 사용해야 하지?
- 개발환경에서 Vagrant를 쓰고 있다면, 당장 docker로 전환할 수 있다.
- (상욱: 나도 얼마전에 대부분 docker로 옮겼는데 빠르고, 관리하기 좋다)
- 운영환경에서는 가능하면 Docker를 사용하지 않는, 위에서 언급한 최적화 방법들을 추천한다.