ubanutu安装php,docker搭建php环境

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 16:00   1102   0

前言

本文根据参考文章,自己动手试了搭建PHP环境,对里面的Dockerfile的编写

做了最新的修改,以此记录,完整代码查看传送门

说明:

镜像下载过慢,可使用国内镜像加速,具体可自行查询

根据此方法是 用了四个镜像,生成了四个容器,容器之间的启动,根据docker-compose管理

当然也可以 用一个基础镜像,在此镜像的基础上 安装 nginx php等软件,容器也只有一个,就像本机安装一样

目录结构

app # 项目目录

index.php

test

-test.php

data # 数据目录

mysql

redis

logs # 日志目录

nginx

mysql

php-fpm

docker_self # docker目录

docker-compose.yml

mysql

-Dockerfile

-conf.d

-my.conf

nginx

-Dockerfile

-nginx.conf

-conf.d

-www.conf

php

-Dokcerfile

-php-fpm.conf

-php-fom.d

-www.conf

-idc.ini

redis

-Dockerfile

php的dockerfile

FROM php:7.2-fpm

# 设置时区

ENV TZ=Asia/Shanghai

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 更新安装依赖包和PHP核心拓展

RUN apt-get update && apt-get install -y \

git \

libfreetype6-dev \

libjpeg62-turbo-dev \

libpng-dev \

&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \

&& docker-php-ext-install -j$(nproc) gd \

&& docker-php-ext-install zip \

&& docker-php-ext-install pdo_mysql \

&& docker-php-ext-install opcache \

&& docker-php-ext-install mysqli \

&& rm -r /var/lib/apt/lists/*

# 安装 PECL 拓展,这里我们安装的是redis psr

# 最新的phalcon扩展,需要 psr

RUN pecl install redis-5.0.2 \

&& pecl install psr \

&& docker-php-ext-enable redis psr

# 安装第三方拓展,这里是 Phalcon 拓展

RUN cd /home \

&& git clone --depth=1 git://github.com/phalcon/cphalcon.git \

&& cd cphalcon/build \

&& ./install \

&& echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/phalcon.ini \

&& rm -rf /home/*

# 添加配置文件,新添加的phalcon项目需要

COPY idc.ini /data/app/idc/idc.ini

WORKDIR /data

我们使用了 php:7.2-fpm 的镜像

php的扩展安装分为 核心扩展 和 pcel扩展 以及源代码的安装

具体可参考官方文档

phalcon的扩展,利用了git下载源文件的方式

git在api-get时已安装

其他的dockerfile

nginx:

FROM nginx:alpine

# set timezome

ENV TZ=Asia/Shanghai

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

mysql:

FROM mysql:5.7

# set timezome

ENV TZ=Asia/Shanghai

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

redis:

FROM redis:alpine

# set timezome

ENV TZ=Asia/Shanghai

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

注意:

nginx的配置文件中 php-fpm 不为本机 127.0.0.1

而且 docker-compose.yml中的名称 php-fpm

docker-compose的编写

version: '3.2'

services:

php-fpm:

build: ./php

ports:

- "9000:9000"

links:

- mysql-db:mysql-db

- redis-db:redis-db

volumes:

- ../app:/data/www:rw

- ./php/php.ini:/usr/local/etc/php/php.ini:ro

- ./php/php-fpm.conf:/usr/local/etc/php/php-fpm.conf:ro

- ./php/php-fpm.d:/usr/local/etc/php/php-fpm.d:ro

- ../logs/php-fpm:/var/logs/php-fpm

- ../logs/contento:/data/logs/contento:rw

restart: always

command: php-fpm

nginx:

build: ./nginx

depends_on:

- php-fpm

links:

- php-fpm:php-fpm

volumes:

- ../app:/data/www:rw

- ./nginx/conf.d:/etc/nginx/conf.d:ro

- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro

- ../logs/nginx:/var/logs/nginx

ports:

- "80:80"

- "8080:8080"

- "443:443"

restart: always

command: nginx -g 'daemon off;'

mysql-db:

build: ./mysql

ports:

- "3306:3306"

volumes:

- ../data/mysql:/var/lib/mysql:rw

- ../logs/mysql:/var/lib/mysql-logs:rw

- ./mysql/conf.d:/etc/mysql/conf.d:ro

environment:

MYSQL_ROOT_PASSWORD: root

MYSQL_DATABASE: test

MYSQL_USER: test

MYSQL_PASSWORD: test123

restart: always

command: "--character-set-server=utf8"

redis-db:

build: ./redis

ports:

- "6379:6379"

volumes:

- ../data/redis:/data

restart: always

php以及nginx等的配置文件映射为外部文件

方便修改其配置

项目的日志文件以及nginx和php的日志文件映射为外部目录

防止容器重启后,无日志的情况

启动与停止

编写好完毕后,可使用 docker-compose up 启动

有错误,则根据输出调试

启动没问题后,以后可使用 docker-compose up -d 后台启动

docker container ls 查看启动容器

docker image ls 查看镜像列表

停止服务,可使用 docker-compose stop

缺点

镜像太大

FROM php:7.2-fpm

非 alpine的镜像,默认是以 ubanutu 为基础的,

可以使用 apt-get,docker-php-ext-* 等命令

但生成的镜像 非常大

alpine镜像 只能 使用 apk 的方式安装软件包

待做

alpine镜像的制作

laradock的使用

参考

来源:https://www.cnblogs.com/fanfan259/p/11526432.html

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP