使用 AlmaLinux 自己制作 LAMP 容器映像,以操作系统软件包为基础

首先

尝试从操作系统包中创建一个关于AlmaLinux LAMP容器镜像的文章。

环境

    • VirtualBox 7.0 on MacOSX Sonoma

 

    AlmaLinux-9.2-x86_64-minimal.iso でデフォルトインストール

准备建设

安装 podman 和 perl。(perl不是必需的)

sudo dnf install podman perl -y

建立

创建 httpd + php 容器镜像。

创建用于创建容器的目录,并在其中安装软件包。

mkdir -p ~/wk/httpd-php
sudo dnf --installroot ~/wk/httpd-php/ --releasever=/ install httpd httpd-tools php php-mysqlnd php-gd php-curl php-ftp php-fpm -y

进行设置文件等的编辑,将其作为容器映像导入
禁用httpd的默认字符编码设置
启用mod_mpm_prefork.so
创建php-fpm启动所需的目录

※我使用Perl,但也可以在编辑器中进行编辑。

cd ~/wk/httpd-php
sudo perl -pi -e 's/^(AddDefaultCharset) .*$/$1 Off/' etc/httpd/conf/httpd.conf
sudo perl -pi -e 's/^(LoadModule .*)$/#$1/' etc/httpd/conf.modules.d/00-mpm.conf
sudo perl -pi -e 's/^#(LoadModule .*mod_mpm_prefork\.so)$/$1/' etc/httpd/conf.modules.d/00-mpm.conf
sudo mkdir -p run/php-fpm
sudo tar cf - . | podman import - httpd-php:v1

确认容器镜像

$ podman images
REPOSITORY           TAG         IMAGE ID      CREATED         SIZE
localhost/httpd-php  v1          2fa2df17933f  38 seconds ago  268 MB

确认行动

mkdir -p ~/data/www/html
echo "<?php phpinfo() ?>" > ~/data/www/html/phpinfo.php
podman run -dt --rm --name ph2ttpd -p 1080:80 -v ~/data/www/html:/var/www/html:Z localhost/httpd-php:v1 /bin/bash -c "/usr/sbin/php-fpm ; /usr/sbin/httpd -D FOREGROUND"

如果防火墙启用,请执行以下命令。

sudo firewall-cmd --permanent --zone=public --add-port=1080/tcp
sudo firewall-cmd --reload
PHP 8.0.27 - phpinfo() - 個人 - Microsoft​ Edge 2023_10_09 6_47_12.png

停止容器。

(Note: The given sentence is in Japanese, not in Chinese. The provided paraphrase is in Simplified Chinese. If you need a translation in Traditional Chinese, please let me know.)

podman kill ph2ttpd

创建mysql容器镜像

创建用于容器创建的目录并安装软件包。

mkdir -p ~/wk/mysql
sudo dnf --installroot ~/wk/mysql/ --releasever=/ install mysql-server -y

作为容器镜像进行导入。

cd ~/wk/mysql
sudo tar cf - . | podman import - mysql:v1

确认容器映像

$ podman images
REPOSITORY           TAG         IMAGE ID      CREATED         SIZE
localhost/mysql      v1          34f4abe592c4  55 seconds ago  503 MB
localhost/httpd-php  v1          2fa2df17933f  11 minutes ago  268 MB

确认操作

mkdir -p ~/data/mysql
podman run -it --rm -v ~/data/mysql:/var/lib/mysql:Z localhost/mysql:v1 mysqld --initialize-insecure --user=root
podman run -dt --rm --name mysqldb -v ~/data/mysql:/var/lib/mysql:Z localhost/mysql:v1 mysqld -u root

尝试使用 exec 执行 mysql 命令。

$ podman exec -it mysqldb mysql -u root --skip-password
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.32 Source distribution

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> quit
Bye

如果你担心没有密码的问题,可以设置一个密码。

podman exec -it mysqldb mysqladmin password rootpassword -u root -p

请输入密码(无密码则按回车键)

停止容器。

podman kill mysqldb

确认操作

协同启动容器

podman network create webdbnet
podman run -dt --rm --name ph2ttpd --network webdbnet -p 1080:80 -v ~/data/www/html:/var/www/html:Z localhost/httpd-php:v1 /bin/bash -c "/usr/sbin/php-fpm ; /usr/sbin/httpd -D FOREGROUND"
podman run -dt --rm --name mysqldb --network webdbnet -v ~/data/mysql:/var/lib/mysql:Z localhost/mysql:v1 mysqld -u root

使用 phpMyAdmin 进行操作确认

执行 PHPMyAdmin 的安装和配置。

cd ~/data/www/html
curl -sL -O https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.zip
unzip phpMyAdmin-5.2.1-all-languages.zip
rm phpMyAdmin-5.2.1-all-languages.zip
mv phpMyAdmin-5.2.1-all-languages phpMyAdmin
perl -p -e 's/localhost/mysqldb/' phpMyAdmin/config.sample.inc.php > phpMyAdmin/config.inc.php

创建一个名为“dbadmin”的连接用户。

$ podman exec -it mysqldb mysql -u root -p
Enter password: rootpassword
 :(略)
mysql> CREATE USER 'dbadmin'@'%' IDENTIFIED BY 'dbpassword';
Query OK, 0 rows affected (0.02 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'dbadmin'@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.01 sec)

mysql> quit
Bye
PHP 8.0.27 - phpinfo() - 個人 - Microsoft​ Edge 2023_10_09 7_01_31.png
PHP 8.0.27 - phpinfo() - 個人 - Microsoft​ Edge 2023_10_09 7_02_06.png

将DB容器替换为mariadb

由于需要将默认字符编码设置为utf8mb4,并且需要避免以下两个限制/问题,因此添加了该设置。

 

sudo dnf --installroot ~/wk/mariadb/ --releasever=/ install -y mariadb-server
cd ~/wk/mariadb
sudo sed -i '/^\[galera\]/a innodb_page_size=64k' etc/my.cnf.d/mariadb-server.cnf
sudo sed -i '/^\[mysqld\]/a character-set-server=utf8mb4' etc/my.cnf.d/mariadb-server.cnf
sudo sed -i '/^\[mysqld\]/a collation-server=utf8mb4_unicode_ci' etc/my.cnf.d/mariadb-server.cnf
sudo sed -i '/^\[mysqld\]/a character-set-client-handshake=FALSE' etc/my.cnf.d/mariadb-server.cnf
sudo sed -i '/^\[mariadb\]/a lc_messages_dir=/usr/share/mariadb/english' etc/my.cnf.d/mariadb-server.cnf
sudo sed -i '/^\[client\]/a default-character-set=utf8mb4' etc/my.cnf.d/client.cnf
sudo sed -i '/^\[mysql\]/a default-character-set=utf8mb4' etc/my.cnf.d/client.cnf
sudo tar cf - . | podman import - mariadb:v1

然后进行初始化,名称仍为“mysqldb”容器,将其替换为mysql并启动。

mkdir ~/data/mariadb
podman run -it --rm -v ~/data/mariadb:/var/lib/mysql:Z localhost/mariadb:v1 mariadb-install-db
podman run -dt --rm --name mysqldb --network webdbnet -v ~/data/mariadb:/var/lib/mysql:Z localhost/mariadb:v1 mariadbd -u root

最后

可以通过将chroot环境通过tar打包导入来自制容器镜像。
如果在操作系统的包管理器中可以指定安装目录的话,那么借助操作系统的包,可以相对容易地自制容器镜像。

广告
将在 10 秒后关闭
bannerAds