“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 를 컨테이너로 나누는 것.
  • 이것은 이론적으로 논쟁이 있다.

오해: 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를 사용하지 않는, 위에서 언급한 최적화 방법들을 추천한다.