注意:

在 Oracle Linux 上使用 Podman 编写文件

简介

Podman 和 Docker Compose 都是命令行工具,使用特殊格式的 YAML 文件作为组装的输入,然后将单个或多个容器作为应用程序运行。这些工具允许开发人员为其应用程序开发、测试单个 YAML 文件,然后向其用户交付一个 YAML 文件,并且仅使用一个命令来可靠地启动和停止该文件。这种可移植性和可靠性使得使用 Compose 规范在用户和开发人员中非常受欢迎,并且越来越成为一项要求。

目标

在本教程中,您将学习:

先决条件

部署 Oracle Linux

注:如果在您自己的租户中运行,请在部署实验环境之前阅读 linux-virt-labs GitHub 项目 README.md 并完成先决条件。

  1. 在 Luna Desktop 上打开一个终端。

  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. 部署实验室环境。

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

    免费的实验环境需要额外的变量 local_python_interpreter,该变量为在 localhost 上运行的播放设置 ansible_python_interpreter。此变量是必需的,因为环境安装了适用于 Python 的 Oracle Cloud Infrastructure SDK 的 RPM 程序包,该程序包位于 python3.6 模块下。

    默认部署配置使用 AMD CPU 和 Oracle Linux 8。要使用 Intel CPU 或 Oracle Linux 9,请将 -e instance_shape="VM.Standard3.Flex"-e os_version="9" 添加到部署命令。

    重要提示:等待手册成功运行并到达暂停任务。在手册的这一阶段,Oracle Linux 安装已完成,实例已准备就绪。记下之前的剧集,其中输出其部署的节点的公共和专用 IP 地址,以及运行实验时所需的任何其他部署信息。

设置 Podman 以使用编写文件

Podman 在 Podman v3.2.0 中引入了对 Docker Compose 功能的支持,随后在 Podman v3.0.0 中引入了有限的支持,从而引入了从 Podman 内部使用 Docker Compose 的功能。最近, Podman v4.1.0 扩展了对 Docker Compose 功能的支持,以包括使用 Docker Compose v2.2 及更高版本。

安装 Podman Docker 软件包

安装 podman-docker 软件包,使 Podman 能够以本地方式使用 Docker 命令。

sudo dnf install -y podman-docker

安装 Docker 编写

  1. 独立下载并安装 Compose。

    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-compose up,而不是运行 Docker 实用程序时使用的标准 docker-compose up 语法。

启动 Podman Socket

Podman 和 Docker 编写每个程序都需要启动 Podman 套接字,这允许每个程序的系统调用通过这个 systemd 控制的进程与 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 文件的“编写”功能的成功配置。

安装 Podman 编写

Podman Compose 是一个 Python 3 库,用于实现要与 Podman 一起运行的 Compose Specification

  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. 创建撰写文件。

    cat >> compose.yaml << EOF
    services:
      web:
        image: k8s.gcr.io/echoserver:1.4
        ports:
          - "${HOST_PORT:-8080}:8080"
    EOF
    
    
  3. 查看撰写文件。

    cat compose.yaml
    

运行 Podman 编写

  1. 转到与撰写文件相同的目录。

    重要提示:除非您位于与 compose.yaml 文件相同的目录中,否则 podman-compose 命令起作用。

    cd ~/projects/echo/
    
  2. 启动 echoserver 应用程序。

    podman-compose up -d
    

    输出显示 Podman 向下拉取容器并使用编写文件中列出的参数启动容器。-d 选项指示 Podman 在分离模式下在后台运行容器。Podman 将仅拉取撰写文件中引用的图像(如果它们不在本地)。

  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 logs echo_web_1 10.89.0.2 - [17/Jan/2023:12:46:47 +000] “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
    

    输出示例:

    `` 文本回声 -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 编写实用程序的容器列表。

    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-composedocker-compose 将 Compose 文件与 Podman 一起使用。

更多学习资源

通过 docs.oracle.com/learn 浏览其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心