
是一个用于开发、运输和运行应用程序的流行平台。它将应用程序及其依赖关系封装在容器中,以促进不同环境间的一致性。这种一致性有助于防止与依赖冲突和 “在我的机器上也能运行” 的差异有关的问题。
使用 Docker,您可以使用 定义必要的依赖关系和扩展。这意味着您的应用程序在一个可重现的隔离环境中拥有所有必需的库和工具。
应用程序托管服务器为自定义 Dockerfile 提供动态支持,使您能够更好地控制应用程序的环境。有了 Dockerfile,你几乎可以使用任何语言,而不必局限于 Nixpacks 或 Buildpacks 所支持的语言。
本文将手把手教你如何在 Docker 中安装和使用 依赖项和扩展。
使用 Docker 安装依赖项有几个好处:
此外,Docker 容器还提供隔离功能,有助于消除在同一系统上运行的不同应用程序之间的依赖关系冲突。
以Kinsta为例,在服务器上设置您的应用程序非常简单。访问 MyKinsta 并按照操作。注册完成后,您就可以访问功能强大的托管控制面板和一整套旨在优化性能和安全性的功能。
Kinsta 的应用程序托管,包括 PHP、Python、 和 Ruby。这种广泛的语言支持确保了与各种应用程序的兼容性,使您能够选择最适合您项目要求的语言。
例如,如果您正在使用 PHP 开发动态 *** 应用程序,Kinsta 的优化托管环境可确保您基于 PHP 的项目具有高性能和高可靠性。或者,如果您使用 Node.js 构建 RESTful API,或使用 Python 构建数据驱动型 *** 应用程序,Kinsta 将为您的应用程序提供必要的基础设施和支持。
要体验如何在 Kinsta 上使用 Dockerfile 部署应用程序,请使用此应用程序,这是一个使用 MariaDB 存储数据的基于 PHP 的基本身份验证系统。该应用还利用了一些作曲包,包括用于输入验证的 和用于密码散列的 。
Dockerfile 是一个文本文件,其中包含构建所需镜像所需的所有命令,并按照必要的顺序排列。PHP 应用程序的基本 Dockerfile 是这样的:
FROM php:8.3-cli COPY . /usr/src/myapp WORKDIR /usr/src/myapp CMD [ "php", "./your-script.php" ]
此 Dockerfile 可创建一个容器环境,用于从命令行界面(CLI)运行 PHP 脚本。它首先使用带有 CLI 变体的官方 PHP 映像,确保容器中只包含 PHP 运行时。
然后,它将包含 Dockerfile 的本地目录内容复制到容器中的 /usr/src/myapp 目录。将工作目录设置为 /usr/src/myapp 后,它会使用 php 命令指定要执行的 PHP 脚本,即 your-script.php。
映像包含许多预编译的 PHP 扩展。因此,首先运行 php -m 命令检查是否安装了所需的扩展。
如果基本镜像中没有你需要的扩展,Docker 会提供以下辅助脚本,帮助你更轻松地安装其他扩展:
docker-php-ext-configuredocker-php-ext-installdocker-php-ext-enable例如,本教程的演示程序使用 扩展与 MariaDB 数据库交互。该扩展默认未编译到映像中,因此请在 Dockerfile 中使用以下命令安装它:
RUN docker-php-ext-install mysqli
要为演示程序编写 Dockerfile,请在项目根文件夹中新建一个名为 Dockerfile 的文件。在文件中粘贴以下代码:
FROM php:8.3-apache # Install MySQL client, server, and other dependencies RUN apt-get update && \ apt-get install -y \ default-mysql-client \ default-mysql-server \ git \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* # Install mysqli PHP extension for MySQL support RUN docker-php-ext-install mysqli
该代码指定了官方 (特别是 8.3 版),并安装了 Apache 作为容器的基础映像。该镜像为使用 Apache 作为 Web 服务器运行 PHP 应用程序提供了预配置环境。
然后,它将安装演示应用程序所需的其他依赖项,包括 default-mysql-client 和 default-mysql-server,它们将创建 MariaDB 数据库并与之交互。
最后,上面的代码段使用 docker-php-ext-install 安装了 mysqli PHP 扩展,它允许演示程序在 MariaDB 数据库上建立连接并执行操作。
使用 Docker 管理 PHP 的依赖关系需要使用 ,这是一种流行的 PHP 依赖关系管理器。通过在 Docker 容器中安装 Composer,您可以简化安装、更新和管理 PHP 依赖项的过程,同时促进不同环境间的一致性和可重复性。
请按照以下步骤在演示应用程序中使用 Composer 进行依赖关系管理。将每个步骤中的代码添加到你的 Dockerfile 中。
# Install Composer COPY --from=composer/composer:latest-bin /composer /usr/bin/composer
该命令会将 Docker Hub 代码库中预制的 Composer 二进制文件复制到你的镜像中。--from=composer/composer:latest-bin 指定了从中拷贝文件的源镜像。
源镜像中的 /composer 路径包含要复制的文件,而你的 Docker 镜像的 /usr/bin/composer 路径则是这些文件的目的地。
# Set working directory WORKDIR /var/www/html
# Copy composer.json and composer.lock COPY composer.json composer.lock ./
# Install Composer dependencies RUN composer install --no-dev --optimize-autoloader
--no-dev 指示 Composer 跳过特定于开发的依赖项。 --optimize-autoloader (优化自动加载器)指示 Composer 优化自动加载器,以提高性能。
你可以根据需要修改 composer.json 文件,添加新的依赖项,更新版本限制,删除不再需要的依赖项,从而逐步更新和管理依赖项。
进行必要的修改后,在 Docker 容器中运行 composer install 或 composer update,安装或更新相应的依赖项。
在应用程序使用 Docker 之前,必须创建数据库和数据库用户、设置环境变量,并将项目文件复制到 Docker 镜像中。
为此,请按照以下步骤操作,并将每个代码段复制到 Docker 文件中。
DB_USER、 DB_PASSWORD 和 DB_NAME。 # Set environment variables ENV DB_HOST=localhost \ DB_USER=kinsta_user \ DB_PASSWORD=your_password_here \ DB_NAME=kinsta_docker_auth \ # Path to the Unix socket file used for connecting to the MariaDB server. DB_SOCKET=/var/run/mysqld/mysqld.sock
# Copy PHP application files into the image COPY . .
# Copy the startup script COPY scripts/start.sh /usr/local/bin/start.sh
该脚本在容器启动时运行,负责启动数据库服务器、创建数据库、表和用户以及启动 Apache 服务器。稍后您将创建此脚本。
# Make the script executable RUN chmod +x /usr/local/bin/start.sh
# Execute the startup script CMD ["/usr/local/bin/start.sh"]
现在 Dockerfile 已经完成,可以创建前面讨论过的启动脚本了。
在项目根文件夹中新建一个名为 scripts/start.sh 的文件,并添加以下代码。确保使用在 Dockerfile 中定义的数据库凭据。
#!/bin/bash # Start MariaDB server service mariadb start # Wait for MariaDB to be fully initialized (retry up to 30 times, waiting 1 second between each attempt) attempt=0 while [ $attempt -lt 30 ]; do if mysqladmin ping &>/dev/null; then echo "MariaDB is up and running." break else echo "MariaDB is not yet available. Retrying..." attempt=$((attempt+1)) sleep 1 Fi done # If MariaDB failed to start within the specified attempts, exit with an error if [ $attempt -eq 30 ]; then echo "Error: MariaDB failed to start within the specified time." exit 1 fi # Set the database name, username, and password dbname="kinsta_docker_auth" dbuser="kinsta_user" dbpassword="your_password_here" # Create the database if it does not exist mysql -u root -e "CREATE DATABASE IF NOT EXISTS $dbname;" # Create a database user and assign privileges to the database mysql -u root -e "CREATE USER '$dbuser'@'localhost' IDENTIFIED BY '$dbpassword';" mysql -u root -e "GRANT ALL PRIVILEGES ON $dbname.* TO '$dbuser'@'localhost';" mysql -u root -e "FLUSH PRIVILEGES;" # Create users table if it does not exist mysql -u root -e "USE $dbname; CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(20) UNIQUE NOT NULL, password_hash VARCHAR(255) NOT NULL );" # Start Apache server apache2ctl -D FOREGROUND
这个 会启动 MariaDB 服务器。然后,当服务器完全初始化后,它会创建一个数据库、一个具有适当权限的用户以及数据库中的一个表。最后,启动 Apache 服务器。
在将应用程序部署到 Kinsta 之前,您必须为 Apache 服务器配置一些配置。Kinsta 的开放了 80 和 443 端口,但如果您的应用程序暴露了任何端口,我们建议您使用 8080 端口。
默认情况下,Apache 服务器监听端口 80 上的连接,因此必须将其配置为监听端口 8080 上的连接。为此,请按照以下步骤操作:
<VirtualHost *:8080>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost> # Change the Listen directive to listen on port 8080 Listen 8080 # Keep the existing configuration for port 443 <IfModule ssl_module> Listen 443 </IfModule> <IfModule mod_gnutls.c> Listen 443 </IfModule>
Listen 8080 指令指示 Apache 监听 8080 端口上的传入连接。
WORKDIR /var/www/html )的命令之后添加这些命令。这些命令负责将自定义配置文件复制到相应的目录中。 # Set up Apache virtual host COPY apache-conf/apache-config.conf /etc/apache2/sites-available/000-default.conf # Set up Apache ports COPY apache-conf/apache-ports.conf /etc/apache2/ports.conf
vendor 以排除 vendor 文件夹。完成所有配置后,就可以部署到 Kinsta 了。将项目文件上传到首选的 Git 提供商(Bitbucket、GitHub 或 GitLab),然后按照以下步骤操作。

注册一个账户,使用您的详细信息登录,然后检查您是否可以访问受保护的页面,以及是否一切正常。下图为登录后的应用程序主页:
一旦您的应用程序在服务器上启动并运行,监控和优化其性能至关重要。它能确保您的应用程序顺利运行并有效利用资源。
优化应用程序的性能对于提供快速响应的用户体验至关重要。
通过,帮助您跟踪各种性能指标,包括带宽、总构建时间、CPU 使用率、内存消耗、 *** 流量和响应时间。
如果遇到问题或意外的应用程序行为,您可以导航到服务器管理对应的日志部分。该部分详细概述了应用程序的性能和行为,包括错误和访问日志。
通过仔细查看这些日志,您可以深入了解可能导致问题的原因,如错误消息、堆栈跟踪或异常行为模式。这些信息可以帮助您诊断问题的根本原因,并采取适当措施加以解决。
此外,您还可以在 Docker 环境中利用性能优化技术,例如优化 Docker 映像以及实施应用架构和代码优化的更佳实践。
无论底层基础架构如何,Docker 的轻量级和可移植容器都能轻松打包和部署包含所有所需依赖项的应用程序。通过将应用程序及其依赖项容器化,您可以在不同环境中提高一致性,简化设置流程,并获得更好的版本控制。
宝塔面板现在已经成为国内许多站长必备的服务器管理必备工具。相比直接使用SSH+FTP来管理服务器,宝塔面板可以提供可视化管理,包括文件管理、数据库管理、数据备份、SSL配置等等。 如果你希望更简单高效地管理您的网站及服务器,宝塔面板是不错的选择。下面是一些宝塔面板安装及常见问题:...
Linux面板环境安装,主要支持LNMP和LAMP、Tomcat、node.js。不过对于大部分站长来说,主要是LNMP和LAMP两个环境的安装。 LNMP和LAMP两个环境的最大区别是,前者采用Nginx作为Web服务器,后者则采用Apache作为Web服务器。(选择哪个作为您的Web服务器,可...
本章节主要是对宝塔面板的主界面的各个版本进行一个简单的说明。 宝塔面板主界面主要包括:服务器操作系统、服务器状态、站点信息、软件管理及网络流量几个部分。 Windows面板有部分功能未实现,其余部分与Linux面板同步。 系统操作...
使用宝塔面板,您可以快速地创建一个FTP管理账户,对网站文件进行管理。但有必要提醒大家的是,使用FTP远不如使用SFTP安全,你可以查看文章“”进一步了解两者之间的差异。 此外,宝塔面板的文件管理模块其实已经能够满足站长的大部分文件管理需求。当然,如果你非得要使用FTP管理服务器文件,可以参照以下...
经过几个小时的努力工作后,您是否感到眼睛疲劳或难以阅读代码?许多程序员在开始头疼之前从没想过要切换字体。 如果您经常发现在尝试扫描一千行代码时眼睛模糊不清,或者在停止编码数小时后头疼,那么可能是时候尝试一种新字体了。即使您没有遇到这些症状,设计良好的字体通常也比默认系统字体具有更好的可读性。...
Laravel多年来一直是PHP应用程序开发的摇滚明星,这是有充分理由的。庞大的生态系统、活跃的社区、强大的就业市场、成功的初创公司——它拥有一切让采用新技术变得值得的东西。 如果你想学习Laravel,你不需要更进一步。通过浏览本指南,您可以找到最适合您的Laravel教程,与您的知识水平和...