在OCI上,使用Oracle Linux 8 + podman来运行WordPress
-
- Oracle MySQL Database Serviceの使い方メモ〜番外編その4
-
- podmanを使ってみた忘備録
- Oracle Linux 8 + SELinux + podman (ストレージ永続化設定も行っています)
首先
在使用Oracle Cloud Infrastructure (OCI) Compute Service中提供的Oracle Linux 8上,尝试快速运行Docker容器时,由于无法获取到docker-compose甚至是标准的docker-engine,我感到困惑不解。以下是我尝试使用podman并记录下来的经验。
验证环境
-
- Oracle Linux Server release 8.2
-
- docker.io/library/wordpress:latest (WordPress 5.5.3, PHP 7.4.12)
-
- docker.io/library/mysql:latest (MySQL 8.0.22)
-
- podman 2.0.5
- podman-compose 0.1.7dev
【忙碌的人專用】使用Podman建構WordPress的指令
我已经准备了一个构建WordPress容器和MySQL容器的Kubernetes YAML文件,通过执行以下命令,您可以构建环境。WordPress的/var/www/html目录和MySQL的/var/lib/mysql目录已经被持久化,这意味着即使启动或停止计算虚拟机,内容的初始化也不会发生。但是请注意,MySQL的连接信息是硬编码在YAML文件中的,所以要小心。(仅适用于开发和验证环境)
$ sudo dnf install -y podman
$ sudo dnf module install -y container-tools:ol8
$ sudo firewall-cmd --add-port=8080/tcp --zone=public --permanent
$ sudo firewall-cmd --reload
$ mkdir -p mysql/data
$ chmod 777 mysql/data
$ mkdir -p wordpress
$ chmod 777 wordpress
$ sudo setsebool -P httpd_can_network_connect_db=1
$ sudo setsebool -P httpd_can_network_connect=1
$ sudo sed -i -e '$a 127.0.0.1 db\n127.0.0.1 wordpress' /etc/hosts
$ curl -o podman_k8s_WPMySQL.yaml https://raw.githubusercontent.com/orakurara/WPonOCI/main/podman_k8s_WPMySQL/podman_k8s_WPMySQL.yaml
$ podman play kube podman_k8s_WPMySQL.yaml
每个容器启动后,您可以通过以下URL访问到WordPress的初始设置页面。
http://仮想机的公共IP:8080/wp-admin/
决定使用Podman的原因。
在Oracle Linux 8上
我正在尝试使用docker-compose快速引入WordPress容器环境以用于MySQL数据库验证,但感到有些匆忙。
$ dnf repolist
repo id repo name
ol8_UEKR6 Latest Unbreakable Enterprise Kernel Release 6 for Oracle Linux 8 (x86_64)
ol8_addons Oracle Linux 8 Addons (x86_64)
ol8_appstream Oracle Linux 8 Application Stream (x86_64)
ol8_baseos_latest Oracle Linux 8 BaseOS Latest (x86_64)
ol8_ksplice Ksplice for Oracle Linux 8 (x86_64)
ol8_oci Oracle Linux 8 OCI Packages (x86_64)
ol8_oci_included Oracle Software for OCI users on Oracle Linux 8 (x86_64)
$ dnf search *docker*
Last metadata expiration check: 0:00:12 ago on Tue Nov 24 12:16:47 2020.
============================== Name & Summary Matched: *docker* ===============================
podman-docker.noarch : Emulate Docker CLI using podman
pcp-pmda-docker.x86_64 : Performance Co-Pilot (PCP) metrics from the Docker daemon
================================== Summary Matched: *docker* ==================================
oci-umount.x86_64 : OCI umount hook for docker
oci-systemd-hook.x86_64 : OCI systemd hook for docker
skopeo.x86_64 : Inspect Docker images and repositories on registries
那没有吗?Podman-Docker是什么?
我查阅了各个公司的文件等。
从IBM(Red Hat)的文件中引用
Red Hat不仅仅在OpenShift中移除了Docker引擎,而且在Red Hat Enterprise Linux 8中彻底删除了docker命令和Docker容器引擎。RHEL 8不包含Docker,并且不再得到Red Hat的支持(尽管可以继续从其他来源获取)。
想不到…ORACLE的发布说明呢,
Oracle Linux 8发布的版本中包含了podman、buildah和skopeo容器工具。这些工具与Open Container Initiative (OCI)兼容,并可用于管理由Docker和其他兼容的容器引擎生成和管理的相同Linux容器。这些工具轻巧,并且主要侧重于功能的子集,因此可以减少守护进程操作的开销并运行。
Podman、Buildah和Skopeo容器工具都积极地建议我们使用它们作为替代品。由于我希望从Docker Hub中拉取Docker映像并使用它们,所以我决定尝试使用Podman作为替代docker命令的工具。然而,我找不到替代docker-compose的工具。据说在Podman中可以使用podman play kube命令从Kubernetes的YAML文件中启动多个容器,但我手头只有以docker-compose形式的YAML文件。在查找网络信息时,我发现了一个叫做podman-compose的开源工具,可以从docker-compose形式的YAML文件中执行Podman。
我试着使用podman和podman-compose。
我试用了podman-compose,并且顺利地可以根据docker-compose.yaml文件使用podman构建容器,但由于它是开发中的版本,我仍然感到不安。因此,我决定利用podman-compose从正在运行的Pod和容器信息中生成Kubernetes YAML文件,并使用podman play kube命令运行它。(在修改自动生成的Kubernetes YAML文件以运行时,无意中学习到了Kubernetes YAML的写法…;)
檢驗程序的詳細步驟
在OCI上建立验证环境
OCI中的VCN结构
我们将重复利用在先前验证中使用的“具有互联网连接性的VCN创建向导”创建的VCN。以下是向导中的输入示例。
-
- 基本情報
VCN名 : 任意のVCN名 MySQLTest
コンパートメント : 任意のコンパートメント名 /dev
VCNとサブネットの構成
VCN CIDRブロック 10.0.0.0/16
パブリック・サブネットCIDRブロック 10.0.30.0/24
プライベート・サブネットCIDRブロック 10.0.31/0/24
DNS解決:(任意) 選択
在本次验证中,仅使用公共子网,不使用私有子网。
创建安全组 (CSP)
为了从客户端的Web浏览器访问WordPress的验证环境,需要在互联网的入站通信中允许8080端口,因此需要创建一个安全组WP。从OCI仪表板菜单中选择核心基础设施>网络>虚拟云网络,选择创建的VCN(在本文中为MySQLTest),从屏幕左下角的资源菜单中选择网络安全组,在屏幕中央点击创建网络安全组按钮,并创建一个具有以下设置的安全组WP。
通过将此安全组仅分配给运行WordPress的WP服务器,即使将Bastion服务器放置在相同的公共子网中,只有被分配安全组WP的服务器才被允许使用8080端口进行访问。
创建一台运行WordPress的Compute VM实例
从OCI仪表板菜单中,访问核心基础设施 > 计算 > 实例。点击创建实例按钮以开始创建计算实例的向导。以下是向导中的输入示例。
-
- 名前 : 任意名前 WP
-
- コンパートメントの選択 : 任意のコンパートメント名 /dev
配置とハードウェアの構成
可用性ドメインの選択 :デフォルト Fubk:AP-TOKYO-1-AD-1
フォルト・ドメインの選択 :デフォルト FAULT-DOMAIN-1
イメージ:Oracle Linux 8
シェイプの選択:デフォルト VM.Standard.E2.1
ネットワーキングの構成
仮想クラウド・ネットワーク: MySQLTest
サブネット: パブリック・サブネット-MySQLTest
ネットワーク・セキュリティ・グループを使用してトラフィックを制御: WP
パブリックIPv4アドレスの割当て: はい
SSHキーの追加:公開キー・ファイルの選択
ブート・ボリュームの構成 :デフォルト設定
Podman的安装和测试
安装Podman
请执行以下命令,安装podman以及相关的container-tools。
$ cat /etc/oracle-release
Oracle Linux Server release 8.2
$ sudo dnf install -y podman
$ sudo dnf module install -y container-tools:ol8
使用podman基本操作使用nginx容器。
首先,使用firewall-cmd工具设置允许通过8080端口进行访问的验证。
$ sudo firewall-cmd --add-port=8080/tcp --zone=public --permanent
success
$ sudo firewall-cmd --reload
success
使用Podman拉取nginx容器后,对主机的8080端口进行端口转发设置,将其转发至容器内的80端口,并启动nginx容器。
$ podman pull nginx
Trying to pull container-registry.oracle.com/nginx...
unable to retrieve auth token: invalid username/password: unauthorized: authentication required
Trying to pull docker.io/library/nginx...
Getting image source signatures
Copying blob 852e50cd189d skipped: already exists
Copying blob c5df295936d3 done
Copying blob b3ddf1fa5595 done
Copying blob a29b129f4109 done
Copying blob 232bf38931fc done
Copying config daee903b4e done
Writing manifest to image destination
Storing signatures
daee903b4e436178418e41d8dc223b73632144847e5fe81d061296e667f16ef2
$ podman run -d -p 8080:80/tcp docker.io/library/nginx
755c5a633cbf3cfb71aae71122622a423d00a2d5b35dd00aace38fab687f8639
使用以下命令获取正在运行的容器列表。然后,使用获取到的CONTAINER ID来确认可以访问的端口号。
$ podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
755c5a633cbf docker.io/library/nginx:latest nginx -g daemon o... 18 seconds ago Up 18 seconds ago 0.0.0.0:8080->80/tcp thirsty_chandrasekhar
$ podman port 755c5a633cbf
80/tcp -> 0.0.0.0:8080
我已经参考确认了端口号,使用curl命令访问并确认能够访问在容器中运行的nginx。
$ curl http://0.0.0.0:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
同时,您可以使用容器ID在podman stop命令中停止容器,并使用podman rm命令停止容器。
$ podman stop 755c5a633cbf
755c5a633cbf3cfb71aae71122622a423d00a2d5b35dd00aace38fab687f8639
$ podman rm 755c5a633cbf
755c5a633cbf3cfb71aae71122622a423d00a2d5b35dd00aace38fab687f8639
为了在Podman上运行WordPress,需要进行预先准备工作。
准备持久化目录。
通过将主机操作系统的目录挂载到MySQL容器使用的目录,可以将其作为持久化目录,从而无论容器的启停,都可以持久地保存内容。此外,通过持久化WordPress容器使用的目录,可以持久化添加的主题和插件。在工作目录下创建各自的目录,并设置适当的权限。
$ mkdir -p mysql/data
$ chmod 777 mysql/data
$ mkdir -p wordpress
$ chmod 777 wordpress
SELinux的设置
在网络上的许多内容中,提到要将SELinux配置为Permissive,但我想在这次中还是保持Enforcing模式。第一个httpd_can_network_connect是用来允许httpd连接网络的设置,第二个setsebool -P httpd_can_network_connect_db是允许httpd连接数据库的设置。
$ sudo setsebool -P httpd_can_network_connect=1
$ sudo setsebool -P httpd_can_network_connect_db=1
顺便提一下,关于容器内进程的权限,我们在docker-compose.yaml文件中设置privileged: true,或者在Kubernetes的YAML文件中设置allowPrivilegeEscalation: true和seLinuxOptions: type: spc_t来进行配置。
使用podman-compose构建WordPress
Podman-Compose的安装
创建一个存储目录来存放执行文件等内容,并从podman-compose的Github仓库中下载最新的执行文件,然后给予执行权限,这样就完成了准备工作。
$ mkdir -p ~/.local/bin
$ curl -o ~/.local/bin/podman-compose https://raw.githubusercontent.com/containers/podman-compose/devel/podman_compose.py
$ chmod +x ~/.local/bin/podman-compose
使用Podman-compose执行
请执行以下命令,下载事先准备好的docker-compose.yaml文件。请务必将其保存为docker-compose.yaml,并放置在工作目录的最顶层位置。
$ curl -o docker-compose.yaml https://raw.githubusercontent.com/orakurara/WPonOCI/main/podman_compose_WPMySQL/docker-compose.yaml
在已下载的YAML文件中,描述了关于运行数据库容器的MySQL和运行WordPress容器的WordPress的配置。
version: "3.7"
services:
db:
image: mysql:latest
ports:
- "3306:3306"
restart: always
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_DATABASE=wordpress
- MYSQL_USER=wordpress
- MYSQL_PASSWORD=wordpress
volumes:
- ./mysql/data:/var/lib/mysql
privileged: true
wordpress:
image: wordpress:latest
ports:
- "8080:80"
restart: always
environment:
- WORDPRESS_DB_HOST=db:3306
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD=wordpress
- WORDPRESS_DB_NAME=wordpress
volumes:
- ./wordpress:/var/www/html
privileged: true
depends_on:
- db
请在工作目录中执行 “podman-compose” 命令,以确认WordPress和数据库各个容器都已成功启动。
$ podman-compose up -d
using podman version: podman version 2.0.5
podman pod create --name=opc --share net -p 3306:3306 -p 8080:80
2397e9f3a325eb7d0af66762b355025c9ccaf48245fa3a73326c4944f0b03580
0
podman run --name=opc_db_1 -d --pod=opc --label io.podman.compose.config-hash=123 --label io.podman.compose.project=opc --label io.podman.compose.version=0.0.1 --label com.docker.compose.container-number=1 --label com.docker.compose.service=db -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=wordpress -v /home/opc/./mysql/data:/var/lib/mysql --add-host db:127.0.0.1 --add-host opc_db_1:127.0.0.1 --add-host wordpress:127.0.0.1 --add-host opc_wordpress_1:127.0.0.1 --privileged --restart always mysql:latest
2c4205293a0221300b2129d97a5b796b52c41c687b6a63eb3b1df9527032dfec
0
podman run --name=opc_wordpress_1 -d --pod=opc --label io.podman.compose.config-hash=123 --label io.podman.compose.project=opc --label io.podman.compose.version=0.0.1 --label com.docker.compose.container-number=1 --label com.docker.compose.service=wordpress -e WORDPRESS_DB_HOST=db:3306 -e WORDPRESS_DB_USER=wordpress -e WORDPRESS_DB_PASSWORD=wordpress -e WORDPRESS_DB_NAME=wordpress -v /home/opc/./wordpress:/var/www/html --add-host db:127.0.0.1 --add-host opc_db_1:127.0.0.1 --add-host wordpress:127.0.0.1 --add-host opc_wordpress_1:127.0.0.1 --privileged --restart always wordpress:latest
1e82a612ca25510ff2508149e85101ff94e4630a4121078709fea11f22d8712d
0
如果您访问下面的URL,您可以进入WordPress的初始设置界面。
http://虚拟机的公共IP:8080/wp-admin/
在这里,WordPress容器被命名为opc_wordpress_1,数据库容器被命名为opc_db_1,并在opc容器中运行。您可以使用下面的命令来确认当前运行的Pod名称。
$ podman pod ls
POD ID NAME STATUS CREATED # OF CONTAINERS INFRA ID
2397e9f3a325 opc Running 9 minutes ago 3 1d7be965fa1e
此外,您可以使用以下命令删除每个Pod的容器,但由于我们要根据正在运行的Pod信息生成Kubernetes YAML,在此次操作中我们将保持它继续运行。
$ podman pod rm opc --force
2397e9f3a325eb7d0af66762b355025c9ccaf48245fa3a73326c4944f0b03580
使用Kubernetes YAML,在podman上构建WordPress。
您可以通过执行以下命令”podman generate kube”在opcPod上生成一个容器群的Kubernetes YAML。
podman generate kube opc > kubernetes-converted.yaml
然而,在生成后的初始状态中,包含了环境变量等默认值,因此看起来相当混乱。
# Generation of Kubernetes YAML is still under development!
#
# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-2.0.5
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2020-11-25T05:38:55Z"
labels:
app: opc
name: opc
spec:
containers:
- command:
- mysqld
env:
- name: PATH
value: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- name: TERM
value: xterm
- name: MYSQL_DATABASE
value: wordpress
- name: MYSQL_PASSWORD
value: wordpress
- name: container
value: podman
- name: MYSQL_VERSION
value: 8.0.22-1debian10
- name: GOSU_VERSION
value: "1.12"
- name: MYSQL_ROOT_PASSWORD
value: password
- name: MYSQL_MAJOR
value: "8.0"
- name: MYSQL_USER
value: wordpress
- name: HOSTNAME
image: docker.io/library/mysql:latest
name: opcdb1
ports:
- containerPort: 3306
hostPort: 3306
protocol: TCP
- containerPort: 80
hostPort: 8080
protocol: TCP
resources: {}
securityContext:
allowPrivilegeEscalation: true
capabilities:
add:
- CAP_DAC_READ_SEARCH
- CAP_LINUX_IMMUTABLE
- CAP_NET_BROADCAST
- CAP_NET_ADMIN
- CAP_IPC_LOCK
- CAP_IPC_OWNER
- CAP_SYS_MODULE
- CAP_SYS_RAWIO
- CAP_SYS_PTRACE
- CAP_SYS_PACCT
- CAP_SYS_ADMIN
- CAP_SYS_BOOT
- CAP_SYS_NICE
- CAP_SYS_RESOURCE
- CAP_SYS_TIME
- CAP_SYS_TTY_CONFIG
- CAP_LEASE
- CAP_AUDIT_CONTROL
- CAP_MAC_OVERRIDE
- CAP_MAC_ADMIN
- CAP_SYSLOG
- CAP_WAKE_ALARM
- CAP_BLOCK_SUSPEND
- CAP_AUDIT_READ
privileged: true
readOnlyRootFilesystem: false
seLinuxOptions: {}
volumeMounts:
- mountPath: /var/lib/mysql
name: home-opc-mysql-data
workingDir: /
- command:
- apache2-foreground
env:
- name: PATH
value: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- name: TERM
value: xterm
- name: PHP_LDFLAGS
value: -Wl,-O1 -pie
- name: PHP_VERSION
value: 7.4.12
- name: PHP_SHA256
value: e82d2bcead05255f6b7d2ff4e2561bc334204955820cabc2457b5239fde96b76
- name: PHP_ASC_URL
value: https://www.php.net/distributions/php-7.4.12.tar.xz.asc
- name: APACHE_ENVVARS
value: /etc/apache2/envvars
- name: WORDPRESS_DB_HOST
value: db:3306
- name: WORDPRESS_VERSION
value: 5.5.3
- name: APACHE_CONFDIR
value: /etc/apache2
- name: PHP_CFLAGS
value: -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
- name: PHPIZE_DEPS
value: "autoconf \t\tdpkg-dev \t\tfile \t\tg++ \t\tgcc \t\tlibc-dev \t\tmake \t\tpkg-config \t\tre2c"
- name: WORDPRESS_DB_PASSWORD
value: wordpress
- name: WORDPRESS_DB_NAME
value: wordpress
- name: WORDPRESS_DB_USER
value: wordpress
- name: PHP_EXTRA_CONFIGURE_ARGS
value: --with-apxs2 --disable-cgi
- name: PHP_URL
value: https://www.php.net/distributions/php-7.4.12.tar.xz
- name: PHP_INI_DIR
value: /usr/local/etc/php
- name: PHP_EXTRA_BUILD_DEPS
value: apache2-dev
- name: GPG_KEYS
value: 42670A7FE4D0441C8E4632349E4FDC074A4EF02D 5A52880781F755608BF815FC910DEB46F53EA312
- name: container
value: podman
- name: PHP_CPPFLAGS
value: -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
- name: WORDPRESS_SHA1
value: 61015720c679a6cbf9ad51701f0f3fedb51b3273
- name: HOSTNAME
image: docker.io/library/wordpress:latest
name: opcwordpress1
resources: {}
securityContext:
allowPrivilegeEscalation: true
capabilities:
add:
- CAP_DAC_READ_SEARCH
- CAP_LINUX_IMMUTABLE
- CAP_NET_BROADCAST
- CAP_NET_ADMIN
- CAP_IPC_LOCK
- CAP_IPC_OWNER
- CAP_SYS_MODULE
- CAP_SYS_RAWIO
- CAP_SYS_PTRACE
- CAP_SYS_PACCT
- CAP_SYS_ADMIN
- CAP_SYS_BOOT
- CAP_SYS_NICE
- CAP_SYS_RESOURCE
- CAP_SYS_TIME
- CAP_SYS_TTY_CONFIG
- CAP_LEASE
- CAP_AUDIT_CONTROL
- CAP_MAC_OVERRIDE
- CAP_MAC_ADMIN
- CAP_SYSLOG
- CAP_WAKE_ALARM
- CAP_BLOCK_SUSPEND
- CAP_AUDIT_READ
privileged: true
readOnlyRootFilesystem: false
seLinuxOptions: {}
volumeMounts:
- mountPath: /var/www/html
name: home-opc-wordpress
workingDir: /var/www/html
volumes:
- hostPath:
path: /home/opc/mysql/data
type: Directory
name: home-opc-mysql-data
- hostPath:
path: /home/opc/wordpress
type: Directory
name: home-opc-wordpress
status: {}
---
metadata:
creationTimestamp: null
spec: {}
status:
loadBalancer: {}
编辑并对生成的YAML文件进行了修改,使得它更容易被重复使用。我们将podman_k8s_WPMySQL.yaml文件放置在GitHub仓库中,因此您可以使用curl命令等直接下载并使用它。
apiVersion: v1
kind: Pod
metadata:
name: opc_wp
labels:
app: opc_wp
spec:
containers:
- name: wordpress
env:
- name: PATH
value: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- name: WORDPRESS_DB_PASSWORD
value: wordpress
- name: APACHE_CONFDIR
value: /etc/apache2
- name: WORDPRESS_DB_USER
value: wordpress
- name: WORDPRESS_DB_NAME
value: wordpress
- name: APACHE_ENVVARS
value: /etc/apache2/envvars
- name: WORDPRESS_DB_HOST
value: db:3306
- name: PHP_INI_DIR
value: /usr/local/etc/php
- name: HOSTNAME
image: docker.io/library/wordpress:latest
name: opcwordpress1
ports:
- containerPort: 80
hostPort: 8080
protocol: TCP
securityContext:
allowPrivilegeEscalation: true
readOnlyRootFilesystem: false
seLinuxOptions:
type: spc_t
volumeMounts:
- mountPath: /var/www/html
name: home-opc-wordpress
workingDir: /var/www/html
- name: mysqld
env:
- name: PATH
value: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- name: MYSQL_PASSWORD
value: wordpress
- name: MYSQL_ROOT_PASSWORD
value: password
- name: MYSQL_DATABASE
value: wordpress
- name: MYSQL_USER
value: wordpress
- name: HOSTNAME
image: docker.io/library/mysql:latest
name: opcdb1
securityContext:
allowPrivilegeEscalation: true
readOnlyRootFilesystem: false
seLinuxOptions:
type: spc_t
volumeMounts:
- mountPath: /var/lib/mysql
name: home-opc-mysql-data
workingDir: /
volumes:
- name: home-opc-wordpress
hostPath:
path: /home/opc/wordpress
type: Directory
- name: home-opc-mysql-data
hostPath:
path: /home/opc/mysql/data
type: Directory
如果执行 podman play kube ,则可以在 Kubernetes YAML 中构建和运行容器,但目前尚无法进行容器间通信。因此,需要在主机的 hosts 文件中添加记录,以便解析容器内的主机名。
$ sudo sed -i -e '$a 127.0.0.1 db\n127.0.0.1 wordpress' /etc/hosts
那么,现在可以开始执行 podman play kube 来搭建 WordPress 了。
$ curl -o podman_k8s_WPMySQL.yaml https://raw.githubusercontent.com/orakurara/WPonOCI/main/podman_k8s_WPMySQL/podman_k8s_WPMySQL.yaml
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1863 100 1863 0 0 6824 0 --:--:-- --:--:-- --:--:-- 6799
$ podman play kube podman_k8s_WPMySQL.yaml
Trying to pull docker.io/library/wordpress:latest...
Getting image source signatures
Copying blob 345b578c1a78 skipped: already exists
Copying blob 852e50cd189d skipped: already exists
Copying blob 0266fc315b01 skipped: already exists
Copying blob 4c8a5fa787a1 skipped: already exists
Copying blob 46fc127c1884 skipped: already exists
Copying blob f768b7fadf16 skipped: already exists
Copying blob 90aafe41e78d skipped: already exists
Copying blob af01fae4e5fc skipped: already exists
Copying blob 9e463236c8bc skipped: already exists
Copying blob cd12b0a220f2 skipped: already exists
Copying blob d9f76220cef4 skipped: already exists
Copying blob c09cf9a96ea9 skipped: already exists
Copying blob 6dda8bec068c skipped: already exists
Copying blob fd36a10c28fe skipped: already exists
Copying blob e11e483ab28e skipped: already exists
Copying blob ab40cb22800e skipped: already exists
Copying blob b08636db59dd skipped: already exists
Copying blob d2c7678bc02b skipped: already exists
Copying blob f903e014412a skipped: already exists
Copying blob 114ff1eb7cb0 [--------------------------------------] 0.0b / 0.0b
Copying config cfb931188d done
Writing manifest to image destination
Storing signatures
Trying to pull docker.io/library/mysql:latest...
Getting image source signatures
Copying blob 938c64119969 skipped: already exists
Copying blob 852e50cd189d skipped: already exists
Copying blob a43f41a44c48 skipped: already exists
Copying blob 29969ddb0ffb skipped: already exists
Copying blob 5cdd802543a3 skipped: already exists
Copying blob b79b040de953 skipped: already exists
Copying blob 7689ec51a0d9 skipped: already exists
Copying blob a880ba7c411f skipped: already exists
Copying blob 984f656ec6ca skipped: already exists
Copying blob 9f497bce458a skipped: already exists
Copying blob b9940f97694b skipped: already exists
Copying blob 2f069358dc96 [--------------------------------------] 0.0b / 0.0b
Copying config dd7265748b done
Writing manifest to image destination
Storing signatures
Pod:
e872e98923c6135f83e685804d77bb239ed9ea5c23d87557afbe25e016f1a0f4
Containers:
f507c83777327644e8cd3f32aa0e595bb53986673e7dc90bb2ad5dcf78792938
557ee2109cee2c4dc51d4a1b44c217f512b46eff3074a2c311199dee9c1a179d
只需访问以下URL,您就可以访问到WordPress的初始设置界面。
http://仮想机的公共IP:8080/wp-admin/
创建适当的首页,删除Pod,然后再次运行podman play kube来进行重建。如果能确认内容已经持久化,则表示成功。
总结
辛苦了。通过本次验证,我认为已经有了从Docker和Docker Compose迁移到Podman Compose的图像。虽然还可以选择等待Podman Compose的正式发布,继续在开发中使用,但是如果一下子全部转移到Podman Play Kube,就会有利用各种公共云提供的托管Kubernetes服务的选择。另外,对于觉得Kubernetes YAML有点复杂的人来说,希望本文对你迈出第一步有所帮助。
相关信息
Oracle® Linux Podman用户指南
使用Red Hat Enterprise Linux 8构建、运行和管理Linux容器。
Podman是一个用于管理和操作容器的开源工具。
从Docker-Compose过渡到Podman的Pods。
Podman Compose简介