Docker 는 기능 뿐 아니라 가이드 문서도 꾸준히 버전업 하고 있음.
년초를 맞아 Docker 가이드 문서를 다시 살펴볼 수 있는 기회가 있었음.
눈에 띈 내용을 요약함
Docker 어플리케이션 개발자를 위한 베스트 프랙틱스
어플리케이션 데이터를 어디에 저장해야 하나
- 어플리케이션 데이터를 Docker Storage (컨테이너에 할당된 디폴트 파일 시스템)에 저장하지 마라
- 대신, 도커 Volumes 를 사용하라
- 만약 상황이 적절하다면, 도커 Bind mount 도 괜찮다
- Swarm Service 를 운영할 경우, 민감한 데이터는 Secrets 를 이용하라 (민감하지 않은 데이터는 Configs 를 이용하라)
개발환경과 운영환경의 차이
개발환경 | 운영환경 |
소스코드를 Bind mount 에 저장해서 이용하라 | 소스코드를 Volumes 에 저장해서 이용하라 |
호스트 사이의 시간 오차에 신경 쓸 필요 없다 | 모든 도커 호스트에 NTP 서버를 설정해서 시간을 맞춰 운영하라 |
도커 네트워크 드라이버 요약
도커 네트워크 드라이버 요약
Bridge network | * 1개 호스트에서 여러개의 컨테이너들 사이의 통신이 필요할 때 적절한 선택 |
Host network |
* 컨테이너 네트워크와 호스트 네트워크가 격리될 필요가 없을 때 적절한 선택 * 네트워크 성능 최적화가 필요할 때 적절한 선택 |
Overlay network |
* 여러개 호스트들 사이에서 컨테이너들 사이의 통신이 필요할 때 적절한 선택 * 여러개의 컨테이너들을 Swarm Service 로 묶어서 운영할 때 적절한 선택 |
Macvlan network |
* VM 방식에서 컨테이너 방식으로 이전할 때 고려할 수 있는 선택 * 컨테이너에 고유한 MAC 주소를 할당함 |
3rd party network plugins | * 기타 다양한 네트워크 플러그인 사용 가능함 |
네트워크 성능 최적화가 필요한 Hyperledger Fabric 운영의 경우, Host network 모드 사용을 검토해볼만 함
어플리케이션 데이터 다루기
- 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
(이상)