注意:
- Oracle 提供的免费实验室环境中提供了此教程。
- 它使用 Oracle Cloud Infrastructure 身份证明、租户和区间的示例值。完成实验室时,请将这些值替换为特定于云环境的值。
在 Oracle Linux 上使用 Podman 编写文件
简介
Podman 和 Docker Compose 都是命令行工具,使用特殊格式的 YAML 文件作为组装的输入,然后将单个或多个容器作为应用程序运行。这些工具允许开发人员为其应用程序开发、测试单个 YAML 文件,然后向其用户交付一个 YAML 文件,并且仅使用一个命令来可靠地启动和停止该文件。这种可移植性和可靠性使得使用 Compose 规范在用户和开发人员中非常受欢迎,并且越来越成为一项要求。
目标
在本教程中,您将学习:
- 在 Podman 中安装和使用
podman-compose
和docker-compose
- 验证它们是否适用于简单的
docker-compose.yaml
文件
先决条件
-
最少一个 Oracle Linux 系统
-
每个系统都应安装 Oracle Linux 并进行以下配置:
- 具有 sudo 访问权限的非 root 用户帐户
- 访问 Internet
部署 Oracle Linux
注:如果在您自己的租户中运行,请在部署实验环境之前阅读 linux-virt-labs
GitHub 项目 README.md 并完成先决条件。
-
在 Luna Desktop 上打开一个终端。
-
克隆
linux-virt-labs
GitHub 项目。git clone https://github.com/oracle-devrel/linux-virt-labs.git
-
转到工作目录。
cd linux-virt-labs/ol
-
安装所需集合。
ansible-galaxy collection install -r requirements.yml
-
部署实验室环境。
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 编写
-
独立下载并安装 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
-
将可执行权限应用于二进制文件。
sudo chmod +x /usr/local/bin/docker-compose
-
确认编写独立作品。
docker-compose version
输出将返回当前版本的
docker-compose
。注:按独立方式安装编写(如此处所述)需要使用
docker-compose up
,而不是运行 Docker 实用程序时使用的标准docker-compose up
语法。
启动 Podman Socket
Podman 和 Docker 编写每个程序都需要启动 Podman 套接字,这允许每个程序的系统调用通过这个 systemd 控制的进程与 Podman 进行通信。
-
配置 Podman 套接字。
systemctl --user enable --now podman.socket systemctl --user status podman.socket
输出显示 systemd 套接字
active (listening)
。 -
获取用户 Podman 套接字位置的位置。
podman info | grep -i remotesocket -A2
-
验证套接字是否使用 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 。
-
安装并启用 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
-
安装 Podman Compose 软件包。
sudo dnf install -y podman-compose
-
确认 Podman Compose 通过显示其版本来工作。
podman-compose version
创建撰写文件
此撰写文件允许拉取和启动指定的应用程序。
-
为测试创建一个目录,然后转到该目录。
mkdir -p projects/echo cd projects/echo
-
创建撰写文件。
cat >> compose.yaml << EOF services: web: image: k8s.gcr.io/echoserver:1.4 ports: - "${HOST_PORT:-8080}:8080" EOF
-
查看撰写文件。
cat compose.yaml
运行 Podman 编写
-
转到与撰写文件相同的目录。
重要提示:除非您位于与
compose.yaml
文件相同的目录中,否则podman-compose
命令不起作用。cd ~/projects/echo/
-
启动
echoserver
应用程序。podman-compose up -d
输出显示 Podman 向下拉取容器并使用编写文件中列出的参数启动容器。
-d
选项指示 Podman 在分离模式下在后台运行容器。Podman 将仅拉取撰写文件中引用的图像(如果它们不在本地)。 -
测试 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
-
此外,请查看日志来确认成功。
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
-
使用 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 实用程序命令。 -
现在是停止 echoserver 容器的时候了。
podman-compose down
-
删除在容器部署期间创建的附加 Podman 网桥网络。
podman network rm echo_default
确认 Docker 编写正在工作
-
为 Podman 套接字的位置设置环境变量。
export DOCKER_HOST=unix:///run/user/$UID/podman/podman.sock
-
启动 echoserver 应用程序。
此命令必须从与编写文件相同的目录中运行。
docker-compose up -d
输出显示 echo_default 网络和 echo-web-1 容器的创建。
-
访问容器的应用程序。
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 logs
输出示例:
`` 文本回声 -web-1 | 10.89.0.1 - - [17/Jan/2023:14:48:56 +0000] “POST / HTTP/1.1”200 446 “- “curl/7.61.1”
-
获取已开始使用 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
-
停止 echoserver 应用程序。
docker-compose down
重要信息
如果在同一系统上同时安装 podman-compose
和 docker-compose
可执行文件,则必须注意,不可能以互换方式调用它们。我们的意思是,如果使用 podman-compose
启动进程,则无法使用 docker-compose
查询或停止进程,反之亦然。
-
开始使用 Podman Compose。
podman-compose up -d
-
尝试使用 Docker Compose 列出正在运行的容器。
docker-compose ps
输出将返回一个空列表,显示从其角度来看,没有容器正在运行。
-
但是,使用 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
将 Compose 文件与 Podman 一起使用。
相关链接
更多学习资源
通过 docs.oracle.com/learn 浏览其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。