Podman 과 Skopeo 를 활용한 컨테이너 관리

Red Hat Enterprise LinuxBeginner
지금 연습하기

소개

Red Hat Enterprise Linux(RHEL) 를 다루는 시스템 관리자에게 컨테이너화된 애플리케이션을 관리하는 능력은 필수적인 기술입니다. 이 챌린지에서는 podmanskopeo 명령줄 도구를 사용하여 핵심적인 컨테이너 관리 작업을 수행합니다. 공용 레지스트리에서 이미지를 가져오고, 이를 컨테이너로 실행하며, 설정을 검사하고, 이미지를 로컬 레지스트리로 복사하는 과정을 실습하게 됩니다.

컨테이너 이미지 풀 및 실행

첫 번째 작업은 공용 레지스트리에서 컨테이너 이미지를 다운로드하여 로컬 시스템에서 실행하는 것입니다. 컨테이너의 기능을 확인하기 위해 널리 사용되는 nginx 웹 서버 이미지를 사용합니다.

작업 내용

  • podman 명령어를 사용하여 docker.io 레지스트리에서 최신 nginx 컨테이너 이미지를 가져옵니다.
  • nginx 이미지로 컨테이너를 실행하고 정상적으로 작동하는지 확인합니다.

요구 사항

  • 컨테이너 이름은 my-nginx로 지정해야 합니다.
  • 컨테이너는 백그라운드 모드 (데몬 모드) 로 실행되어야 합니다.
  • 컨테이너의 80번 포트를 로컬 머신의 8080번 포트와 연결 (매핑) 해야 합니다.

예시

컨테이너를 성공적으로 실행한 후 접속 테스트를 진행할 수 있습니다. curl 명령어를 실행하면 기본 Nginx 환영 페이지가 반환되어야 합니다.

$ curl http://localhost:8080

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
</html>
✨ 솔루션 확인 및 연습

컨테이너 검사

컨테이너를 실행한 후에는 구성 정보, 네트워크 설정, 마운트된 볼륨 등 상세 정보를 확인해야 할 때가 많습니다. podman inspect 명령어는 이러한 정보를 구조화된 JSON 형식으로 제공합니다.

작업 내용

  • 실행 중인 my-nginx 컨테이너의 상세 정보를 검사합니다.
  • 검사 결과 출력을 파일로 저장합니다.

요구 사항

  • podman inspect 명령어를 사용하여 my-nginx 컨테이너의 세부 정보를 가져옵니다.
  • JSON 출력 결과를 ~/project/containers/ 디렉토리 안에 nginx-inspect.json이라는 이름의 파일로 저장합니다.

예시

nginx-inspect.json 파일에는 컨테이너의 모든 설정 세부 정보가 포함된 대규모 JSON 배열이 담기게 됩니다. cat 또는 less 명령어로 내용을 확인할 수 있습니다.

$ cat ~/project/containers/nginx-inspect.json
[
    {
        "Id": "a933dd...c8e",
        "Created": "2023-10-27T10:30:00.123456789Z",
        "Path": "/docker-entrypoint.sh",
        "Args": [
            "nginx",
            "-g",
            "daemon off;"
        ],
        "State": {
...
✨ 솔루션 확인 및 연습

Skopeo 를 이용한 컨테이너 이미지 복사

skopeo는 공용 레지스트리, 로컬 저장소, 사설 레지스트리 등 서로 다른 저장소 간에 컨테이너 이미지를 이동시키는 강력한 도구입니다. 이번 단계에서는 nginx 이미지를 현재 머신에서 실행 중인 로컬 컨테이너 레지스트리로 복사합니다.

기본적으로 Podman 과 Skopeo 는 보안되지 않은 (HTTP) 레지스트리로 이미지를 푸시하지 않습니다. 따라서 먼저 최신 v2 레지스트리 설정 형식을 사용하여 시스템이 로컬 레지스트리를 신뢰하도록 설정해야 합니다.

작업 내용

  • localhost:5000에 위치한 보안되지 않은 로컬 레지스트리로 이미지를 푸시할 수 있도록 시스템을 설정합니다.
  • skopeo를 사용하여 docker.ionginx:latest 이미지를 로컬 레지스트리로 복사합니다.
  • 로컬 레지스트리에서 Podman 의 로컬 저장소로 이미지를 다시 가져와 복사가 성공했는지 확인합니다.

요구 사항

  • /etc/containers/registries.conf 파일을 수정하여 localhost:5000을 v2 형식의 보안되지 않은 레지스트리 (insecure registry) 로 등록합니다. 이 작업에는 sudo 권한이 필요합니다.
  • skopeo copy 명령어를 사용하여 docker.io/library/nginx:latest 이미지를 복사합니다.
  • 로컬 레지스트리 내의 대상 이미지 경로는 localhost:5000/my-local-nginx:latest여야 합니다.
  • 복사 완료 후, podman pull을 사용하여 localhost:5000/my-local-nginx:latest 이미지를 가져옵니다.
✨ 솔루션 확인 및 연습

요약

이 챌린지를 통해 Red Hat Enterprise Linux 시스템에서 컨테이너를 관리하는 데 필요한 핵심 기술을 습득했습니다. podman을 사용하여 이미지를 가져오고, 포트 매핑을 포함한 이름이 지정된 컨테이너를 실행하며, 상세 설정을 검사하는 과정을 성공적으로 마쳤습니다. 또한 보안되지 않은 레지스트리를 설정하고 skopeo를 사용하여 공용 소스에서 사설 로컬 레지스트리로 이미지를 복사하는 실무적인 작업도 실습했습니다. 이러한 명령어들은 현대적인 컨테이너 환경에서 작업하는 시스템 관리자에게 가장 기본이 되는 도구들입니다.