Container/Docker

도커 운영 및 관리를 위한 고급 스킬

2mukee 2024. 11. 30. 18:09
320x100
320x100

Dockerfile 최적화
- Muti Stage Build
최종 이미지를 최소화하고 불필요한 파일이나 의존성을 제거

- 이미지 캐싱 이해
레이어 캐싱을 활용하여 빌드 시간을 단축
레이어 캐시는 이미지를 pull 받거나 빌드했을때 이미지 파일과 별도로 도커 캐시로 저장됨 (docker/overlay2)
레이어 캐시가 너무 쌓이면 용량을 많이 차지하므로 docker builder prune 명령 혹은 docker system prune 명령으로 제거 가능

- 경량 베이스 이미지 사용
alpine 등의 경량 이미지를 활용하여 이미지 크기 경량화
알파인 리눅스의 패키지 관리자인 apk 명령 사용을 알면 좋다




Docker Compose 고급 사용 (docker-compose.yml)
- 프로덕션 환경 설정
override 파일이나 환경변수 파일(.env)을 사용해 환경별 설정 관리

- 의존성 관리
depends_on 지시자를 활용하여 서비스 간 의존성을 설정

- 헬스체크
healthcheck 지시자를 활용하여 서비스의 헬스체크

- 시크릿 및 설정 관리
secrets와 configs 지시자를 활용하여 암호화 키 등 민감한 정보 숨김





네트워킹 심화
- 사용자 정의 네트워크
브릿지, 오버레이, 호스트 네트워크 모드의 차이 이해 및 활용

- DNS 라우팅
서비스 이름을 통한 컨테이너 간 통신

- 포트 관리
컨테이너 간 충돌 없는 포트 매핑 설계





스토리지 관리
- 볼륨과 바인드 마운트 차이 이해
적절한 스토리지 옵션 선택

- 데이터 백업 및 복원
볼륨 데이터를 주기적으로 백업하는 전략

- persistent data (영구적 데이터) 관리
NFS 또는 클라우드 기반 스토리지를 활용





보안 강화
- 최소 권한 원칙
컨테이너 실행 시 필요한 최소한의 권한부여 (--user, --read-only 등)

- 서드파티 이미지 검증
신뢰할 수 있는 레지스트리에서 이미지를 가져오고 서명을 검증

- 시크릿 관리
Docker secret 이나 Vault같은 외부 솔루션 통합

- 네임스페이스 및 cgroup 제한
컨테이너의 리소스와 네트워크 액세스 제한






로깅 및 모니터링
- 로깅 드라이버 설정
json-file, syslog, fluentd 등 적합한 로깅 드라이버 선택

- 모니터링 도구 활용
프로메테우스, 그라파나 등을 통한 컨테이너 상태 모니터링

- 로그 분석
중앙 집중화 된 로그 관리 시스템 통합 (Logstash, Elastic Search 등)






Docker Swarm & Kubernetes 통합
클러스터 구성과 확장. 모듈 간 기술스택을 통합하여 관리 효율화




트러블 슈팅 및 성능 최적화
- 컨테이너 상태 확인
docker inspect <컨테이너> (상세 정보 및 상태 확인)
docker logs <컨테이너> (로그 확인)
docker stats <컨테이너> (리소스 사용량 확인)
docker top <컨테이너> (실행중인 프로세스 확인)

- 리소스 제한
CPU, 메모리 사용량을 제한하여 컨테이너 간 리소스 경쟁 방지

- 빌드 및 런타임 문제 해결
docker build 시 --no-cache 옵션 사용





CI/CD 연계
Docker 기반 파이프라인을 활용한 자동화 빌드 및 배포
Docker Hub, AWS ECR, Google Artifact Registry 등을 활용한 효율적인 이미지 관리





클라우드 및 하이브리드 환경 지원
- 클라우드 네이티브 통합
AWS ECS/Fargate, Google Cloud Run, Azure Container Instances와 같은 서비스 활용

- 멀티 호스트 네트워크
Docker Swarm, Calico, Weave같은 네트워킹 솔루션 사용

- 하이브리드 클러스터
온프레미스와 클라우드 환경에서의 Docker 클러스터 관리






300x250
728x90