起因:之前在CentOS系统时代,写过一篇采用docker搭建LEMP环境的博客。现在时过境迁,CentOS系统,CoreOS系统,Docker,Podman管理工具的地位和应用,都有了极大变化,而我也转到了更为自由的Debian系统环境中。
这里是为了测试Podman管理容器中的网络功能而进行的实验。在2020年,podman还无法指定容器的ip,现在看官方说明,似乎可以了,所以再次进行了多容器以ip方式关联应用的搭建试验。
- apt update
- apt install podman -y
-
- # 配置国内镜像,这里以阿里云为例,
- vim /etc/containers/registries.conf
- # 在最下方加入以下内容:
- unqualified-search-registries = ["docker.io"]
-
- [[registry]]
- prefix = "docker.io"
- location = "xxxxxxx.mirror.aliyuncs.com"
- # 注意,上方的xxxxx表示你自己的专属id,用支付宝登录阿里云自己获取
更改国内镜像加速源后,就可以 podman search 了
- podman network create lemp # 创建
- podman network ls # 查看
- podman network inspect lemp # 查看lemp网络的详细信息
- podman search nginx
- podman pull docker.io/library/nginx
- podman search mariadb
- podman pull docker.io/library/mariadb
- podman pull docker.io/bitnami/php-fpm
- podman images
-
- podman run -itd --name mynginx -h nginx --privileged=true --network=lemp --ip 10.88.2.3 -p 80:80 -v /home/html:/usr/share/nginx/html docker.io/library/nginx
- podman run -itd --name mysql -h mysql --privileged=true --network=lemp --ip 10.88.2.4 -p 3306:3306 -v /home/sql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456789 docker.io/library/mariadb
- podman run -itd --name myphp -h php --privileged=true --network=lemp --ip 10.88.2.5 -p 9000:9000 -v /home/html:/usr/share/nginx/html docker.io/bitnami/php-fpm
-
- #下面查看一下开启的容器,查看指定的ip
- podman ps
- podman inspect mynginx | grep IPAddress\":
- podman inspect mysql | grep IPAddress\":
- podman inspect myphp | grep IPAddress\":
- # 进入容器
- podman exec -it mynginx /bin/bash
查看一下nginx的配置文件
- root@nginx:/# whereis nginx
- nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
- root@nginx:/# cd /etc/nginx/
- root@nginx:/etc/nginx# ls
- conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params
- root@nginx:/etc/nginx# nginx -v
- nginx version: nginx/1.21.5
- root@nginx:/etc/nginx# ls conf.d
- default.conf
- root@nginx:/etc/nginx#
将配置文件拉出来,修改后再覆盖回去
- # 从容器中提取配置文件
- podman cp mynginx:/etc/nginx/conf.d/default.conf ./
-
- # 修改完成后,将配置文件传回容器
- podman cp ./default.conf mynginx:/etc/nginx/conf.d/default.conf
-
- # 重启容器
- podman restart mynginx
所修改的内容:
- vim ./default.conf
- # 找到下列内容,去掉行前的注释符号,并配置ip行和路径行
- # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
- #
- location ~ \.php$ {
- root html;
- fastcgi_pass 10.88.2.5:9000; # myhp 被指定的ip
- fastcgi_index index.php;
- # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
- # 注意,下面的路径就是我们构建myphp容器时指定的,注意对比
- fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
- include fastcgi_params;
- }
编辑 info.php,查看是否配置完成
- cat /home/html/info.php
-
- phpinfo();
- ?>
登录本机地址: http://debianpodman-ip/info.php
目前的测试中,出现了 “ mysqli_real_connect(): (HY000/2002): No such file or directory ”的 错误提示,需要修改phpMyAdmin的配置文件来解决
具体方法为:
1.将$/html/phpmyadmin\libraries\config.default.php,修改条目为: $cfg['Servers'][$i]['host']='10.88.2.4';
2.将$/html/phpmyadmin\config.sample.inc.php重命名为config.inc.php,修改条目为: $cfg['Servers'][$i]['host'] = '10.88.2.4';
然后重新登录。
这里我们在构建mariadb数据库时,指定了root账户的密码为 123456789
登录成功后界面右侧会显示下图信息
请参考我之前的文章:docker php 扩展安装合集_lggirls的博客-CSDN博客
- $ podman exec -it myphp /bin/bash # 进入myphp容器
- $ cd /usr/local/bin # 进入安装命令和组件所在目录
- $ ./docker-php-ext-install pdo_mysql # 安装扩展pdo_mysql
- $ ./docker-php-ext-install mysqli # 安装扩展 mysqli
- $ exit # 退出myphp容器
- $ podman myphp restart # 重启容器,使扩展组件生效
配置php
进入 myphp容器,根据info.php页面显示的配置文件信息,探查一下真实的配置文件地址。
例如下图中所示地址,实际上只有最后一行是真实的,前两行都是软链接:
容器内的php.ini文件不含常用的配置内容,可以自己编辑一个 upload.ini文件,将其cp进 最后一行的实际位置中。
- cat ./upload.ini
- # 我所增加的几个常见配置内容:
- file_uploads = On
- memory_limit = 128M
- upload_max_filesize = 64M
- post_max_size = 64M
- max_execution_time = 600
放回到容器中
podman cp ./upload.ini myphp:/opt/bitnami/php/etc/upload.ini
- vi /etc/systemd/system/mynginx.service
- vi /etc/systemd/system/mysql.service
- vi /etc/systemd/system/myphp.service
每个配置文件的内容:
- cat /etc/systemd/system/mynginx.service
- # 内容如下:
- [Unit]
- Description= mynginx service
- After=network.target
- After=network-online.target
- [Service]
- Restart=always
- ExecStart=/usr/bin/podman start -a mynginx
- ExecStop=/usr/bin/podman stop -t 10 mynginx
- [Install]
- WantedBy=multi-user.target
-
- cat /etc/systemd/system/mysql.service
- # 内容如下:
-
- [Unit]
- Description= mysql service
- After=network.target
- After=network-online.target
- [Service]
- Restart=always
- ExecStart=/usr/bin/podman start -a mysql
- ExecStop=/usr/bin/podman stop -t 10 mysql
- [Install]
- WantedBy=multi-user.target
-
- cat /etc/systemd/system/myphp.service
- # 内容如下:
- [Unit]
- Description= myphp service
- After=network.target
- After=network-online.target
- [Service]
- Restart=always
- ExecStart=/usr/bin/podman start -a myphp
- ExecStop=/usr/bin/podman stop -t 10 myphp
- [Install]
- WantedBy=multi-user.target
关闭容器,启用systemd管理,设置为开机启动
- podman stop mynginx mysql myphp
- systemctl start mynginx.service
- systemctl enable mynginx.service
- systemctl start mysql.service
- systemctl enable mysql.service
- systemctl start myphp.service
- systemctl enable myphp.service