참고:

Podman으로 파일 작성 사용

소개

Docker Compose는 특수 형식의 YAML 파일을 입력으로 사용하여 단일 또는 다중 컨테이너를 애플리케이션으로 어셈블한 다음 실행하는 명령행 툴입니다. 이를 통해 개발자는 응용 프로그램을 위한 단일 YAML 파일을 개발, 테스트 및 유저에게 전달할 수 있으며, 단 하나의 명령만 사용하여 안정적으로 시작 및 정지할 수 있습니다. 이러한 이식성과 안정성으로 인해 Docker Compose는 사용자와 개발자 모두에게 매우 인기가 있을 뿐만 아니라 점점 더 많은 요구사항을 충족할 수 있게 되었습니다.

목표

이 실습에서는 Podman과 함께 podman-composedocker-compose를 모두 설치하고 사용하는 방법을 보여주고 간단한 docker-compose.yaml 파일로 작동하는지 확인합니다.

필요 조건

Oracle Support 면책

Oracle은 Oracle에서 제공하지 않는 소프트웨어 프로그램 및 운영 체제를 참조하기 때문에 다음 지침에 제공된 일련의 단계에 대한 기술 지원을 제공하지 않습니다. 이 자습서는 편의상 선택적 지침을 제공합니다.

Podman 기반 서비스의 개발 및 사용에 대해 Oracle이 지원하는 방법에 대한 자세한 내용은 https://docs.oracle.com/en/operating-systems/oracle-linux/podman/를 참조하십시오.

실습 환경 설정

주: 무료 실습 환경을 사용하는 경우 연결 및 기타 사용 지침은 Oracle Linux Lab Basics를 참조하십시오.

  1. 터미널을 열고 아직 연결되지 않은 경우 ssh를 통해 ol-server 인스턴스에 연결합니다.

    ssh oracle@<ip_address_of_instance>
    

Podman 작업 확인

Oracle Linux의 컨테이너 도구 패키지는 최신 버전의 Podman, Buildah, Skopeo 및 연관된 종속성을 제공합니다.

  1. Podman의 버전을 확인합니다.

    podman -v
    
  2. Podman CLI가 작동 중인지 확인합니다.

    podman run quay.io/podman/hello
    

    예제 출력:

    [oracle@ol-server ~]$ podman run quay.io/podman/hello
    Trying to pull quay.io/podman/hello:latest...
    Getting image source signatures
    Copying blob f82b04e85914 done  
    Copying config dbd85e09a1 done  
    Writing manifest to image destination
    Storing signatures
    !... Hello Podman World ...!
    
             .--"--.           
           / -     - \         
          / (O)   (O) \        
       ~~~| -=(,Y,)=- |         
        .---. /`  \   |~~      
     ~/  o  o \~~~~.----. ~~   
      | =(X)= |~  / (O (O) \   
       ~~~~~~~  ~| =(Y_)=-  |   
      ~~~~    ~~~|   U      |~~ 
    
    Project:   https://github.com/containers/podman
    Website:   https://podman.io
    Documents: https://docs.podman.io
    Twitter:   @Podman_io
    

파일 작성 작업을 위해 Podman 설정

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

다음 단계에서는 podman-composedocker-compose를 모두 설치 및 구성하는 방법에 대해 설명합니다.

Podman Docker 패키지 설치

이를 통해 Podman은 기본적으로 Docker 명령을 사용할 수 있습니다.

  1. podman-docker 패키지를 설치합니다.

    sudo dnf install -y podman-docker
    

Docker Compose 설치

참고:

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

  1. 독립형 작성 다운로드 및 설치

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

    예제 출력:

    [oracle@ol-server ~]$ sudo curl -SL https://github.com/docker/compose/releases/download/v2.15.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 42.8M  100 42.8M    0     0   158M      0 --:--:-- --:--:-- --:--:--  158M
    
    
  2. 이진에 실행 권한을 적용합니다.

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

    docker-compose version
    

    예제 출력:

    [oracle@ol-server ~]$ docker-compose version
    Docker Compose version v2.15.1
    
    

Podman 소켓 시작

Unix 소켓을 만들어 Docker 작성 기능을 작동하려면 다음 단계가 필요합니다.

  1. 다음 단계로 Podman 소켓을 구성합니다.

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

    예제 출력:

    [oracle@ol-server ~]$ sudo systemctl enable --now podman.socket
    Created symlink /etc/systemd/system/sockets.target.wants/podman.socket -> /usr/lib/systemd/system/podman.socket.
    [oracle@ol-server ~]$ sudo systemctl status podman.socket
    * podman.socket - Podman API Socket
       Loaded: loaded (/usr/lib/systemd/system/podman.socket; enabled; vendor preset)
       Active: active (listening) since Thu 2023-01-19 20:58:20 GMT; 16s ago
         Docs: man:podman-system-service(1)
       Listen: /run/podman/podman.sock (Stream)
       CGroup: /system.slice/podman.socket
    
    Jan 19 20:58:20 ol-server systemd[1]: Listening on Podman API Socket.
    
  2. curl을 사용하여 소켓이 예상대로 작동하는지 확인합니다.

sudo curl -w "\n" -H "Content-Type: application/json" --unix-socket /var/run/docker.sock http://localhost/_ping

예제 출력:

[oracle@ol-server ~]$ sudo curl -w "\n" -H "Content-Type: application/json" --unix-socket /var/run/docker.sock http://localhost/_ping
OK
[oracle@ol-server ~]$

이 명령의 출력에서 OK를 반환하면 작성 기능이 docker-compose.yaml 파일에서 작동하도록 성공적으로 구성됩니다.

Podman 구성 설치

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

  1. Podman Compose를 설치하기 전에 파이프가 최신 버전으로 업데이트되었는지 확인합니다.

    sudo -H pip3 install --upgrade pip
    
  2. Podman Compose 패키지를 설치합니다.

    sudo pip3 install podman-compose 
    

    pip3 installsudo로 실행할 때 WARNING 메시지를 무시할 수 있습니다.

  3. Podman 구성 작업을 확인합니다.

    podman-compose version
    

    예제 출력:

    [oracle@ol-server ~]$ podman-compose version
    ['podman', '--version', '']
    using podman version: 4.2.0
    podman-composer version  1.0.3
    podman --version 
    podman version 4.2.0
    exit code: 0
    

Docker 작성 파일 생성

docker-compose.yaml 파일을 사용하면 지정된 응용 프로그램을 풀링하고 시작할 수 있습니다.

  1. 테스트용 디렉토리를 생성합니다.

    mkdir -p Documents/examples/echo
    
  2. 디렉토리로 이동합니다.

    cd Documents/examples/echo
    
  3. docker-compose.yaml 파일을 만듭니다.

    cat >> docker-compose.yaml << EOF
    ---
    version: '3' 
    services: 
      web: 
        image: k8s.gcr.io/echoserver:1.4
        ports:
            - "${HOST_PORT:-8080}:8080" 
    EOF
    
  4. 방금 생성한 docker-compose.yaml를 검토합니다.

    cat docker-compose.yaml
    

    예제 출력:

    [oracle@ol-server echo]$ cat docker-compose.yaml 
    ---
    version: '3' 
    services: 
      web: 
        image: k8s.gcr.io/echoserver:1.4
        ports:
            - "8080:8080"
    

Podman 작성이 작동 중인지 확인

  1. docker-compose 파일이 있는 디렉토리로 변경합니다.

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

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

    podman-compose up -d
    

    예제 출력:

    [oracle@ol-server echo]$ podman-compose up -d
    ['podman', '--version', '']
    using podman version: 4.2.0
    ** excluding:  set()
    ['podman', 'network', 'exists', 'echo_default']
    ['podman', 'network', 'create', '--label', 'io.podman.compose.project=echo', '--label', 'com.docker.compose.project=echo', 'echo_default']
    ['podman', 'network', 'exists', 'echo_default']
    podman create --name=echo_web_1 --label io.podman.compose.config-hash=123 --label io.podman.compose.project=echo --label io.podman.compose.version=0.0.1 --label com.docker.compose.project=echo --label com.docker.compose.project.working_dir=/home/oracle/examples/echo --label com.docker.compose.project.config_files=docker-compose.yaml --label com.docker.compose.container-number=1 --label com.docker.compose.service=web --net echo_default --network-alias web -p 8080:8080 k8s.gcr.io/echoserver:1.4
    Trying to pull k8s.gcr.io/echoserver:1.4...
    Getting image source signatures
    Copying blob d3c51dabc842 done  
    Copying blob a3ed95caeb02 done  
    Copying blob 6d9e6e7d968b done  
    Copying blob 412c0feed608 done  
    Copying blob cd23f57692f8 done  
    Copying blob dcd34d50d5ee done  
    Copying blob a3ed95caeb02 skipped: already exists  
    Copying blob a3ed95caeb02 skipped: already exists  
    Copying blob a3ed95caeb02 skipped: already exists  
    Copying blob b4241160ce0e done  
    Copying blob 7abee76f69c0 done  
    Writing manifest to image destination
    Storing signatures
    1b54b75ca13786d33df6708da1d83ecce14b055e78b03007c3c4e1f441e7139c
    exit code: 0
    

    참고: Podman과 마찬가지로 docker-compose.yaml 파일에 참조된 모든 컨테이너는 시스템에 없는 경우에만 풀링됩니다.

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

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

    예제 출력:

    [oracle@ol-server echo]$ 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
    

    예제 출력:

    [oracle@ol-server echo]$ podman-compose logs
    ['podman', '--version', '']
    using podman version: 4.2.0
    podman logs echo_web_1
    10.89.0.2 - - [17/Jan/2023:12:46:47 +0000] "POST / HTTP/1.1" 200 446 "-" "curl/7.61.1"
    exit code: 0
    
    
  5. Podman Compose 유틸리티를 사용하여 실행 중인 컨테이너를 확인합니다.

    podman-compose ps
    

    예제 출력:

    [oracle@ol-server echo]$ 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. 이제 echoweb 서비스를 중지할 때입니다.

    podman-compose down
    

Docker 작성이 작동 중인지 확인

  1. (선택 사항) docker-compose 파일이 있는 디렉토리로 변경합니다.

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

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

    sudo /usr/local/bin/docker-compose up -d
    

    예제 출력:

    [oracle@ol-server echo]$ sudo /usr/local/bin/docker-compose up -d
    [+] Running 0/0
    [+] Running 0/1echo-web-1  Starting                                                                                               0.0
    [+] Running 0/1echo-web-1  Starting                                                                                               0.1
    [+] Running 0/1echo-web-1  Starting                                                                                               0.2
    [+] Running 0/1echo-web-1  Starting                                                                                               0.3
    [+] Running 0/1echo-web-1  Starting                                                                                               0.4
    [+] Running 0/1echo-web-1  Starting                                                                                               0.5
    [+] Running 0/1echo-web-1  Starting                                                                                               0.6
    [+] Running 0/1echo-web-1  Starting                                                                                               0.7
    [+] Running 1/1echo-web-1  Starting                                                                                               0.8
     ��� Container echo-web-1  Started                                                                                                0.8s
    

    주:

    이 명령을 실행할 때 다음 출력이 반환되는 경우:

    ��� Container echo-web-1  Starting                                                                                               0.9s
    Error response from daemon: cannot listen on the TCP port: listen tcp4 :8080: bind: address already in use
    

    걱정하지 마세요. podman-compose down 명령이 실행되지 않았고, 이전에 podman-compose를 사용하여 시작된 echoserver 컨테이너가 계속 실행 중임을 의미합니다. 이전 단계에 따라 중지합니다.

  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 유틸리티를 사용하여 로그를 검사하고 이 애플리케이션에서 성공적인 요청을 반환했는지 확인하십시오.

    sudo /usr/local/bin/docker-compose logs
    

    예제 출력:

    [oracle@ol-server echo]$ sudo /usr/local/bin/docker-compose logs 
    echo-web-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 유틸리티는 Compose 파일에 의해 시작된 컨테이너를 검토하는 방법을 제공합니다.

    sudo /usr/local/bin/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
    

    주: docker-compose --help를 실행하여 다른 Docker Compose 유틸리티 명령을 참조하십시오. 그러나 이러한 추가 명령은 이 실습에서 범위를 벗어납니다.

  6. echoweb 서비스를 중지합니다.

    sudo /usr/local/bin/docker-compose down
    

    예제 출력:

    [oracle@ol-server echo]$ sudo /usr/local/bin/docker-compose down
    [+] Running 0/0
    [+] Running 0/1echo-web-1  Stopping                                                                                                   0.1
    [+] Running 0/1echo-web-1  Stopping                                                                                                   0.2
    [+] Running 0/1echo-web-1  Stopping                                                                                                   0.3
    [+] Running 2/1echo-web-1  Removing                                                                                                   0.4
     ��� Container echo-web-1  Removed                                                                                                    0.4s
     ��� Network echo_default  Removed                                                                                                    0.0s
    

중요 정보

podman-compose docker-compose 실행 파일이 모두 동일한 시스템에 설치된 경우 이러한 실행 파일을 서로 바꿔서 호출할 수 없습니다. 즉, 프로세스가 podman-docker에 의해 시작된 경우 아래 예와 같이 docker-compose 유틸리티를 사용하여 질의하거나 정지할 수 없거나 그 반대의 경우도 마찬가지입니다.

  1. 작성 파일이 있는 디렉토리로 변경합니다.

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

    cd ~/Documents/examples/echo/
    
  2. 먼저 Podman Compose를 사용합니다.

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

    sudo /usr/local/bin/docker-compose ps
    

    예제 출력

    [oracle@ol-server echo]$ sudo /usr/local/bin/docker-compose ps
    NAME                IMAGE               COMMAND             SERVICE             CREATED             STATUS              PORTS
    
  4. 그러나 Podman Compose를 사용하면 컨테이너가 실행 중인 것으로 확인됩니다.

    podman-compose ps
    

    예제 출력:

    [oracle@ol-server echo]$ 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 채널에서 더 많은 무료 학습 콘텐츠에 액세스하십시오. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.

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