构建 PHP 开发环境:使用 Docker 和阿里云镜像加速器

2. ji引言

docker

Docker 是一个开源的容器化平台,它允许开发者打包应用及其依赖项到一个轻量级、可移植的容器中,然后可以在任何支持 Docker 的机器上运行这些容器。Docker 容器非常适合持续开发、测试和部署的工作流程。

主要特点:
  1. 轻量级和快速:Docker 容器共享宿主机的内核,不需要额外的操作系统,因此比传统虚拟机更轻量、启动更快。

  2. 可移植性:容器可以在任何安装了 Docker 的系统上运行,不受底层平台限制。

  3. 隔离性:每个容器都在自己的环境中运行,与其他容器和宿主系统隔离。

  4. 可重复性:Docker 容器的配置和依赖都定义在 Dockerfile 中,这确保了环境的一致性和可重复性。

  5. 易于管理:Docker 提供了强大的命令行和 API 接口,方便管理容器。

  6. 生态系统Docker Hub和其他容器注册中心提供了大量预构建的容器镜像。

php

PHP 是一种广泛使用的开源服务器端脚本语言,特别适合于 web 开发并可嵌入 HTML 中。PHP 代码在服务器端执行,生成客户端浏览器可显示的 HTML。

主要特点:
  1. 灵活性:PHP 与 HTML 之间的无缝集成提供了高度的灵活性,允许动态内容的生成。

  2. 跨平台:PHP 可以在多种操作系统上运行,如 Windows、Linux 和 macOS。

  3. 广泛的数据库支持:PHP 支持多种数据库,如 MySQL、PostgreSQL 和 SQLite。

  4. 易于学习:对于新手来说,PHP 是一种相对容易学习的语言,具有广泛的社区支持和资源。

  5. 丰富的库和框架:PHP 拥有大量的库和开发框架,如 Laravel、Symfony 等,这些可以加快开发过程。

  6. 适用于各种规模的项目:从小型个人博客到大型企业级应用,PHP 都是一个很好的选择。

一、准备工作

1. 安装docker

详细流程参见我之前的博客:无桌面版docker在Ubuntu系统上安装-CSDN博客

2. 基础知识介绍

  • Dockerfile:这是一个文本文件,包含了一系列的指令,用于定义如何构建 Docker 镜像。例如,它可以包含从基础镜像开始、安装软件包、复制文件和设置环境变量的指令。

  • 镜像(Image):Docker 镜像是一个轻量级、独立、可执行的软件包,包含运行应用所需的一切:代码、运行时、库、环境变量和配置文件。

  • 容器(Container):当 Docker 镜像运行时,它在 Docker 引擎上运行的实例就是一个容器。容器是应用程序及其运行环境的封装。

  • 仓库(Registry):Docker Registry 是存储 Docker 镜像的地方。Docker Hub 是最常用的公共仓库,您可以从中拉取(pull)镜像,也可以将自己的镜像推送(push)到 Docker Hub 或其他 Registry。

二、创建dockerfile

1. Dockerfile基本结构

一个典型的 Dockerfile 包括以下部分:

  1. FROM : 指定基础镜像。所有的 Dockerfile 都必须从一个基础镜像开始。例如,如果您正在构建一个 PHP 应用,您可能会从一个官方的 PHP 镜像开始。

  2. RUN: 执行命令。用于在构建镜像时执行命令,比如安装软件包。

  3. COPYADD: 复制文件。将本地文件复制到镜像中。

  4. WORKDIR: 设置工作目录。指定容器内的工作目录。

  5. ENV: 环境变量。用于设置环境变量。

  6. EXPOSE: 暴露端口。指示 Docker 在运行容器时监听的端口。

  7. CMDENTRYPOINT: 定义容器启动后执行的命令。

2. 快速搭建php的docker镜像

2.1 编写Dockerfile

这里仅仅只是作为例子,可以根据自己的需求进行更改。

bash 复制代码
# 使用官方 PHP 镜像作为基础
FROM php:7.4-cli

# 将 APT 源更改为阿里云源
RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak && \
    echo "deb http://mirrors.aliyun.com/debian/ buster main non-free contrib" >/etc/apt/sources.list && \
    echo "deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib" >>/etc/apt/sources.list && \
    echo "deb http://mirrors.aliyun.com/debian-security buster/updates main" >>/etc/apt/sources.list && \
    echo "deb-src http://mirrors.aliyun.com/debian-security buster/updates main" >>/etc/apt/sources.list && \
    echo "deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib" >>/etc/apt/sources.list && \
    echo "deb-src http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib" >>/etc/apt/sources.list && \
    echo "deb http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib" >>/etc/apt/sources.list && \
    echo "deb-src http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib" >>/etc/apt/sources.list

# 更新 APT 缓存并安装 RRDtool
RUN apt-get update && apt-get install -y rrdtool

# 安装 PHP 扩展
RUN docker-php-ext-install mysqli pdo pdo_mysql

# 设置容器中的工作目录
WORKDIR /usr/src/myapp

# 容器启动时保持运行
CMD tail -f /dev/null

2.2 构建和运行Dockerfile

一旦您编写了 Dockerfile,可以使用以下命令来构建镜像:

bash 复制代码
docker build -t my-php-app .

这里,my-php-app 是您给镜像指定的名字,. 指定了 Dockerfile 和上下文的路径(当前目录)。

在命令行输入

bash 复制代码
docker images

查看docker镜像是否搭建成功。

三、运行Docker容器

构建完镜像后,使用以下命令启动一个容器:

bash 复制代码
docker run -it --rm --name my-php-container -v $(pwd):/usr/src/myapp php-dev-env

这个命令会启动一个名为 my-php-container 的容器,并将当前目录挂载到容器中的 /usr/src/myapp。这样,你就可以在本地编辑文件,而改动会实时反映到容器内。

四、测试php环境

1. 创建php脚本

在您项目的根目录下($(pwd)),创建一个名为 main.php 的新文件,然后添加以下内容之一:

main.php

这个脚本会输出一个简单的文本消息,验证 PHP 脚本是否能正确运行。

php 复制代码
<?php
echo "Hello, World!";

2. 进入容器

php 复制代码
sudo docker exec -it my-php-container bash

3. 运行程序

在命令行输入:

bash 复制代码
php main.php

可以看到会在命令行输出:Hello, World!

相关推荐
我命由我123455 分钟前
PHP - PHP 简易 Web 服务器、基础接口开发
服务器·开发语言·前端·php·intellij-idea·idea·intellij idea
古怪今人16 分钟前
WSL和Hyper-V Ubuntu安装docker Docker安装Reids、MySQL、PostgreSQL和RabbitMQ
运维·docker·容器
周易宅19 分钟前
Docker MySQL 8.0.45 性能优化配置文档
mysql·docker·性能优化
郝学胜-神的一滴21 分钟前
系统设计 012:从用户系统出发,吃透缓存、数据库与高并发设计
java·数据库·python·缓存·php·软件构建
ん贤22 分钟前
Kubernetes 核心资源对象与应用编排基础
云原生·容器·kubernetes
LZZ and MYY31 分钟前
将Virtual PLCnext 部署在PVE的LXC容器
云原生·容器·kubernetes
仙柒41514 小时前
Docker存储原理
运维·docker·容器
不正经的小寒14 小时前
PHP 8.2 核心特性
php
不正经的小寒14 小时前
PHP 8.1 核心特性
php
阿里云大数据AI技术16 小时前
Hologres CLI与Skills担当Agent-Ready 基础设施,共建数仓智能新生态_
人工智能·阿里云·agent·hologres·skills