使用使用 Docker 和 sprintcube/docker-compose-lamp 项目在 Windows 上搭建一个 LAMP 开发环境,将本地的 PHP 项目、MySQL映射到 Docker 服务器上。
打开命令提示符或 PowerShell,运行以下命令克隆项目:
git clone https://github.com/sprintcube/docker-compose-lamp.git
cd docker-compose-lamp
在克隆的项目中,您将看到一个 docker-compose.yml
文件。您可以根据需要修改服务的配置,例如端口号、PHP 版本等。
在启动项目之前,还需要做一些配置修改。 docker-compose.yml 文件中,MySQL部分是需要配置的映射目录
version: "3"
services:
webserver:
build:
context: ./bin/${PHPVERSION}
container_name: "${COMPOSE_PROJECT_NAME}-${PHPVERSION}"
restart: "always"
ports:
- "${HOST_MACHINE_UNSECURE_HOST_PORT}:80"
- "${HOST_MACHINE_SECURE_HOST_PORT}:443"
links:
- database
volumes:
- ${DOCUMENT_ROOT-./www}:/var/www/html:rw
- ${PHP_INI-./config/php/php.ini}:/usr/local/etc/php/php.ini
- ${SSL_DIR-./config/ssl}:/etc/apache2/ssl/
- ${VHOSTS_DIR-./config/vhosts}:/etc/apache2/sites-enabled
- ${LOG_DIR-./logs/apache2}:/var/log/apache2
- ${XDEBUG_LOG_DIR-./logs/xdebug}:/var/log/xdebug
environment:
APACHE_DOCUMENT_ROOT: ${APACHE_DOCUMENT_ROOT-/var/www/html}
PMA_PORT: ${HOST_MACHINE_PMA_PORT}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
HOST_MACHINE_MYSQL_PORT: ${HOST_MACHINE_MYSQL_PORT}
XDEBUG_CONFIG: "client_host=host.docker.internal remote_port=${XDEBUG_PORT}"
extra_hosts:
- "host.docker.internal:host-gateway"
database:
build:
context: "./bin/${DATABASE}"
container_name: "${COMPOSE_PROJECT_NAME}-${DATABASE}"
restart: "always"
ports:
- "127.0.0.1:${HOST_MACHINE_MYSQL_PORT}:3306"
volumes:
- ${MYSQL_INITDB_DIR-./config/initdb}:/docker-entrypoint-initdb.d
#- ${MYSQL_DATA_DIR-./data/mysql}:/var/lib/mysql
#- ${MYSQL_LOG_DIR-./logs/mysql}:/var/log/mysql
- D:/phpStudy8/Extensions/MySQL5.7.26/log:/var/log/mysql
- D:/phpStudy8/Extensions/MySQL5.7.26/data:/var/lib/mysql
- D:/phpStudy8/Extensions/MySQL5.7.26/my.ini:/etc/mysql/my.cnf
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
command: --sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
phpmyadmin:
image: phpmyadmin
container_name: "${COMPOSE_PROJECT_NAME}-phpmyadmin"
links:
- database
environment:
PMA_HOST: database
PMA_PORT: 3306
PMA_USER: root
PMA_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
UPLOAD_LIMIT: ${UPLOAD_LIMIT}
MEMORY_LIMIT: ${MEMORY_LIMIT}
ports:
- "${HOST_MACHINE_PMA_PORT}:80"
volumes:
- /sessions
- ${PHP_INI-./config/php/php.ini}:/usr/local/etc/php/conf.d/php-phpmyadmin.ini
redis:
container_name: "${COMPOSE_PROJECT_NAME}-redis"
image: redis:latest
ports:
- "127.0.0.1:${HOST_MACHINE_REDIS_PORT}:6379"
在bin php版本目录下的Dockerfile文件,有一些扩展是缺失的,需要我们自己安装,比如swoole扩展,就添加上
RUN pecl install swoole-4.7.1 && \
docker-php-ext-enable swoole
FROM php:7.4.2-apache-buster
# Surpresses debconf complaints of trying to install apt packages interactively
# https://github.com/moby/moby/issues/4032#issuecomment-192327844
ARG DEBIAN_FRONTEND=noninteractive
# Update
RUN apt-get -y update --fix-missing && \
apt-get upgrade -y && \
apt-get --no-install-recommends install -y apt-utils && \
rm -rf /var/lib/apt/lists/*
# Install useful tools and install important libaries
RUN apt-get -y update && \
apt-get -y --no-install-recommends install nano wget \
dialog \
libsqlite3-dev \
libsqlite3-0 && \
apt-get -y --no-install-recommends install default-mysql-client \
zlib1g-dev \
libzip-dev \
libicu-dev && \
apt-get -y --no-install-recommends install --fix-missing apt-utils \
build-essential \
git \
curl \
libonig-dev && \
apt-get install -y iputils-ping && \
apt-get -y --no-install-recommends install --fix-missing libcurl4 \
libcurl4-openssl-dev \
zip \
openssl && \
rm -rf /var/lib/apt/lists/* && \
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Install xdebug
RUN pecl install xdebug-3.1.4 && \
docker-php-ext-enable xdebug && \
mkdir /var/log/xdebug
# Install redis
RUN pecl install redis-5.1.1 && \
docker-php-ext-enable redis
# Install imagick
RUN apt-get update && \
apt-get -y --no-install-recommends install --fix-missing libmagickwand-dev && \
rm -rf /var/lib/apt/lists/* && \
pecl install imagick && \
docker-php-ext-enable imagick
# Other PHP7 Extensions
RUN docker-php-ext-install pdo_mysql && \
docker-php-ext-install pdo_sqlite && \
docker-php-ext-install bcmath && \
docker-php-ext-install mysqli && \
docker-php-ext-install curl && \
docker-php-ext-install tokenizer && \
docker-php-ext-install json && \
docker-php-ext-install zip && \
docker-php-ext-install -j$(nproc) intl && \
docker-php-ext-install mbstring && \
docker-php-ext-install gettext && \
docker-php-ext-install calendar && \
docker-php-ext-install exif
RUN pecl install swoole-4.7.1 && \
docker-php-ext-enable swoole
# Install Freetype
RUN apt-get -y update && \
apt-get --no-install-recommends install -y libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev && \
rm -rf /var/lib/apt/lists/* && \
docker-php-ext-configure gd --enable-gd --with-freetype --with-jpeg && \
docker-php-ext-install gd
# Insure an SSL directory exists
RUN mkdir -p /etc/apache2/ssl
# Enable SSL support
RUN a2enmod ssl && a2enmod rewrite
# Enable apache modules
RUN a2enmod rewrite headers
# Cleanup
RUN rm -rf /usr/src/*
在项目根目录下,运行以下命令启动容器:
docker-compose up -d
该命令会在后台启动所有服务,包括 Apache、MySQL 和 PHP。
打开浏览器,访问 http://localhost
,您应该会看到一个 PHP 信息页面,显示 PHP 的配置详情。
要访问 MySQL 数据库,您可以使用任何支持 MySQL 的客户端,例如 MySQL Workbench。默认的连接信息如下:
您可以将您的 PHP 项目代码放在 htdocs
目录中,代码会自动映射到 Docker 中的 Apache 服务器上。
docker-compose ps
docker-compose stop
docker-compose down
如果您喜欢我的文章,请点击下面按钮随意打赏,您的支持是我最大的动力。
最新评论