Docker 是一个开源的容器化平台,它允许开发者打包应用及其依赖项到一个轻量级、可移植的容器中,然后可以在任何支持 Docker 的机器上运行这些容器。Docker 容器非常适合持续开发、测试和部署的工作流程。
轻量级和快速:Docker 容器共享宿主机的内核,不需要额外的操作系统,因此比传统虚拟机更轻量、启动更快。
可移植性:容器可以在任何安装了 Docker 的系统上运行,不受底层平台限制。
隔离性:每个容器都在自己的环境中运行,与其他容器和宿主系统隔离。
可重复性:Docker 容器的配置和依赖都定义在 Dockerfile 中,这确保了环境的一致性和可重复性。
易于管理:Docker 提供了强大的命令行和 API 接口,方便管理容器。
生态系统:Docker Hub和其他容器注册中心提供了大量预构建的容器镜像。
PHP 是一种广泛使用的开源服务器端脚本语言,特别适合于 web 开发并可嵌入 HTML 中。PHP 代码在服务器端执行,生成客户端浏览器可显示的 HTML。
灵活性:PHP 与 HTML 之间的无缝集成提供了高度的灵活性,允许动态内容的生成。
跨平台:PHP 可以在多种操作系统上运行,如 Windows、Linux 和 macOS。
广泛的数据库支持:PHP 支持多种数据库,如 MySQL、PostgreSQL 和 SQLite。
易于学习:对于新手来说,PHP 是一种相对容易学习的语言,具有广泛的社区支持和资源。
丰富的库和框架:PHP 拥有大量的库和开发框架,如 Laravel、Symfony 等,这些可以加快开发过程。
适用于各种规模的项目:从小型个人博客到大型企业级应用,PHP 都是一个很好的选择。
详细流程参见我之前的博客:无桌面版docker在Ubuntu系统上安装-CSDN博客
Dockerfile:这是一个文本文件,包含了一系列的指令,用于定义如何构建 Docker 镜像。例如,它可以包含从基础镜像开始、安装软件包、复制文件和设置环境变量的指令。
镜像(Image):Docker 镜像是一个轻量级、独立、可执行的软件包,包含运行应用所需的一切:代码、运行时、库、环境变量和配置文件。
容器(Container):当 Docker 镜像运行时,它在 Docker 引擎上运行的实例就是一个容器。容器是应用程序及其运行环境的封装。
仓库(Registry):Docker Registry 是存储 Docker 镜像的地方。Docker Hub 是最常用的公共仓库,您可以从中拉取(pull)镜像,也可以将自己的镜像推送(push)到 Docker Hub 或其他 Registry。
一个典型的 Dockerfile
包括以下部分:
FROM: 指定基础镜像。所有的 Dockerfile
都必须从一个基础镜像开始。例如,如果您正在构建一个 PHP 应用,您可能会从一个官方的 PHP 镜像开始。
RUN: 执行命令。用于在构建镜像时执行命令,比如安装软件包。
COPY 或 ADD: 复制文件。将本地文件复制到镜像中。
WORKDIR: 设置工作目录。指定容器内的工作目录。
ENV: 环境变量。用于设置环境变量。
EXPOSE: 暴露端口。指示 Docker 在运行容器时监听的端口。
CMD 或 ENTRYPOINT: 定义容器启动后执行的命令。
这里仅仅只是作为例子,可以根据自己的需求进行更改。
# 使用官方 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
一旦您编写了 Dockerfile
,可以使用以下命令来构建镜像:
docker build -t my-php-app .
这里,my-php-app
是您给镜像指定的名字,.
指定了 Dockerfile 和上下文的路径(当前目录)。
在命令行输入
docker images
查看docker镜像是否搭建成功。
构建完镜像后,使用以下命令启动一个容器:
docker run -it --rm --name my-php-container -v $(pwd):/usr/src/myapp php-dev-env
这个命令会启动一个名为 my-php-container
的容器,并将当前目录挂载到容器中的 /usr/src/myapp
。这样,你就可以在本地编辑文件,而改动会实时反映到容器内。
在您项目的根目录下($(pwd)),创建一个名为 main.php
的新文件,然后添加以下内容之一:
这个脚本会输出一个简单的文本消息,验证 PHP 脚本是否能正确运行。
<?php
echo "Hello, World!";
sudo docker exec -it my-php-container bash
在命令行输入:
php main.php
可以看到会在命令行输出:Hello, World!