Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Uptime Check
- Clean Code
- MIG
- Java
- vm
- gcp
- pub/sub
- Python
- interconnect
- cloud function
- IAM
- cicd
- devops
- docker
- VAGRANT
- vpc peering
- Terraform Cloud
- direnv
- pro
- terraform
- 우테캠
- CentOS
- github
- cloud
- ECR
- k8s
- AWS
- IAP
- snat
- kubernetes
Archives
- Today
- Total
EMD Blog
Dockerfile 모범사례 본문
빌드 시간 단축하기
- 캐싱을 활용해 불필요한 빌드과정 제거
- 캐싱에는 순서가 중요
- 특정 스텝에서 변화가 발생하면 이후 스텝들은 새로 빌드됨
- 가장 변하지 않는 스텝을 상위로 자주 변하는 스텝은 하위로
- 구체적인 COPY
- COPY . 이런 식으로 하면 어떤 코드가 변경되더라도 새로 빌드됨
- 캐시할 수 있는 단위 구별
- 예를 들어 패키지 update와 install을 다른 캐시 단위로 묶으면 예전 버전의 패키지를 다운 받게 될수도 있음
이미지 크기 줄이기
- 작은 이미지는 배포가 빨라지고 공격 취약점이 작아짐
- 불필요한 의존성 제거
- 불필요한 의존성제거 & 디버깅 툴 제거
- apt의 경우 no-install-recommends 커맨드로 추천 패키지 설치를 막을 수 있음
- 패키지 매니저 캐시 제거
- 패키지를 설치한 RUN 스텝 안에서 캐시 제거
유지보수성
- 가능하면 공식 이미지 사용
- 모든 설치 과정들이 완료되어 있음
- best practice가 적용되어 있음
- 여러 프로젝트에서 같은 base 이미지 사용시 layer 공유 가능
- 더 구체적인 태그 사용
- latest 태그 사용하지 말 것 → 시간에 따라 급격한 변화 발생
- 가장 작은 이미지 사용
- slim 태그 이미지는 striped down Debian 기초
- alpine 태그 이미지는 더 작은 알파인 리눅스 기반
재현성
- 일관된 환경에서 소스 코드 빌드
- 소스코드를 COPY해서 Container에서 빌드
- Fetch dependencies in a separate step
- 캐시 가능한 실행 단위를 나눠 매 코드 변경시마다 의존성을 fetch하지 않도록 해야함
- 빌드 의존성을 제거하기 위해 다단계 빌드(Multi-stage build) 사용
- 여러 FROM 구문을 사용해 다단계 빌드
- 빌드 시점에서 의존성 제거 가능
'Docker' 카테고리의 다른 글
Docker Python slim Image 사용시 mysql_config: not found 이슈 (0) | 2022.09.06 |
---|---|
Docker bridge 대역 충돌 (0) | 2022.09.04 |