IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 一个支持 PHP8 / Laravel8 的 docker 镜像 -> 正文阅读

[PHP知识库]一个支持 PHP8 / Laravel8 的 docker 镜像

最近组里的一个项目使用了 Laravel 8 来开发。Laravel 8 自带的 sail 提供了开发时的镜像打包脚本,但它是直接运行 php 命令行进程,不能用于生产环境。

为了方便开发和部署,我做了一个 Nginx + PHP 8fpm)的 docker 镜像:

https://hub.docker.com/r/tangramor/nginx-php8-fpm

它 基于官方的 php:8-fpm-alpine, node:15-alpine3.13, nginx:alpinericharvey/nginx-php-fpm 等镜像和构建脚本,实际的镜像大小比 sail 的要小很多: 400M vs 700M。

怎么用呢?

开发环境

假如是在开发环境开发一个 Laravel 8 的项目,可以直接把 docker-compose.yml 里的镜像打包部分去掉,改成用我的这个镜像,这个镜像也直接支持 sail 的命令行操作。例子:

# For more information: https://laravel.com/docs/sail
version: '3'
services:
 ?  laravel.test:
 ? ? ?  image: tangramor/nginx-php8-fpm
 ? ? ?  ports:
 ? ? ? ? ?  - '${APP_PORT:-80}:80'
 ? ? ?  environment:
 ? ? ? ? ?  TZ: 'Asia/Shanghai'
 ? ? ? ? ?  WEBROOT: '/var/www/html/public'
 ? ? ? ? ?  PHP_REDIS_SESSION_HOST: 'redis'
 ? ? ? ? ?  CREATE_LARAVEL_STORAGE: '1'
 ? ? ?  volumes:
 ? ? ? ? ?  - '.:/var/www/html'
 ? ? ?  networks:
 ? ? ? ? ?  - sail
 ? ? ?  depends_on:
 ? ? ? ? ?  - mysql
 ? ? ? ? ? ?# - pgsql
 ? ? ? ? ?  - redis
 ? ? ? ? ? ?# - selenium
?
 ? ?# selenium:
 ? ?# ? ? image: 'selenium/standalone-chrome'
 ? ?# ? ? volumes:
 ? ?# ? ? ? ? - '/dev/shm:/dev/shm'
 ? ?# ? ? networks:
 ? ?# ? ? ? ? - sail
?
 ?  mysql:
 ? ? ?  image: 'mariadb:10'
 ? ? ? ?#ports:
 ? ? ? ?# ?  - '${FORWARD_DB_PORT:-3306}:3306'
 ? ? ?  environment:
 ? ? ? ? ?  MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
 ? ? ? ? ?  MYSQL_DATABASE: '${DB_DATABASE}'
 ? ? ? ? ?  MYSQL_USER: '${DB_USERNAME}'
 ? ? ? ? ?  MYSQL_PASSWORD: '${DB_PASSWORD}'
 ? ? ? ? ?  MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
 ? ? ?  volumes:
 ? ? ? ? ?  - 'sailmysql:/var/lib/mysql'
 ? ? ?  networks:
 ? ? ? ? ?  - sail
 ? ? ?  security_opt:
 ? ? ? ? ?  - seccomp:unconfined
 ? ? ?  healthcheck:
 ? ? ? ? ?  test: ["CMD", "mysqladmin", "ping"]
?
# ?  pgsql:
# ? ? ?  image: postgres:13
# ? ? ?  ports:
# ? ? ? ? ?  - '${FORWARD_DB_PORT:-5432}:5432'
# ? ? ?  environment:
# ? ? ? ? ?  PGPASSWORD: '${DB_PASSWORD:-secret}'
# ? ? ? ? ?  POSTGRES_DB: '${DB_DATABASE}'
# ? ? ? ? ?  POSTGRES_USER: '${DB_USERNAME}'
# ? ? ? ? ?  POSTGRES_PASSWORD: '${DB_PASSWORD:-secret}'
# ? ? ?  volumes:
# ? ? ? ? ?  - 'sailpostgresql:/var/lib/postgresql/data'
# ? ? ?  networks:
# ? ? ? ? ?  - sail
# ? ? ?  healthcheck:
# ? ? ? ?  test: ["CMD", "pg_isready", "-q", "-d", "${DB_DATABASE}", "-U", "${DB_USERNAME}"]
?
 ?  redis:
 ? ? ?  image: 'redis:alpine'
 ? ? ? ?#ports:
 ? ? ? ?# ?  - '${FORWARD_REDIS_PORT:-6379}:6379'
 ? ? ?  volumes:
 ? ? ? ? ?  - 'sailredis:/data'
 ? ? ?  networks:
 ? ? ? ? ?  - sail
 ? ? ?  healthcheck:
 ? ? ? ?  test: ["CMD", "redis-cli", "ping"]
?
 ?  memcached:
 ? ? ?  image: 'memcached:alpine'
 ? ? ?  ports:
 ? ? ? ? ?  - '11211:11211'
 ? ? ?  networks:
 ? ? ? ? ?  - sail
?
 ?  mailhog:
 ? ? ?  image: 'mailhog/mailhog:latest'
 ? ? ?  ports:
 ? ? ? ? ?  - '${FORWARD_MAILHOG_PORT:-1025}:1025'
 ? ? ? ? ?  - '${FORWARD_MAILHOG_DASHBOARD_PORT:-8025}:8025'
 ? ? ?  networks:
 ? ? ? ? ?  - sail
?
networks:
 ?  sail:
 ? ? ?  driver: bridge
?
volumes:
 ?  sailmysql:
 ? ? ?  driver: local
# ?  sailpostgresql:
# ? ? ?  driver: local
 ?  sailredis:
 ? ? ?  driver: local

生产环境

要部署一个 Nginx + PHP8 的生产环境虽然不麻烦,但容器能够更快捷的帮你完成任务,还能实现环境隔离。写一个 Dockerfile

FROM tangramor/nginx-php8-fpm
?
# 拷贝源码
COPY . /var/www/html
?
# 如果在源码根目录下存在 conf 目录,那么 start.sh 脚本会
# 拷贝 conf/nginx.conf 到 /etc/nginx/nginx.conf
# 拷贝 conf/nginx-site.conf 到 /etc/nginx/conf.d/default.conf
# 拷贝 conf/nginx-site-ssl.conf 到 /etc/nginx/conf.d/default-ssl.conf
?
# 拷贝 ssl 证书文件
COPY conf/ssl /etc/nginx/ssl
?
# start.sh 会设置时区为 $TZ 值
ENV TZ Asia/Shanghai
?
# start.sh 会替换缺省的 web 根目录为 $WEBROOT 值
ENV WEBROOT /var/www/html/public
?
# start.sh 会使用 redis 作为会话存储方式并连接 $PHP_REDIS_SESSION_HOST 服务器或容器名
ENV PHP_REDIS_SESSION_HOST redis
?
# 如果 $CREATE_LARAVEL_STORAGE = 1,start.sh 会创建 laravel storage 目录结构
ENV CREATE_LARAVEL_STORAGE "1"
?
# 下载 node/php 依赖包, 
# 有些 nodejs 模块需要 gcc/g++
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
 ?  && apk add --no-cache --virtual .build-deps gcc g++ libc-dev make \
 ? ?# set preferred npm mirror
 ?  && cd /usr/local \
 ?  && npm config set registry https://registry.npm.taobao.org \
 ?  && cd /var/www/html \
 ? ?# install node modules
 ?  && npm install \
 ? ?# install php composer packages
 ?  && composer install \
 ? ?# clean
 ?  && apk del .build-deps \
 ? ?# build js/css
 ?  && npm run dev \
 ? ?# set .env
 ?  && cp .env.test .env \
 ? ?# change /var/www/html user/group
 ?  && chown -Rf nginx.nginx /var/www/html

用它来打包你的 Laravel 8 应用为一个容器镜像,就可以部署了。

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-07-10 14:19:19  更:2021-07-10 14:21:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 5:37:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码