Docker 는 기능 뿐 아니라 가이드 문서도 꾸준히 버전업 하고 있음.
년초를 맞아 Docker 가이드 문서를 다시 살펴볼 수 있는 기회가 있었음.
눈에 띈 내용을 요약함

 

Docker 어플리케이션 개발자를 위한 베스트 프랙틱스

출처: https://docs.docker.com/develop/dev-best-practices/

어플리케이션 데이터를 어디에 저장해야 하나

  • 어플리케이션 데이터를 Docker Storage (컨테이너에 할당된 디폴트 파일 시스템)에 저장하지 마라
  • 대신, 도커 Volumes 를 사용하라
  • 만약 상황이 적절하다면, 도커 Bind mount 도 괜찮다
  • Swarm Service 를 운영할 경우, 민감한 데이터는 Secrets 를 이용하라 (민감하지 않은 데이터는 Configs 를 이용하라)

 

개발환경과 운영환경의 차이

개발환경 운영환경
소스코드를 Bind mount 에 저장해서 이용하라 소스코드를 Volumes 에 저장해서 이용하라
호스트 사이의 시간 오차에 신경 쓸 필요 없다 모든 도커 호스트에 NTP 서버를 설정해서 시간을 맞춰 운영하라

 

도커 네트워크 드라이버 요약

출처: https://docs.docker.com/network/

도커 네트워크 드라이버 요약

Bridge network * 1개 호스트에서 여러개의 컨테이너들 사이의 통신이 필요할 때 적절한 선택
Host network

* 컨테이너 네트워크와 호스트 네트워크가 격리될 필요가 없을 때 적절한 선택

* 네트워크 성능 최적화가 필요할 때 적절한 선택

Overlay network

* 여러개 호스트들 사이에서 컨테이너들 사이의 통신이 필요할 때 적절한 선택

* 여러개의 컨테이너들을 Swarm Service 로 묶어서 운영할 때 적절한 선택

Macvlan network

* VM 방식에서 컨테이너 방식으로 이전할 때 고려할 수 있는 선택

* 컨테이너에 고유한 MAC 주소를 할당함

3rd party network plugins * 기타 다양한 네트워크 플러그인 사용 가능함

네트워크 성능 최적화가 필요한 Hyperledger Fabric 운영의 경우, Host network 모드 사용을 검토해볼만 함

 

어플리케이션 데이터 다루기

출처: https://docs.docker.com/storage/

  • Volumes : 어플리케이션 데이터를 도커가 관리하는 파일시스템 영역에 저장 (가장 권장하는 방식)
  • Bind mounts : 어플리케이션 데이터를 호스트 파일시스템에 저장 (조건만 맞는다면 괜찮은 방식)
  • tmpfs : 어플리케이션 데이터를 호스트 메모리에(만) 저장 (데이터를 호스트 파일시스템에 절대 저장하지 않으므로 기밀성이 좋다)

 

기타 팁

편리한 docker prune 명령 (컨테이너, 네트워크, 이미지, 캐시와 함께 Volume 까지 한꺼번에 정리)

$ docker system prune --volumes
WARNING! This will remove: 
        - all stopped containers 
        - all networks not used by at least one container 
        - all volumes not used by at least one container 
        - all dangling images 
        - all build cache 
Are you sure you want to continue? [y/N] y

 

(이상)

Posted by ingeeC
,