lamp环境容器搭建.md

  • 基容器使用alpine linux

podman pull alpine
  • 容器通信

# 把所有的服务放到一个docker-compose文件里面,就能端口通信了
  • 创建一个php容器

# 创建一个名叫 alpine_dev_php 的容器,021b3423115f是alpine的镜像id
podman run --name alpine_dev_php -i -d -t 021b3423115f /bin/sh

# 进入 alpine_dev_php 容器,进行安装php环境
podman exec -it alpine_dev_php sh

# 自行换国内源,然后安装自己的php版本, 我测试环境只安装 php-cgi , 安装完成之后看一下php的配置文件位置等,记录一下即可
apk add php8 php8-cgi

# 如: /etc/php8/php.ini

# 提交到本地镜像, 091f9ef3e39a 是当前容器id
podman commit 091f9ef3e39a lxx/alpine-php8:001
  • 使用podman-compose使用自己的镜像

# 说明
# lxx/alpine-php8:001 就是 commit 提交到本地的镜像
# /home/jcleng/desk/work/podman/alpine-php8/data:/data 配置文件等目录, 运行会进行文件拷贝: /etc/php8/php.ini
# /home/jcleng/desk/work/www 是所有的网站项目目录,映射同等的目录位置, 因为phpcgi解析的时候会读取nginx传入的目录位置
  • alpine-php8/docker-compose.yml 原文

version: "3"
services:
    alpine-php8-run:
      image: lxx/alpine-php8:001
      container_name: alpine-php8-run-c
      ports:
      - 9201:9201
      volumes:
      - /home/jcleng/desk/work/podman/alpine-php8/data:/data
      - /home/jcleng/desk/work/www:/home/jcleng/desk/work/www
      command: /bin/sh -c "cp /etc/php8/php.ini /data/php.ini.bak && /usr/bin/php-cgi8 -b 0.0.0.0:9201 -c /data/php.ini"
  • nginx

# 步骤类似
podman run --name alpine_dev_nginx -i -d -t 021b3423115f /bin/sh
podman exec -it alpine_dev_nginx sh
# 自行换源
# 安装nginx
apk add nginx

# 配置文件目录
/etc/nginx/nginx.conf
/etc/nginx/http.d/default.conf

# 提交镜像
podman commit 4e15e2a6e1d0 lxx/alpine-nginx:001

# 运行下面的compose文件, 然后需要复制并编辑:(/data/http.d/default.conf无需编辑,每次会覆盖)
# /data/http.d/default.conf 拷贝为 /data/http.d/www.conf

# 解析端口即可
fastcgi_pass 127.0.0.1:9201;
  • docker-compose.yml原文

version: "3"
services:
    alpine-nginx-run:
      image: lxx/alpine-nginx:001
      container_name: alpine-nginx-run-c
      ports:
      - 8081:80
      volumes:
      - /home/jcleng/desk/work/podman/alpine-nginx/data:/data
      - /home/jcleng/desk/work/www:/home/jcleng/desk/work/www
      command: /bin/sh -c "/bin/mkdir -p /data/http.d && /bin/cp -r /etc/nginx/http.d/* /data/http.d && /usr/sbin/nginx && /bin/sleep 100000"
  • www.conf原文

# This is a default site configuration which will simply return 404, preventing
# chance access to any other virtualhost.
server {
	listen 80;
    server_name  localhost2;

	location / {
        root /home/jcleng/desk/work/www/tp6/public; #如果由静态文件指定php的根目录
        index index.php;
        if (!-e $request_filename) {
            rewrite ^(.*)$ /index.php?s=$1 last;
            break;
        }
    }
    location ~ \.php$ {
            root /home/jcleng/desk/work/www/tp6/public; #指定php的根目录
            fastcgi_pass 127.0.0.1:9201;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
    }
}