Docker 搭建 PHP8 + Apache + Laravel 环境

下载镜像

复制配置文件

创建临时容器

docker run -itd --name hi-tech -p 80:80 php:apache-buster

复制文件

  • 创建文件夹
    mkdir -p /docker/conf/temp.test/php
    mkdir -p /docker/conf/temp.test/apache
    mkdir -p /docker/wwwroot
  • 复制配置文件
    docker cp 容器ID:/usr/local/etc /docker/conf/temp.test/php/etc
    docker cp 容器ID:/etc/apache2/sites-available /docker/conf/temp.test/apache/sites-available
    docker cp 容器ID:/var/www/html /docker/wwwroot/html

删除临时容器

  • 关闭容器: docker stop 容器ID
  • 删除容器: docker rm 容器ID

创建最终使用容器

docker run -itd --name php -p 80:80 -v /docker/wwwroot/html:/var/www/html -v /docker/conf/temp.test/php/etc:/usr/local/etc -v /docker/conf/temp.test/apache/sites-available:/etc/apache2/sites-available php:apache-buster

安装 PHP 扩展

  • 参考自该 文章
  • 安装 pdo_mysql
  • 进入容器: docker exec -it 容器ID /bin/bash, 执行以下命令:
    • docker-php-source extract
    • cd /usr/src/php/ext
    • docker-php-ext-install pdo_mysql
    • command + d 退出容器
    • 编辑之前复制出来的 PHP 配置文件, 即 /docker/conf/temp.test/php/etc/php.ini-development/docker/conf/temp.test/php/etc/php.ini-production, 去掉文件中 ;extension=pdo_mysql 前面的 ;
    • 重启容器: docker restart 容器ID

修改 Apache 配置

开启 rewrite 模块

  • 进入容器: docker exec -it 容器ID /bin/bash
  • a2enmod rewrite
  • 重启容器: docker restart 容器ID

添加站点

  • cd /docker/conf/temp.test/apache/sites-available
  • vim temp.test.conf, 添加以下内容:
    <VirtualHost *:80>
      ServerName www.temp.test
      DocumentRoot /var/www/html/temp.test
      <Directory "/var/www/html/temp.test">
          SetOutputFilter DEFLATE
          AllowOverride All
          Require all granted
          DirectoryIndex index.php index.html index.htm default.php default.html default.htm
      </Directory>
      ErrorLog ${APACHE_LOG_DIR}/error.log
      CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
  • 进入容器: docker exec -it 容器ID /bin/bash
  • cd /etc/apache2/sites-enabled
  • ln -s ../sites-available/temp.test.conf ./temp.test.conf

数据库

  • 数据库使用的是宿主机的, 所以在 Laravel.env 配置文件中, MySQL 的地址写服务器的 IP, 可以使用 ifconfig 来查看

ps: 第一次将 docker 付诸于行动, 是真的…唉 :broken_heart:

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!