- 애플리케이션을 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 이미지로 비즈니스 보호하고, 위험 사전 예방할 수 있음