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

news/2024/11/24 9:08:14/

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

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

# 使用官方 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,可以使用以下命令来构建镜像:

docker build -t my-php-app .

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

在命令行输入

docker images

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

三、运行Docker容器

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

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
echo "Hello, World!";

2. 进入容器

sudo docker exec -it my-php-container bash

3. 运行程序

在命令行输入:

php main.php

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


http://www.ppmy.cn/news/1296413.html

相关文章

OpenAI ChatGPT-4开发笔记2024-05:windows下anaconda中设置visual studio code workspace

这里写自定义目录标题 1 安装anaconda和vscode2 Create an Anaconda Environment3 select Python Interpreter4 Workspace5 Open Workspace With File6 开发文件夹加入workspace7 美化 1 安装anaconda和vscode 标配。 2 Create an Anaconda Environment conda create --name…

【mysql】—— 事务

目录 &#xff08;一&#xff09;前言 &#xff08;二&#xff09;事务的理解 1、为什么会出现事务 2、什么是事务&#xff1f; 3、事务的版本支持 4、事务提交方式 &#xff08;三&#xff09;事务常见操作方式 1、正常演示 - 证明事务的开始与回滚 2、非正常演示…

大数据StarRocks(四) :常用命令

这次主要介绍生产工作中使用Starrocks时的常用命令 4.1 连接StarRocks 4.1.1 Linux命令行连接 [roothadoop1011 fe]# yum install mysql -y [roothadoop1011 fe]# mysql -h hadoop101 -uroot -P9030 -p4.1.2 Windows客户端 DBeaver 连接 4.2 常用命令 4.2.1 查看状态 1. 查…

基于SpringBoot的考务报名平台的设计与实现,java

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的考务报名平台的设计与实…

基于SSM的图书商城(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的图书商城&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringMv…

电子学会C/C++编程等级考试2023年12月(三级)真题解析

C/C++编程(1~8级)全部真题・点这里 第1题:因子问题 任给两个正整数N、M,求一个最小的正整数a,使得a和(M-a)都是N的因子。 时间限制:10000 内存限制:65536 输入 包括两个整数N、M。N不超过1,000,000。 输出 输出一个整数a,表示结果。如果某个案例中满足条件的正整数不存…

Linux程序、进程以及计划任务(第一部分)

目录 一、程序和进程 1、什么是程序&#xff1f; 2、什么是进程&#xff1f; 3、线程是什么&#xff1f; 4、如何查看是多线程还是单线程 5、进程结束的两种情况&#xff1a; 6、进程的状态 二、查看进程信息的相关命令 1、ps&#xff1a;查看静态的进程统计信息 2、…

HubSpot的内容管理系统(CMS)好用吗?

HubSpot的内容管理系统&#xff08;CMS&#xff09;通常被认为是功能强大且用户友好的工具&#xff0c;尤其适用于数字营销和在线业务。以下是一些HubSpot CMS的优势和功能&#xff1a; 用户友好的编辑界面&#xff1a; HubSpot CMS提供直观的编辑界面&#xff0c;具有拖放式编…