# Docker 이미지 가볍고 안전하게 만들기

> Clean Markdown view of GeekNews topic #11613. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=11613](https://news.hada.io/topic?id=11613)
- GeekNews Markdown: [https://news.hada.io/topic/11613.md](https://news.hada.io/topic/11613.md)
- Type: news
- Author: [ironlung](https://news.hada.io/@ironlung)
- Published: 2023-10-31T11:57:48+09:00
- Updated: 2023-10-31T11:57:48+09:00
- Original source: [insight.infograb.net](https://insight.infograb.net/blog/2022/12/22/docker-security)
- Points: 30
- Comments: 0

## Topic Body

- 애플리케이션을 Docker 이미지로 만들고 배포하다보면 무거운 이미지를 베이스 이미지로 사용해 한 번 다운로드 받는 데 시간이 오래 걸리거나 민감한 데이터를 포함해 보안상 문제 생길 수 있음  
- Docker 이미지를 더 가볍고 안전하게 만드는 방법  
- 이미지 크기 줄이기  
    - Docker 이미지가 가벼워질수록 애플리케이션 빌드, 배포 속도가 빨라짐  
    - 이러면 더 자주, 많이 배포할 수 있어 개발자 생산성 높아짐  
    - 방법  
        - 멀티 스테이징 기법: 스테이지를 여러 개 만들고, 각각 따로 빌드해 가장 가벼운 이미지에 결과 통합하는 방식  
        - RUN 명령 최대한 적게 쓰는 방법: RUN 명령은 개별 이미지를 만듦. 이를 최소한으로 만들기 위해 RUN 명령 한 번에 최대한 많은 스크립트 실행함  
    - .dockerignore로 불필요한 소스 코드 없애기  
        - README.md나 테스트 코드는 실제 애플리케이션을 빌드할 때 불필요함  
        - API 인증 토큰 같이 민감한 정보가 포함된 .env 파일, .pem 프라이빗 키 파일, Git 커밋 이력이 포함된 .git 디렉터리는 Docker 이미지에 포함되면 안됨  
        - 이런 파일을 Docker 이미지에 포함시키지 않도록 .dockerignore 파일 만듦  
- 안전한 이미지 만들기  
    - Docker 이미지가 루트 권한 있으면 해킹 당할 때 위험할 수 있음  
    - 방법  
        - 정확한 이미지 버전 쓰기: 버전을 쓰지 않으면 latest 버전을 자동으로 가져와 상황에 따라 실행되는 게 달라질 수 있음  
        - /etc에 쓰기 권한 없애기: /etc는 시스템 설정 파일과 스크립트가 담긴 디렉터리. 애플리케이션은 보통 수정할 일이 없어 쓰기 권한을 없애는 것이 좋음  
        - 모든 실행 파일 지우기: Go의 경우 실행 파일 하나만 있으면 실행할 수 있어 잠재적 위험이 있는 다른 실행 파일을 모두 지움  
        - 일반 유저로 전환하기: 루트 계정은 시스템의 모든 걸 수정하고 제어할 수 있음. 최소한 권한만 있는 유저 생성해 해당 유저로만 애플리케이션이 실행되도록 함  
- 가벼운 Docker 이미지는 CI/CD 파이프라인과 애자일 방법론이 만날 때 시너지 보임  
- 안전한 Docker 이미지로 비즈니스 보호하고, 위험 사전 예방할 수 있음

## Comments



_No public comments on this page._
