홈 › 리눅스 운영 › 11 / 13

컨테이너 기초 (podman)

섹션 7진행 0 / 13

3. 코드 예제

예제 1: Containerfile 전체

text
FROM registry.access.redhat.com/ubi9/openjdk-21-runtime:latest
USER 0
RUN mkdir -p /opt/myapp/logs && chown -R 185:0 /opt/myapp
USER 185
WORKDIR /opt/myapp
COPY app.jar /opt/myapp/app.jar
ENV JAVA_OPTS="-Xms256m -Xmx512m -Duser.timezone=Asia/Seoul"
EXPOSE 8080
ENTRYPOINT ["sh", "-c", "exec java $JAVA_OPTS -jar /opt/myapp/app.jar"]

잠시 root(0) 로 폴더를 만들고 다시 기본 사용자 185 로 돌아옵니다. 이미지 안 프로세스가 root 가 아니어야 10 레슨의 최소 권한 원칙이 컨테이너에서도 지켜집니다.

예제 2: 빌드·실행·확인 — podman_demo.sh 발췌

bash
podman build -t myapp:1.0 -f Containerfile .
podman run -d --name myapp -p 8080:8080 -v /opt/myapp/logs:/opt/myapp/logs:Z --restart=on-failure myapp:1.0
podman ps
podman logs --tail 5 myapp
curl -s localhost:8080/actuator/health
text
STEP 1/9: FROM registry.access.redhat.com/ubi9/openjdk-21-runtime:latest
...
Successfully tagged localhost/myapp:1.0
CONTAINER ID  IMAGE                COMMAND  STATUS         PORTS                   NAMES
3f2a9c1b7d21  localhost/myapp:1.0           Up 5 seconds   0.0.0.0:8080->8080/tcp  myapp
... Started OrderApp in 3.4 seconds
{"status":"UP"}

리눅스 서버 출력 예시입니다. 스크립트는 podman 이 없으면 [dry] 접두어로 명령만 출력합니다.

예제 3: quadlet 등록 — podman_demo.sh 발췌

bash
sudo cp myapp.container /etc/containers/systemd/
sudo systemctl daemon-reload
sudo systemctl enable --now myapp
systemctl status myapp --no-pager | head -n 5
text
● myapp.service - MyApp container
     Loaded: loaded (/etc/containers/systemd/myapp.container; generated)
     Active: active (running) since Fri 2026-09-11 09:10:02 KST; 3s ago
   Main PID: 4521 (conmon)

generated 가 quadlet 이 유닛을 만들었다는 표시입니다. 이후 재부팅·재시작·로그가 모두 systemctl 로 됩니다.

예제 4: 반입 절차 — podman_demo.sh 발췌

bash
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
podman images myapp
text
myapp-1.0.tar: OK
Loaded image: localhost/myapp:1.0
REPOSITORY       TAG   IMAGE ID      CREATED        SIZE
localhost/myapp  1.0   8a1f3e2c9b04  5 minutes ago  420 MB

운영 묶음 04 의 jar 반입 절차에서 파일이 이미지 tar 로 바뀐 것뿐입니다.