컨테이너 기초 (podman)
5. 자주 하는 실수 (Tip)
❌ 실수 1: 셸이 PID 1 이라 TERM 이 자바에 안 간다
podman stop 이 10초 뒤 KILL 로 끝나 완전 종료가 안 됩니다. ✅ ENTRYPOINT 에 exec java 를 쓰거나 JSON 배열 형식으로 java 를 직접 부릅니다.
❌ 실수 2: 볼륨에 :Z 를 빼먹는다
SELinux 가 막아 로그를 못 씁니다. ✅ 호스트 폴더 볼륨에는 :Z 를 붙입니다. 여러 컨테이너가 공유하면 :z 입니다.
❌ 실수 3: latest 태그만 쓴다
어느 버전이 도는지 모르고 롤백할 이미지가 없습니다. ✅ 버전 태그로 빌드하고 latest 는 별칭으로만 둡니다.
❌ 실수 4: 메모리 한도 없이 띄운다
JVM 이 호스트 전체를 기준으로 힙을 잡아 다른 컨테이너까지 흔들립니다. ✅ --memory 와 MaxRAMPercentage 를 함께 줍니다.
❌ 실수 5: 컨테이너 안에 데이터를 둔다
podman rm 과 함께 사라집니다. ✅ 로그·업로드·DB 데이터는 볼륨으로 뺍니다.
❌ 실수 6: podman run 으로 띄우고 재부팅 후 없다고 한다
--restart 는 podman 이 살아 있을 때만 동작합니다. ✅ 운영은 quadlet 로 systemd 에 등록합니다.
❌ 실수 7: 이미지 안에서 root 로 실행한다
컨테이너 탈출 취약점이 있으면 호스트 root 가 됩니다. ✅ USER 로 일반 사용자를 지정하고 rootless 로 띄웁니다.
❌ 실수 8: 폐쇄망에서 podman pull 이 안 된다고 멈춘다
레지스트리에 못 닿는 것이 당연합니다. ✅ save·load 로 파일 반입하거나 사내 레지스트리를 /etc/containers/registries.conf 에 등록합니다.
❌ 실수 9: podman stop 시간을 기본 10초로 둔다
Spring 완전 종료가 끝나기 전에 KILL 됩니다. ✅ -t 30 이나 quadlet 의 TimeoutStopSec 을 앱 종료 시간보다 길게 둡니다.
❌ 실수 10: 옛 이미지를 안 지운다
빌드마다 수백 MB 가 쌓여 디스크가 찹니다. ✅ podman image prune, podman system df 를 디스크 점검에 넣습니다.