使用Dockerfile搭建PHP8镜像

编写Dockerfile

vim Dockerfile
FROM php:8.1.0RC5-fpm-buster
MAINTAINER itxiaoma <tlxma@163.com>
#buster是基于Debian Linux发行的一个版本,像PHP、Python之类的语言都会使用这个版本的Debian搭建Docker基础镜像。
#docker中php扩展安装方式
#1、PHP源码文件目录自带扩展 docker-php-ext-install直接安装
#2、pecl扩展 因为一些扩展不包含在PHP源码文件中,PHP 的扩展库仓库中存在。用 pecl install 安装扩展,再用 docker-php-ext-enable 命令 启用扩展
#3、其他扩展 一些既不在 PHP 源码包,也不再 PECL 扩展仓库中的扩展,可以通过下载扩展程序源码,编译安装的方式安装
#redis扩展 仓库地址 https://pecl.php.net/package/redis
ENV PHPREDIS_VERSION 5.3.4
#memcached扩展 仓库地址 https://pecl.php.net/package/memcached
ENV MEMCACHED_VERSION 3.1.5
#mongodb扩展 https://pecl.php.net/package/mongodb
ENV MONGODB_VERSION 1.11.1
# 设置时间
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo 'Asia/Shanghai' > /etc/timezone
# 扩展依赖
RUN apt-get update \
    && apt-get install -y \
        vim \
        curl \
        wget \
        git \
        zip \
        libz-dev \
        libssl-dev \
        libnghttp2-dev \
        libpcre3-dev \
        libmemcached-dev \
        zlib1g-dev \
    && apt-get clean \
    && apt-get autoremove
# Composer安装
RUN curl -sS https://getcomposer.org/installer | php \
    && mv composer.phar /usr/local/bin/composer \
    && composer self-update --clean-backups
# Mysqli 扩展 自带 直接安装即可(当前数据库使用的mysqli查询的)
RUN docker-php-ext-install mysqli
# PDO 扩展 自带 直接安装即可
RUN docker-php-ext-install pdo_mysql
# Bcmath 扩展 自带 直接安装即可
RUN docker-php-ext-install bcmath
# Redis 扩展下载 pecl本地安装 开启扩展
RUN wget http://pecl.php.net/get/redis-${PHPREDIS_VERSION}.tgz -O /tmp/redis.tgz \
    && pecl install /tmp/redis.tgz \
    && rm -rf /tmp/redis.tgz \
    && docker-php-ext-enable redis
# memcached 扩展下载 pecl本地安装 开启扩展 前面已经通过 apt-get安装了libmemcached-dev依赖
RUN wget http://pecl.php.net/get/memcached-${MEMCACHED_VERSION}.tgz -O /tmp/memcached.tgz \
    && pecl install /tmp/memcached.tgz \
    && rm -rf /tmp/memcached.tgz \
    && docker-php-ext-enable memcached

# mongodb 扩展下载 pecl本地安装 开启扩展 前面已经通过 
RUN wget http://pecl.php.net/get/mongodb-${MONGODB_VERSION}.tgz -O /tmp/mongodb.tgz \
    && pecl install /tmp/mongodb.tgz \
    && rm -rf /tmp/mongodb.tgz \
    && docker-php-ext-enable mongodb
# 开启php-fpm
RUN php-fpm

提交镜像

docker build -f Dockerfile -t itxiaoma/php8:1.0 .

docker login -u itxiaoma

docker push itxiaoma/php8:1.0

使用docker-compose搭建LNMP环境

编写docker-compose文件

vim docker-compose.yml
version: '3.5'

services:

  nginx:
    image: nginx:alpine
    restart: always
    volumes:
      - ./config/nginx:/etc/nginx/conf.d
      - ./logs/nginx:/var/log/nginx
      - ./workspace:/workspace
    ports:
      - 80:80
      - 443:443

  php:
    image: itxiaoma/php8:1.0
    restart: always
    command: php-fpm
    volumes:
      - ./workspace:/workspace
    stdin_open: true
    tty: true

  dbm:
    image: mysql:8.0.26
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: xxx
    volumes:
      - './storage/mysql:/var/lib/mysql'
    ports:
      - 3306:3306
    
  dbr:
    image: redis:alpine
    restart: always
    volumes:
      - './storage/redis:/data'
    ports:
      - 6379:6379
    command: redis-server --requirepass xxx --appendonly yes
  
  dns:
    image: jpillora/dnsmasq
    ports:
      - 53:53/udp
      - 5380:8080
    volumes:
      - './config/dns/dnsmasq.conf:/etc/dnsmasq.conf'

编辑Nginx配置

vim cinfig/nginx/test.conf
server {
    listen 80;
    server_name lnmp.test;
    index index.php;
    charset utf-8;
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    location ~ \.php$ {
        fastcgi_pass php:9000;
        fastcgi_param SCRIPT_FILENAME /workspace/xxx/public/$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

配置DNS

vim config/dns/dnsmasq.conf
log-queries
no-resolv
server=223.5.5.5
server=223.6.6.6
address=/.test/127.0.0.1

注:53是域名解析端口,5380是DNS的可视化页面,生产环境不需要dns

执行

docker-compose up

参考资料:通过docker自定义安装php7.x并且安装源码扩展、pecl扩展、及其他扩展


IT小马
1.2k 声望166 粉丝

Php - Go - Vue - 云原生