주:

Oracle Linux에서 Podman과 함께 파일 작성 사용

소개

Podman과 Docker Compose는 특별히 포맷 된 YAML 파일을 입력으로 사용하여 단일 또는 다중 컨테이너를 응용 프로그램으로 조립 한 다음 실행하는 명령줄 도구입니다. 이러한 도구를 통해 개발자는 응용 프로그램에 대한 단일 YAML 파일을 개발, 테스트 및 전달하고 하나의 명령만 사용하여 안정적으로 시작하고 중지할 수 있습니다. 이 휴대성과 신뢰성은 사용자 및 개발자에게 매우 인기가있는 Compose 사양을 사용하여 만들어졌으며 점점 더 요구 사항이되고 있습니다.

목표

이 자습서에서는 다음 내용을 학습합니다.

필요 조건

Oracle Linux 배치

주: 고유 테넌시에서 실행 중인 경우 linux-virt-labs GitHub 프로젝트 README.md를 읽고 실습 환경을 배치하기 전에 필요 조건을 완료하십시오.

  1. 루나 데스크탑에서 터미널을 엽니다.

  2. linux-virt-labs GitHub 프로젝트를 복제합니다.

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. 작업 디렉토리로 변경합니다.

    cd linux-virt-labs/ol
    
  4. 필요한 모음을 설치합니다.

    ansible-galaxy collection install -r requirements.yml
    
  5. lab 환경을 배치합니다.

    ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e update_all=true
    

    무료 실습 환경에는 localhost에서 실행되는 재생에 대해 ansible_python_interpreter를 설정하는 추가 변수 local_python_interpreter이 필요합니다. 이 변수는 환경이 python3.6 모듈 아래에 있는 Oracle Cloud Infrastructure SDK for Python용 RPM 패키지를 설치하기 때문에 필요합니다.

    기본 배치 구성은 AMD CPU 및 Oracle Linux 8을 사용합니다. Intel CPU 또는 Oracle Linux 9를 사용하려면 배치 명령에 -e instance_shape="VM.Standard3.Flex" 또는 -e os_version="9"를 추가합니다.

    중요: 플레이북이 성공적으로 실행될 때까지 기다렸다가 일시 중지 작업에 도달합니다. 플레이북의 이 단계에서 Oracle Linux 설치가 완료되고 인스턴스가 준비됩니다. 이전 플레이에서 배치하는 노드의 공용(public) 및 전용(private) IP 주소와 실습을 실행하는 동안 필요한 기타 배치 정보를 출력합니다.

Podman을 설정하여 파일 작성 작업

Podman은 Podman v3.0.0에 제한된 지원이 도입된 후 Podman v3.2.0에서 Docker Compose 기능에 대한 지원을 도입하여 Podman 내에서 Docker Compose를 사용할 수 있는 기능을 도입했습니다. 최근 Podman v4.1.0은 Docker Compose v2.2 이상 사용을 포함하도록 Docker Compose 기능의 지원을 확대했습니다.

Podman Docker 패키지 설치

Podman이 Docker 명령으로 기본적으로 작동할 수 있도록 해주는 podman-docker 패키지를 설치합니다.

sudo dnf install -y podman-docker

Docker Compose 설치

  1. Compose standalone을 다운로드하여 설치합니다.

    sudo curl -SL https://github.com/docker/compose/releases/download/v2.28.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
    

    출력 예:

      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
      0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
    100 60.1M  100 60.1M    0     0   103M      0 --:--:-- --:--:-- --:--:--  378M
    
  2. 이진에 실행 권한을 적용합니다.

    sudo chmod +x /usr/local/bin/docker-compose
    
  3. 독립형 작업 작성을 확인합니다.

    docker-compose version
    

    출력은 docker-compose의 현재 버전을 반환합니다.

    주: 여기에 설명된 대로 독립형 방식으로 작성 설치를 수행하려면 Docker 유틸리티를 실행할 때 사용되는 표준 docker-compose up 구문 대신 docker-compose up를 사용해야 합니다.

Podman Socket 시작

Podman과 Docker Compose는 각각이 systemd 제어 프로세스를 통해 각 프로그램의 시스템 호출이 Podman과 통신 할 수 있도록 Podman 소켓을 시작해야합니다.

  1. Podman 소켓을 구성합니다.

    systemctl --user enable --now podman.socket
    systemctl --user status podman.socket
    

    출력은 systemd 소켓 active (listening)를 보여줍니다.

  2. 사용자의 Podman 소켓 위치에 대한 위치를 가져옵니다.

    podman info | grep -i remotesocket -A2
    
  3. 소켓이 cURL을 사용하여 작동하는지 확인합니다.

    curl -w "\n" -H "Content-Type: application/json" --unix-socket /run/user/$UID/podman/podman.sock http://localhost/_ping
    

    --unix-socket에 대한 경로는 podman info에서 제공된 경로와 일치합니다. 이 명령의 출력은 OK를 반환해야 합니다. 이는 docker-compose.yaml 파일을 사용할 준비가 된 Compose 기능의 성공적인 구성을 나타냅니다.

Podman Compose 설치

Podman Compose는 Podman과 함께 실행되도록 Compose Specification을 구현하는 Python 3 라이브러리입니다.

  1. developer_EPEL 저장소를 설치하고 사용으로 설정합니다.

    Oracle Linux 8:

    sudo dnf install -y oracle-epel-release-el8
    sudo dnf config-manager --enable ol8_developer_EPEL
    

    Oracle Linux 9:

    sudo dnf install -y oracle-epel-release-el9
    sudo dnf config-manager --enable ol9_developer_EPEL
    

    Oracle Linux 10:

    sudo dnf install -y oracle-epel-release-el10
    sudo dnf config-manager --enable ol10_u0_developer_EPEL
    
  2. Podman Compose 패키지를 설치합니다.

    sudo dnf install -y podman-compose 
    
  3. 해당 버전을 표시하여 Podman Compose 작업을 확인합니다.

    podman-compose version
    

작성 파일 작성

이 작성 파일을 사용하면 지정된 응용 프로그램을 가져오고 시작할 수 있습니다.

  1. 테스트를 위한 디렉토리를 만들고 해당 디렉토리로 변경합니다 .

    mkdir -p projects/echo
    cd projects/echo
    
  2. Compose 파일을 만듭니다.

    cat >> compose.yaml << EOF
    services:
      web:
        image: k8s.gcr.io/echoserver:1.4
        ports:
          - "${HOST_PORT:-8080}:8080"
    EOF
    
    
  3. Compose 파일을 검토합니다.

    cat compose.yaml
    

Podman Compose 실행

  1. Compose 파일과 동일한 디렉토리로 변경합니다.

    중요: compose.yaml 파일과 동일한 디렉토리에 있지 않으면 podman-compose 명령이 작동하지 않습니다.

    cd ~/projects/echo/
    
  2. echoserver 응용 프로그램을 시작합니다.

    podman-compose up -d
    

    출력은 Podman이 컨테이너를 풀다운하고 Compose 파일에 나열된 매개 변수로 시작하는 것을 보여줍니다. -d 옵션은 Podman이 분리 모드에서 백그라운드로 컨테이너를 실행하도록 지시합니다. Podman은 로컬에 없는 경우에만 Compose 파일에서 참조된 이미지를 가져옵니다.

  3. echoserver 응용 프로그램이 작동되어 실행 중인지 테스트합니다.

    curl -X POST -d "foobar" http://localhost:8080/; echo
    

    출력 예:

    CLIENT VALUES:
    client_address=10.89.0.2
    command=POST
    real path=/
    query=nil
    request_version=1.1
    request_uri=http://localhost:8080/
    
    SERVER VALUES:
    server_version=nginx: 1.10.0 - lua: 10001
    
    HEADERS RECEIVED:
    accept=*/*
    content-length=6
    content-type=application/x-www-form-urlencoded
    host=localhost:8080
    user-agent=curl/7.61.1
    BODY:
    foobar
    
  4. 또한 로그를 검토하여 성공을 확인합니다.

    podman-compose logs
    

    출력 예:

    podman 버전을 사용하는 ``텍스트 ['podman', '–version', '']: 4.2.0 podman 로그 echo_web_1 10.89.0.2 - - [17/Jan/2023:12:46:47 +0000] "POST / HTTP/1.1" 200 446 "-" "curl/7.61.1" 종료 코드: 0

  5. Podman Compose 유틸리티를 사용하여 실행 중인 컨테이너를 확인합니다.

    podman-compose ps
    

    출력 예:

    ['podman', '--version', '']
    using podman version: 4.2.0
    podman ps -a --filter label=io.podman.compose.project=echo
    CONTAINER ID  IMAGE                      COMMAND               CREATED        STATUS            PORTS                   NAMES
    f4053947c8c1  k8s.gcr.io/echoserver:1.4  nginx -g daemon o...  2 minutes ago  Up 2 minutes ago  0.0.0.0:8080->8080/tcp  echo_web_1
    exit code: 0
    

    podman-compose --help를 실행하여 다른 Podman Compose 유틸리티 명령을 볼 수 있습니다.

  6. 이제 echoserver 컨테이너를 중지해야 합니다.

    podman-compose down
    
  7. 컨테이너 배치 중 생성된 추가 Podman 브리지 네트워크를 제거합니다.

    podman network rm echo_default
    

Docker 작성이 작동 중인지 확인

  1. Podman 소켓의 위치에 대한 환경 변수를 설정합니다.

    export DOCKER_HOST=unix:///run/user/$UID/podman/podman.sock
    
  2. echoserver 응용 프로그램을 시작합니다.

    이 명령은 작성 파일과 동일한 디렉토리 내에서 실행해야 합니다.

    docker-compose up -d
    

    출력은 echo_default 네트워크 및 echo-web-1 컨테이너의 만들기를 보여줍니다.

  3. 컨테이너의 애플리케이션에 액세스합니다.

    curl -X POST -d "foobar" http://localhost:8080/; echo
    

    출력 예:

    [oracle@ol-server ~]$ curl -X POST -d "foobar" http://localhost:8080/; echo
    CLIENT VALUES:
    client_address=10.89.0.2
    command=POST
    real path=/
    query=nil
    request_version=1.1
    request_uri=http://localhost:8080/
    
    SERVER VALUES:
    server_version=nginx: 1.10.0 - lua: 10001
    
    HEADERS RECEIVED:
    accept=*/*
    content-length=6
    content-type=application/x-www-form-urlencoded
    host=localhost:8080
    user-agent=curl/7.61.1
    BODY:
    foobar
    
  4. 로그를 검사하여 이 응용 프로그램이 반환 요청을 성공적으로 제출했는지 확인합니다.

    docker-compose logs
    

    출력 예:

    ``텍스트 에코-웹-1 | 10.89.0.1 - - [17/Jan/2023:14:48:56 +0000] "POST / HTTP/1.1" 200 446 "-" "curl/7.61.1"

  5. Docker Compose 유틸리티를 사용하여 시작한 컨테이너 목록을 가져옵니다.

    docker-compose ps
    

    출력 예:

    echo-web-1        k8s.gcr.io/echoserver:1.4   "nginx -g daemon off;"   web             12 minutes ago      Up 12 minutes       8080/tcp
    
  6. echoserver 응용 프로그램을 중지합니다.

    docker-compose down
    

중요 정보

동일한 시스템에 podman-compose docker-compose 실행 파일을 둘 다 설치하는 경우 상호 교환 가능한 방식으로 호출할 수 없습니다. 이 명령문의 의미는 podman-compose를 사용하여 프로세스를 시작하는 경우 docker-compose를 사용하여 프로세스를 질의하거나 정지할 수 없다는 것입니다.

  1. Podman Compose를 사용하여 시작합니다.

    podman-compose up -d
    
  2. Docker Compose를 사용하여 실행 중인 컨테이너를 나열해 보십시오.

    docker-compose ps
    

    출력은 결과적으로 실행 중인 컨테이너가 없음을 보여주는 빈 목록을 반환합니다.

  3. 그러나 Podman Compose를 사용하면 컨테이너가 실행 중인지 확인할 수 있습니다.

    podman-compose ps
    

    출력 예:

    ['podman', '--version', '']
    using podman version: 4.2.0
    podman ps -a --filter label=io.podman.compose.project=echo
    CONTAINER ID  IMAGE                      COMMAND               CREATED        STATUS            PORTS                   NAMES
    55335e797296  k8s.gcr.io/echoserver:1.4  nginx -g daemon o...  4 minutes ago  Up 4 minutes ago  0.0.0.0:8080->8080/tcp  echo_web_1
    exit code: 0
    

다음 단계

이것은 podman-compose 또는 docker-compose를 사용하여 Podman과 함께 Compose 파일을 사용하는 방법을 확인합니다.

추가 학습 자원

docs.oracle.com/learn에서 다른 랩을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer가 되십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.