构建 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!

相关推荐
道法自然|~1 小时前
【PHP】简单的脚本/扫描器拦截与重要文件保护
开发语言·爬虫·php
java_logo2 小时前
Apache IoTDB Docker 容器化部署指南:从入门到生产环境实践
docker·容器·apache·iotdb·iotdb部署教程·iotdb部署文档·docker部署iotdb
发光小北2 小时前
SG-CAN (FD) NET-210(双通道 CAN (FD) 转以太网网关)特点与功能介绍
开发语言·网络·php
处女座_三月2 小时前
kubectl 命令行更新项目版本号
docker·容器·kubernetes
Cat God 0073 小时前
基于Docker的MySQL 主从复制(读写分离)
mysql·docker·容器
m0_474606783 小时前
Linux安装docker教程
linux·运维·docker
Spider赵毅4 小时前
python实战 | 如何使用海外代理IP抓取Amazon黑五数据
python·tcp/ip·php
Jewel Q4 小时前
QEMU、KVM、Docker、K8s(Kubernetes)
docker·容器·kubernetes
李慕婉学姐4 小时前
【开题答辩过程】以《基于PHP的动漫社区的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
开发语言·mysql·php
diudiu96284 小时前
Maven配置阿里云镜像
java·spring·阿里云·servlet·eclipse·tomcat·maven