在Debian系统上使用Docker搭建LAMP(Linux、Apache、MySQL、PHP)一键环境,能快速部署出适用于开发和测试的Web应用环境。下面将详细介绍操作步骤。

一、安装Docker和Docker Compose

首先要确保系统已经安装好Docker和Docker Compose。在Debian系统中,可以通过以下命令来安装Docker:

sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

安装完成后,可以通过以下命令验证Docker是否安装成功:

sudo docker run hello-world

若看到相关输出信息,则表示安装成功。接着安装Docker Compose,可使用以下命令:

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

验证Docker Compose是否安装成功:

docker-compose --version

二、创建项目目录和文件

创建一个新的项目目录,例如命名为“lamp_project”,并进入该目录:

mkdir lamp_project
cd lamp_project

在该目录下创建一个名为“docker-compose.yml”的文件,用于定义LAMP环境的服务配置。以下是一个示例的“docker-compose.yml”文件内容:

version: '3'
services:
  web:
    image: httpd:2.4
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/local/apache2/htdocs
    depends_on:
      - php
  php:
    image: php:7.4-apache
    volumes:
      - ./html:/var/www/html
    depends_on:
      - db
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydatabase
      MYSQL_USER: myuser
      MYSQL_PASSWORD: mypassword
    volumes:
      - ./mysql-data:/var/lib/mysql

在上述配置中,定义了三个服务:web(Apache服务器)、php(PHP解释器)和db(MySQL数据库)。通过“volumes”将本地目录与容器内目录进行挂载,方便数据的持久化和代码的修改。

三、创建HTML和PHP文件

在项目目录下创建一个名为“html”的目录,用于存放Web应用的代码。在“html”目录下创建一个简单的HTML文件“index.html”,内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>My LAMP Site</title>
</head>
<body>
    <h1>Welcome to my LAMP site!</h1>
</body>
</html>

再创建一个PHP文件“info.php”,用于测试PHP环境是否正常工作,内容如下:

<?php
phpinfo();
?>

四、启动LAMP环境

在项目目录下,使用以下命令启动LAMP环境:

docker-compose up -d

该命令会根据“docker-compose.yml”文件的配置,下载所需的镜像并启动相应的容器。“-d”参数表示以守护进程模式运行,即容器在后台运行。

可以使用以下命令查看容器的运行状态:

docker-compose ps

若看到三个容器(web、php、db)都处于“Up”状态,则表示LAMP环境已成功启动。

五、测试LAMP环境

打开浏览器,访问“http://localhost”,应该能看到之前创建的“index.html”页面。访问“http://localhost/info.php”,应该能看到PHP的信息页面,这表明PHP环境也正常工作。

接下来测试数据库连接。在“html”目录下创建一个新的PHP文件“test_db.php”,内容如下:

<?php
$servername = "db";
$username = "myuser";
$password = "mypassword";
$dbname = "mydatabase";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接
if ($conn->connect_error) {
    die("Connection failed: ". $conn->connect_error);
}
echo "Connected successfully";

$conn->close();
?>

在浏览器中访问“http://localhost/test_db.php”,若看到“Connected successfully”的提示信息,则表示数据库连接正常。

六、停止和删除LAMP环境

当不再需要LAMP环境时,可以使用以下命令停止并删除相关容器:

docker-compose down

该命令会停止并删除根据“docker-compose.yml”文件创建的所有容器,但不会删除挂载的数据卷。如果需要删除数据卷,可以使用以下命令:

docker-compose down -v

七、常见问题及解决方法

1. 端口冲突问题

如果在启动容器时遇到端口冲突问题,例如提示“Bind for 0.0.0.0:80 failed: port is already allocated”,可以修改“docker-compose.yml”文件中“ports”部分的配置,将宿主机的端口修改为其他未被占用的端口,如“8080:80”。

2. 数据库连接问题

若在测试数据库连接时出现连接失败的情况,首先要检查“docker-compose.yml”文件中数据库的环境变量配置是否正确,包括“MYSQL_ROOT_PASSWORD”、“MYSQL_USER”、“MYSQL_PASSWORD”等。同时,要确保PHP文件中数据库连接的参数与配置一致。

3. 文件权限问题

在使用挂载目录时,可能会遇到文件权限问题。可以通过修改宿主机上相关目录的权限来解决,例如:

sudo chmod -R 777 html mysql-data

通过以上步骤,你可以在Debian系统上使用Docker快速搭建一个LAMP一键环境,方便进行Web应用的开发和测试。在实际使用过程中,还可以根据具体需求对“docker-compose.yml”文件进行修改和扩展,以满足不同的项目要求。