컨테이너 기초 (podman)
6. 연습 문제
문제 1. 실행 옵션
myapp:2.0 이미지를 호스트 9090 포트로, 로그는 /var/log/myapp 에, 힙 1GB 로 백그라운드 실행하는 명령을 쓰세요.
podman run -d --name myapp -p 9090:8080 -v /var/log/myapp:/opt/myapp/logs:Z -e JAVA_OPTS='-Xmx1g' myapp:2.0-p 는 호스트:컨테이너 순서입니다. 컨테이너 안 포트는 이미지가 정한 8080 그대로입니다.
문제 2. 신호 전달
ENTRYPOINT ["sh", "-c", "java -jar app.jar"] 의 문제와 고친 형태를 쓰세요.
셸이 PID 1 이라 podman stop 의 TERM 이 자바에 전달되지 않고 10초 뒤 KILL 됩니다. exec java -jar app.jar 로 바꾸거나 ENTRYPOINT ["java", "-jar", "app.jar"] 로 자바를 직접 부릅니다.
문제 3. 반입
PC 에서 만든 myapp:1.0 을 폐쇄망 서버에 옮겨 등록하는 명령을 순서대로 쓰세요.
podman save -o myapp-1.0.tar myapp:1.0
sha256sum myapp-1.0.tar > myapp-1.0.tar.sha256
# 매체 이동 후 서버에서
sha256sum -c myapp-1.0.tar.sha256 && podman load -i myapp-1.0.tar체크섬 확인이 통과해야 load 하도록 && 로 이었습니다.
문제 4. quadlet 키
podman run -p 8080:8080 -v /opt/data:/data:Z -e TZ=Asia/Seoul 을 quadlet [Container] 절로 바꾸세요.
[Container]
Image=localhost/myapp:1.0
PublishPort=8080:8080
Volume=/opt/data:/data:Z
Environment=TZ=Asia/Seoul옵션 이름이 키 이름으로 바뀌고 값은 그대로입니다.
문제 5. 컨테이너 진단
실행 중인 myapp 컨테이너의 자바 스레드 덤프를 호스트 파일 td.txt 로 저장하는 명령을 쓰세요.
podman exec myapp jstack 1 > td.txt자바가 PID 1 입니다. exec 의 출력이 호스트 표준 출력으로 오므로 리다이렉션은 호스트 쪽에 씁니다.