참고:
- 이 자습서는 Oracle에서 제공하는 무료 실습 환경에서 사용할 수 있습니다.
- Oracle Cloud Infrastructure 자격 증명, 테넌시 및 구획에 대한 예제 값을 사용합니다. 실습을 마치면 해당 값을 클라우드 환경과 관련된 값으로 대체합니다.
Podman으로 파일 작성 사용
소개
Docker Compose는 특수 형식의 YAML 파일을 입력으로 사용하여 단일 또는 다중 컨테이너를 애플리케이션으로 어셈블한 다음 실행하는 명령행 툴입니다. 이를 통해 개발자는 응용 프로그램을 위한 단일 YAML 파일을 개발, 테스트 및 유저에게 전달할 수 있으며, 단 하나의 명령만 사용하여 안정적으로 시작 및 정지할 수 있습니다. 이러한 이식성과 안정성으로 인해 Docker Compose는 사용자와 개발자 모두에게 매우 인기가 있을 뿐만 아니라 점점 더 많은 요구사항을 충족할 수 있게 되었습니다.
목표
이 실습에서는 Podman과 함께 podman-compose
및 docker-compose
를 모두 설치하고 사용하는 방법을 보여주고 간단한 docker-compose.yaml
파일로 작동하는지 확인합니다.
필요 조건
- Oracle Linux가 설치된 클라이언트 시스템
- Podman이 설치됨('container-tools' 패키지)
- 인터넷에 액세스
Oracle Support 면책
Oracle은 Oracle에서 제공하지 않는 소프트웨어 프로그램 및 운영 체제를 참조하기 때문에 다음 지침에 제공된 일련의 단계에 대한 기술 지원을 제공하지 않습니다. 이 자습서는 편의상 선택적 지침을 제공합니다.
Podman 기반 서비스의 개발 및 사용에 대해 Oracle이 지원하는 방법에 대한 자세한 내용은 https://docs.oracle.com/en/operating-systems/oracle-linux/podman/를 참조하십시오.
실습 환경 설정
주: 무료 실습 환경을 사용하는 경우 연결 및 기타 사용 지침은 Oracle Linux Lab Basics를 참조하십시오.
-
터미널을 열고 아직 연결되지 않은 경우 ssh를 통해 ol-server 인스턴스에 연결합니다.
ssh oracle@<ip_address_of_instance>
Podman 작업 확인
Oracle Linux의 컨테이너 도구 패키지는 최신 버전의 Podman, Buildah, Skopeo 및 연관된 종속성을 제공합니다.
-
Podman의 버전을 확인합니다.
podman -v
-
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-compose
및 docker-compose
를 모두 설치 및 구성하는 방법에 대해 설명합니다.
Podman Docker 패키지 설치
이를 통해 Podman은 기본적으로 Docker 명령을 사용할 수 있습니다.
-
podman-docker
패키지를 설치합니다.sudo dnf install -y podman-docker
Docker Compose 설치
참고:
여기에 설명된 대로 독립형 방식으로 구성 설치를 수행하려면
docker compose
의 Docker 유틸리티를 사용할 때 사용되는 표준 구문 대신docker-compose
를 사용해야 합니다. 즉, 대신docker compose up
구문을docker-compose up
로 대체합니다.
-
독립형 작성 다운로드 및 설치
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
-
이진에 실행 권한을 적용합니다.
sudo chmod +x /usr/local/bin/docker-compose
-
독립형 작업 작성 확인
docker-compose version
예제 출력:
[oracle@ol-server ~]$ docker-compose version Docker Compose version v2.15.1
Podman 소켓 시작
Unix 소켓을 만들어 Docker 작성 기능을 작동하려면 다음 단계가 필요합니다.
-
다음 단계로 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.
-
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 라이브러리입니다.
-
Podman Compose를 설치하기 전에 파이프가 최신 버전으로 업데이트되었는지 확인합니다.
sudo -H pip3 install --upgrade pip
-
Podman Compose 패키지를 설치합니다.
sudo pip3 install podman-compose
pip3 install
를sudo
로 실행할 때 WARNING 메시지를 무시할 수 있습니다. -
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 파일을 사용하면 지정된 응용 프로그램을 풀링하고 시작할 수 있습니다.
-
테스트용 디렉토리를 생성합니다.
mkdir -p Documents/examples/echo
-
디렉토리로 이동합니다.
cd Documents/examples/echo
-
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
-
방금 생성한 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 작성이 작동 중인지 확인
-
docker-compose 파일이 있는 디렉토리로 변경합니다.
중요:
docker-compose.yaml
파일이 있는 디렉토리에 있지 않으면podman-compose
명령이 작동하지 않습니다.cd ~/Documents/examples/echo/
-
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
파일에 참조된 모든 컨테이너는 시스템에 없는 경우에만 풀링됩니다. -
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
-
또한 로그를 검토하여 성공을 확인합니다.
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
-
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 유틸리티 명령을 참조하십시오. 그러나 이러한 추가 명령은 이 실습에서 범위를 벗어납니다. -
이제 echoweb 서비스를 중지할 때입니다.
podman-compose down
Docker 작성이 작동 중인지 확인
-
(선택 사항) docker-compose 파일이 있는 디렉토리로 변경합니다.
중요:
docker-compose.yaml
파일이 있는 디렉토리에 있지 않으면docker-compose
명령이 작동하지 않습니다.cd ~/Documents/examples/echo/
-
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 컨테이너가 계속 실행 중임을 의미합니다. 이전 단계에 따라 중지합니다. -
컨테이너가 실행 중인지 테스트합니다.
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
-
이전과 마찬가지로 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"
-
또한 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 유틸리티 명령을 참조하십시오. 그러나 이러한 추가 명령은 이 실습에서 범위를 벗어납니다. -
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
유틸리티를 사용하여 질의하거나 정지할 수 없거나 그 반대의 경우도 마찬가지입니다.
-
작성 파일이 있는 디렉토리로 변경합니다.
중요:
docker-compose.yaml
파일이 있는 디렉토리에 있지 않으면podman-compose
또는docker-compose
명령이 작동하지 않습니다.cd ~/Documents/examples/echo/
-
먼저 Podman Compose를 사용합니다.
podman-compose up -d
-
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
-
그러나 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 파일을 사용하는 방법이 확인됩니다.
추가 정보
기타 관련 리소스 참조:
- Oracle Learning 라이브러리
- Oracle Linux 제품 문서:
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하십시오. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Using Compose Files with Podman
F76747-01
January 2023
Copyright © 2023, Oracle and/or its affiliates.