在Debian系统中,使用Docker创建PHP开发环境是一种高效、便捷的方式。Docker可以将应用及其依赖项打包成一个独立的容器,避免了不同环境之间的兼容性问题,同时也方便了开发、测试和部署。下面将详细介绍在Debian中使用Docker创建PHP开发环境的具体步骤。

安装Docker和Docker Compose

首先要在Debian系统上安装Docker和Docker Compose。可以通过以下命令更新系统软件包列表:

sudo apt update

接着安装必要的依赖包:

sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common

添加Docker官方的GPG密钥:

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

添加Docker软件源:

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

再次更新软件包列表:

sudo apt update

安装Docker引擎:

sudo apt install docker-ce docker-ce-cli containerd.io

安装完成后,启动Docker服务并设置开机自启:

sudo systemctl start docker
sudo systemctl enable docker

为了能够以非root用户身份运行Docker命令,将当前用户添加到docker用户组:

sudo usermod -aG docker $USER

注销并重新登录,使更改生效。

接下来安装Docker Compose。可以通过以下命令下载最新版本的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

创建Dockerfile和docker-compose.yml文件

在项目根目录下创建一个Dockerfile,用于构建PHP容器。以下是一个简单的Dockerfile示例:

# 使用官方PHP镜像作为基础镜像
FROM php:7.4-apache

# 安装必要的扩展
RUN apt-get update && apt-get install -y \
    libzip-dev \
    zip \
    unzip \
    && docker-php-ext-install zip pdo_mysql

# 将项目文件复制到容器内的Apache文档根目录
COPY . /var/www/html

# 设置文件权限
RUN chown -R www-data:www-data /var/www/html

在上述Dockerfile中,我们使用了官方的PHP 7.4 Apache镜像作为基础镜像,安装了必要的扩展,将项目文件复制到容器内的Apache文档根目录,并设置了文件权限。

接着创建一个docker-compose.yml文件,用于定义和运行多个Docker容器。以下是一个简单的docker-compose.yml示例:

version: '3'
services:
  php:
    build: .
    ports:
      - "80:80"
    volumes:
      - .:/var/www/html
    depends_on:
      - mysql
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: mydb
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    volumes:
      - mysql-data:/var/lib/mysql
volumes:
  mysql-data:

在这个docker-compose.yml文件中,我们定义了两个服务:php和mysql。php服务使用刚才创建的Dockerfile进行构建,将容器的80端口映射到主机的80端口,将主机的当前目录挂载到容器的/var/www/html目录,并且依赖于mysql服务。mysql服务使用官方的MySQL 8.0镜像,设置了数据库的相关环境变量,并且将数据存储在一个名为mysql-data的卷中。

构建和启动容器

在项目根目录下,使用以下命令构建和启动容器:

docker-compose up -d

这个命令会根据docker-compose.yml文件中的定义,构建和启动所有的服务。-d参数表示在后台运行容器。

在构建和启动过程中,Docker会下载所需的镜像,安装依赖项,并启动容器。可以使用以下命令查看容器的运行状态:

docker-compose ps

如果一切正常,应该可以看到php和mysql两个容器都处于运行状态。

测试PHP开发环境

为了测试PHP开发环境是否正常工作,可以在项目根目录下创建一个简单的PHP文件,例如index.php:

<?php
phpinfo();
?>

然后在浏览器中访问http://localhost,如果能够看到PHP的信息页面,说明PHP开发环境已经成功搭建。

连接到MySQL数据库

在PHP代码中,可以使用PDO或mysqli等扩展来连接到MySQL数据库。以下是一个使用PDO连接到MySQL数据库的示例:

<?php
try {
    $pdo = new PDO('mysql:host=mysql;dbname=mydb', 'user', 'password');
    echo "Connected to the database successfully!";
} catch (PDOException $e) {
    echo "Connection failed: ". $e->getMessage();
}
?>

在上述代码中,我们使用PDO连接到名为mydb的数据库,主机名为mysql,用户名和密码分别为user和password。由于在docker-compose.yml文件中定义了服务名,所以可以直接使用服务名作为主机名。

管理和维护容器

在开发过程中,可能需要对容器进行管理和维护。以下是一些常用的命令:

停止并删除所有容器:

docker-compose down

重新构建和启动容器:

docker-compose up -d --build

查看容器的日志:

docker-compose logs -f

进入容器内部:

docker-compose exec php bash

在这个命令中,php是服务名,可以根据需要替换为其他服务名。

通过以上步骤,就可以在Debian系统中使用Docker创建一个完整的PHP开发环境。这种方式不仅方便快捷,而且可以避免不同环境之间的兼容性问题,提高开发效率。

上一篇下一篇