type=cache 를 지정하게 되면, 어플리케이션을 빌드할 때 이전 파일들을 재사용하여 빌드 속도를 한층 빠르게 만들 수 있음
🔄 Inner-Loop Developer Workflow
Docker Init
Docker Desktop 4.18 버전 이후로 사용 가능
위에서 말한 유용한 기능들을 꽤나 잘 만들어 줌
Docker Init 사용 모습
Docker Init을 통해 생성된 Dockerfile
Compose Watch
Docker Compose에 추가된 옵션
Sync, Rebuild, Sync + Restart
Compose Watch 사용 모습
Rebuild : 도커 이미지 리빌딩
Sync : 싱크를 맞춰줌
명령어 : docker compose up --watch
Compose Watch를 통한 리빌딩
Compose Watch를 통한 동기화 및 재실행
옵션을 sync만 하면 서버가 재실행되지 않기에 반영이 되지 않음
때문에 sync+restart를 통해 동기화 후 재실행하면 반영이 됨
Compose Profile
PhpMyAdmin은 로컬에서만 사용하고 싶음
그런데 로컬에서만 필요한 컨테이너를 모든 compose 파일에 작성하는 경우 불필요한 설정이 될 수 있음
profile 옵션 활용 모습
명령어 : docker compose --profile dev up
위처럼 하면 profile 옵션에 dev를 지정한 서비스들만 컨테이너 생성 및 실행함
profile 컨테이너
🚀 실제 적용
기존 Dockerfile 및 용량
Dockerfile
FROM openjdk:17COPY ./build/libs/onetime-0.0.1-SNAPSHOT.jar app.jarENTRYPOINT ["java", "-jar", "app.jar"]
용량
522 MB
Docker Init 사용
docker init
이미 있으므로 overwrite
.dockerignore 생성
# Include any files or directories that you don't want to be copied to your
# container here (e.g., local build artifacts, temporary files, etc.).
#
# For more help, visit the .dockerignore file reference guide at
# https://docs.docker.com/engine/reference/builder/#dockerignore-file
**/.DS_Store
**/__pycache__
**/.venv
**/.classpath
**/.dockerignore
**/.env
**/.git
**/.gitignore
**/.project
**/.settings
**/.toolstarget
**/.vs
**/.vscode
**/*.*proj.user
**/*.dbmdl
**/*.jfm
**/bin
**/charts
**/docker-compose*
**/compose*
**/Dockerfile*
**/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
LICENSE
README.md
docker init을 통해 생성됨
Dockerfile은 Java를 잘 지원해주는 것 같지는 않아, 수동으로 변경하기로 결정함
수정된 Dockerfile
# Alpine & Slim 이미지 사용 (용량 및 보안 개선)# 버전 명시 (latest 지양)# 최종 이미지의 경량화를 위해 Multi-Stage 빌드 사용FROM openjdk:17-jdk-slim as buildWORKDIR /appCOPY ./build/libs/onetime-0.0.1-SNAPSHOT.jar app.jar# 최종 이미지: 경량화된 Alpine 이미지를 사용하여 빌드된 파일을 실행FROM openjdk:17-jdk-alpine as finalWORKDIR /appCOPY --from=build /app/app.jar app.jar# HEALTHCHECK 추가# 컨테이너가 시작된 후 5초마다, 최대 3초 동안 http://localhost:8090으로 헬스 체크HEALTHCHECK --interval=5s --timeout=3s --start-period=30s --retries=3 \ CMD curl --fail http://localhost:8090 || exit 1ENTRYPOINT ["java", "-jar", "app.jar"]EXPOSE 8090
mount를 제외한 모든 옵션을 활용하여 수정함
그 결과 아래와 같이 522 MB → 376 MB 로 이미지 용량이 축소됨
💡 느낀 점
이전에는 그저 도커 이미지를 만들어주는 용도인 줄 알았던 도커파일에, 이렇게나 많은 옵션을 붙일 수 있다라는 것을 처음 알게 되었다. 또한 이를 활용하여 이미지 용량을 줄일 수 있을 뿐만 아니라, 보안성도 높일 수 있다라는 점이 놀라웠다.
그동안 도커를 꽤나 사용해보았지만, 잘 알지 못 하고 기본적인 기능만 사용했구나라는 것을 깨닫게 된 순간이었다. 실질적으로 바로 적용해볼 수 있는 팁들이 많이 있어서 흥미로웠고, 적용 후 성과가 나타나니 뿌듯했다.
도커의 도움을 많이 받고 있는 입장에서, 해당 기술에 대해 더욱 관심을 가지고 제대로 공부해보아야겠다는 생각이 들었다!