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

相关推荐
南猿北者4 小时前
docker容器
docker·容器
二十雨辰5 小时前
[linux]docker基础
linux·运维·docker
time never ceases5 小时前
使用docker方式进行Oracle数据库的物理迁移(helowin/oracle_11g)
数据库·docker·oracle
YCyjs6 小时前
K8S群集调度二
云原生·容器·kubernetes
Hoxy.R6 小时前
K8s小白入门
云原生·容器·kubernetes
残月只会敲键盘6 小时前
面相小白的php反序列化漏洞原理剖析
开发语言·php
ac-er88886 小时前
PHP弱类型安全问题
开发语言·安全·php
ac-er88886 小时前
PHP网络爬虫常见的反爬策略
开发语言·爬虫·php
yanwushu6 小时前
Xserver v1.4.2发布,支持自动重载 nginx 配置
mysql·nginx·php·个人开发·composer
事业运财运爆棚7 小时前
php 如何将数组转成对象数组
php