Nota:
- Este tutorial está disponible en un entorno de laboratorio gratuito proporcionado por Oracle.
- Utiliza valores de ejemplo para las credenciales, el arrendamiento y los compartimentos de Oracle Cloud Infrastructure. Al finalizar el laboratorio, sustituya estos valores por otros específicos de su entorno en la nube.
Uso de Archivos de Redacción con Podman
Introducción
Docker Compose es una herramienta de línea de comandos que utiliza un archivo YAML con formato especial como entrada para ensamblar y, a continuación, ejecutar contenedores únicos o múltiples como aplicaciones. Esto permite a los desarrolladores desarrollar, probar y, a continuación, entregar a sus usuarios un único archivo YAML para su aplicación, y utilizar solo un comando para iniciarlo y detenerlo de forma fiable. Esta portabilidad y fiabilidad ha hecho que Docker Compose no solo sea muy popular entre los usuarios y desarrolladores, sino cada vez más un requisito.
Objetivos
En este laboratorio se muestra cómo instalar y utilizar podman-compose
y docker-compose
con Podman, y cómo verificar que funcionan con un archivo docker-compose.yaml
simple.
Requisitos
- Un sistema cliente con Oracle Linux instalado
- Podman instalado (el paquete 'container-tools')
- Acceso a internet
Exención de responsabilidad de soporte de Oracle
Oracle no proporciona soporte técnico para la secuencia de pasos que se proporcionan en las siguientes instrucciones porque estos pasos hacen referencia a programas de software y sistemas operativos que Oracle no proporciona. En este tutorial se proporcionan instrucciones opcionales solo para su comodidad.
Para obtener más información sobre el método soportado de Oracle para el desarrollo y uso de servicios basados en Podman, consulte https://docs.oracle.com/en/operating-systems/oracle-linux/podman/.
Configuración del entorno de prácticas
Nota: Al utilizar el entorno de prácticas gratuitas, consulte Oracle Linux Lab Basics para obtener instrucciones de conexión y otras instrucciones de uso.
-
Abra un terminal y conéctese mediante ssh a la instancia de ol-server si aún no está conectada.
ssh oracle@<ip_address_of_instance>
Confirmar trabajos de Podman
El paquete de herramientas de contenedor de Oracle Linux proporciona las versiones más recientes de Podman, Buildah, Skopeo y las dependencias asociadas.
-
Compruebe la versión de Podman.
podman -v
-
Confirme que la CLI de Podman está funcionando.
podman run quay.io/podman/hello
Resultado de ejemplo:
[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
Configuración de Podman para Trabajar con Archivos de Redacción
Podman introdujo el soporte para la funcionalidad de Docker Compose en Podman v3.2.0, después de que se introdujo un soporte limitado en Podman v3.0.0, lo que introdujo la capacidad de utilizar Docker Compose desde dentro de Podman. Más recientemente, Podman v4.1.0 amplió el soporte de la funcionalidad de Docker Compose para incluir el uso de Docker Compose v2.2 y superiores.
En los siguientes pasos se describe cómo instalar y configurar podman-compose
y docker-compose
.
Instalación del paquete Podman Docker
Esto permite a Podman trabajar de forma nativa con comandos de Docker.
-
Instale el paquete
podman-docker
.sudo dnf install -y podman-docker
Instalación de Docker Compose
Nota:
La instalación de Compose de manera independiente, como se describe aquí, requiere el uso de
docker-compose
en lugar de la sintaxis estándar utilizada al utilizar la utilidad Docker dedocker compose
. En otras palabras, sustituya la sintaxisdocker compose up
pordocker-compose up
en su lugar.
-
Descargar e instalar Compose independiente.
sudo curl -SL https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
Resultado de ejemplo:
[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
-
Aplique permisos ejecutables al binario.
sudo chmod +x /usr/local/bin/docker-compose
-
Confirme la creación de trabajos independientes.
docker-compose version
Resultado de ejemplo:
[oracle@ol-server ~]$ docker-compose version Docker Compose version v2.15.1
Iniciar el socket de Podman
Los siguientes pasos son necesarios para que la funcionalidad de Docker Compose funcione mediante la creación de un socket de Unix.
-
Configure el socket de Podman con estos pasos.
sudo systemctl enable --now podman.socket sudo systemctl status podman.socket
Resultado de ejemplo:
[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.
-
Verifique que el socket funcione como se espera con curl.
sudo curl -w "\n" -H "Content-Type: application/json" --unix-socket /var/run/docker.sock http://localhost/_ping
Resultado de ejemplo:
[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 ~]$
Si la salida de este comando devuelve OK
, la funcionalidad Compose se ha configurado correctamente para trabajar con archivos docker-compose.yaml.
Instalación de Podman Compose
Podman Compose es una biblioteca Python 3 que implementa la especificación compuesta para ejecutar con Podman.
-
Antes de instalar Podman Compose, confirme que pip se ha actualizado a la última versión.
sudo -H pip3 install --upgrade pip
-
Instale el paquete Podman Compose.
sudo pip3 install podman-compose
Al ejecutar
pip3 install
comosudo
, se pueden ignorar los mensajes de ADVERTENCIA. -
Confirme que Podman Compose funciona.
podman-compose version
Resultado de ejemplo:
[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
Creación de un archivo de composición de Docker
Este archivo docker-compose.yaml permite extraer e iniciar la aplicación designada.
-
Cree un directorio para la prueba.
mkdir -p Documents/examples/echo
-
Cambie al directorio.
cd Documents/examples/echo
-
Cree el archivo 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
-
Revise el docker-compose.yaml recién creado.
cat docker-compose.yaml
Resultado de ejemplo:
[oracle@ol-server echo]$ cat docker-compose.yaml --- version: '3' services: web: image: k8s.gcr.io/echoserver:1.4 ports: - "8080:8080"
Confirmar que Podman Compose está funcionando
-
Cambie al directorio donde se encuentra el archivo docker-compose.
Importante: los comandos
podman-compose
no funcionarán a menos que esté en el directorio donde se encuentra el archivodocker-compose.yaml
.cd ~/Documents/examples/echo/
-
Inicie la aplicación
echoserver
.podman-compose up -d
Resultado de ejemplo:
[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
Nota: Al igual que con Podman, los contenedores a los que se hace referencia en el archivo
docker-compose.yaml
solo se extraen si aún no están presentes en el sistema. -
Pruebe que la aplicación
echoserver
esté activa y en ejecución.curl -X POST -d "foobar" http://localhost:8080/; echo
Resultado de ejemplo:
[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
-
Además, confirme el éxito mediante la revisión de los logs.
podman-compose logs
Resultado de ejemplo:
[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
-
Use la utilidad Podman Compose para ver los contenedores en ejecución.
podman-compose ps
Resultado de ejemplo:
[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
Nota: Consulte otros comandos de la utilidad Podman Compose ejecutando
podman-compose --help
. Sin embargo, estos comandos adicionales están fuera del ámbito de esta práctica. -
Ahora es el momento de detener el servicio echoweb.
podman-compose down
Confirmar que Docker Compose está funcionando
-
(Opcional) Cambie al directorio donde se encuentra el archivo docker-compose.
Importante: los comandos
docker-compose
no funcionarán a menos que esté en el directorio donde se encuentra el archivodocker-compose.yaml
.cd ~/Documents/examples/echo/
-
Inicie la aplicación
echoserver
.sudo /usr/local/bin/docker-compose up -d
Resultado de ejemplo:
[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
NOTA:
Si se devuelve la siguiente salida al ejecutar este comando:
��� 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
No se preocupe, solo significa que el comando
podman-compose down
no se ejecutó y el contenedor echoserver iniciado anteriormente conpodman-compose
aún se está ejecutando. Siga los pasos anteriores para detenerlo. -
Pruebe que el contenedor se esté ejecutando.
curl -X POST -d "foobar" http://localhost:8080/; echo
Resultado de ejemplo:
[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
-
Como antes, utilice la utilidad Docker Compose para inspeccionar los logs y confirmar que esta aplicación ha devuelto una solicitud correcta.
sudo /usr/local/bin/docker-compose logs
Resultado de ejemplo:
[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"
-
La utilidad Docker Compose también proporciona una forma de revisar los contenedores iniciados por el archivo Compose.
sudo /usr/local/bin/docker-compose ps
Resultado de ejemplo:
echo-web-1 k8s.gcr.io/echoserver:1.4 "nginx -g daemon off;" web 12 minutes ago Up 12 minutes 8080/tcp
Nota: Consulte otros comandos de la utilidad Docker Compose ejecutando
docker-compose --help
. Sin embargo, estos comandos adicionales están fuera del ámbito de esta práctica. -
Detenga el servicio echoweb.
sudo /usr/local/bin/docker-compose down
Resultado de ejemplo:
[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
Información importante
Si los ejecutables podman-compose
y docker-compose
se han instalado en el mismo sistema, es importante tener en cuenta que no es posible invocarlos de manera intercambiable. Esto significa que si podman-docker
inicia un proceso, no se puede consultar ni parar mediante la utilidad docker-compose
, o viceversa, como se muestra en el siguiente ejemplo:
-
Cambie al directorio donde se encuentra el archivo de redacción.
Importante: los comandos
podman-compose
odocker-compose
no funcionarán a menos que esté en el directorio donde se encuentra el archivodocker-compose.yaml
.cd ~/Documents/examples/echo/
-
Empiece por utilizar Podman Compose.
podman-compose up -d
-
Intente mostrar los contenedores en ejecución mediante Docker Compose.
sudo /usr/local/bin/docker-compose ps
Resultado de ejemplo
[oracle@ol-server echo]$ sudo /usr/local/bin/docker-compose ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
-
Sin embargo, el uso de Podman Compose confirma que el contenedor se está ejecutando.
podman-compose ps
Resultado de ejemplo:
[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
Resumen
Esto confirma cómo utilizar un archivo de redacción con Podman mediante podman-compose
o docker-compose
.
Para más información
Ver otros recursos relacionados:
- Oracle Learning Library
- Documentación de Oracle Linux:
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.
Para obtener documentación sobre los productos, visite Oracle Help Center.
Using Compose Files with Podman
F76747-01
January 2023
Copyright © 2023, Oracle and/or its affiliates.