简介
源项目地址:https://github.com/injahow/meting-api
meting-api 是一个基于 创建的 APlayer API 项目,提供音乐相关的 API 服务,可用于获取音乐的各种信息,如歌曲详情、歌词、封面图片、播放链接等,也能获取歌单信息。、
目前手上只有一台安装了docker环境的小机器,API用docker来部署应该是不错的选择,环境隔离,不用为安装了各种版本的依赖如何卸载而恼。
镜像构建
克隆仓库
git clone https://github.com/injahow/meting-api.git
在项目根目录下创建
Dockerfile
的文件
cd meting-api
vim Dockerfile
Dockerfile:
# 使用官方 PHP 7.4 Apache 镜像作为基础镜像
FROM php:7.4-apache
# 设置容器内的环境变量,用于配置 PHP 相关扩展的编译选项
ENV PHP_EXTENSIONS="bcmath curl zip" \
DEBIAN_FRONTEND=noninteractive \
PKG_CONFIG_PATH="/usr/lib/x86_64-linux-gnu/pkgconfig:/usr/share/pkgconfig"
# 安装系统依赖和 PHP 扩展,同时清理缓存以减少镜像大小
RUN apt-get update && \
apt-get install -y --no-install-recommends \
libzip-dev \
zip \
unzip \
libcurl4-openssl-dev && \
docker-php-ext-install $PHP_EXTENSIONS && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# 设置工作目录
WORKDIR /var/www/html
# 复制项目文件到工作目录
COPY . .
# 安装 Composer 并设置国内镜像源以加快依赖安装速度
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && \
composer config -g repo.packagist composer https://packagist.phpcomposer.com
# 安装项目依赖
RUN composer install --no-dev --optimize-autoloader
# 配置 Apache 以支持 PHP 和 URL 重写
RUN a2enmod rewrite && \
sed -i 's/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf
# 暴露端口
EXPOSE 80
# 启动 Apache 服务
CMD ["apache2-foreground"]
构建 Docker 镜像
在项目根目录下打开终端,执行以下命令来构建 Docker 镜像:
docker build -t meting-api:latest .
这里的 meting-api:latest
是镜像的名称和标签,你可以根据需要进行修改。
运行 Docker 容器
构建完成后,使用以下命令运行 Docker 容器:
docker run -d -p 8080:80 meting-api:latest
上述命令中,-d
表示在后台运行容器,-p 8080:80
表示将容器的 80 端口映射到主机的 8080 端口。你可以根据需要修改主机端口。
docker compose运行
version: '3'
services:
meting-api:
image: meting-api:latest
ports:
- "8080:80"
volumes:
- ~/meting-api-config/index.php:/var/www/html/index.php
- ~/meting-api-config/config:/var/www/html/config
- ~/meting-api-logs:/var/www/html/logs
挂载了原仓库说明的可能需要修改和查看的文件
API 运行
浏览器访问http://ip:8080
,进入API介绍页面
见到此界面则证明API成功运行。
上传镜像到 docker hub
本地构建上传,远程机器直接拉取使用。
登录 Docker Hub
在本地终端运行以下命令,使用你注册的 Docker Hub 账号登录:
docker login
输入用户名和密码,登录成功后会看到登录成功的提示信息。
docker hub无法登录登录可以使用国内大厂(腾讯云,阿里云)提供的容器镜像服务,创建个人容器仓库。腾讯云个人版提供免费10个命名空间、500个镜像仓库额度。
标记(Tag)镜像
构建好的镜像需要有一个合适的标签,格式为 用户名/仓库名:标签名
。例如,你构建的镜像名为 meting-api:latest
,你可以使用以下命令添加标签:
docker tag meting-api:latest your_dockerhub_username/meting-api:latest
将 your_dockerhub_username
替换成你自己的 Docker Hub 用户名。
上传镜像
使用以下命令将标记好的镜像上传到 Docker Hub:
docker push your_dockerhub_username/meting-api:latest
上传过程中,你会看到上传进度信息,上传完成后,在 Docker Hub 的仓库页面就能看到这个镜像。
遇到的问题
镜像拉取失败
错误提示
ERROR: failed to solve: php:7.4-apache: failed to resolve source metadata for docker.io/library/php:7.4-apache: failed to do request: Head "https://mirror.ccs.tencentyun.com/v2/library/php/manifests/7.4-apache?ns=docker.io": dial tcp: lookup mirror.ccs.tencentyun.com on 127.0.0.53:53: no such host
原因:镜像源的问题,修改可用镜像源即可。
修改方法参考:Docker/DockerHub 国内镜像源/加速列表(3月19日更新-长期维护)-腾讯云开发者社区-腾讯云
命令执行失败
ERROR: failed to solve: process "/bin/sh -c apt-get update && apt-get install -y --no-install-recommends libzip-dev zip unzip && docker-php-ext-install $PHP_EXTENSIONS && apt-get clean && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 1
执行 apt-get
相关命令和 docker-php-ext-install
命令时失败,退出代码为 1。
解决方法:将RUN命令分开执行,查看具体出错的命令以解决。
......
# 更新软件包列表
RUN apt-get update
# 安装必要的依赖库
RUN apt-get install -y --no-install-recommends \
libzip-dev \
zip \
unzip
# 安装 PHP 扩展
RUN docker-php-ext-install zip
# 清理缓存
RUN apt-get clean && \
rm -rf /var/lib/apt/lists/*
......
容器镜像服务
以腾讯云为例,腾讯云提供个人版免费的容器镜像服务。初始化个人实例后,即可登录
docker login ccr.ccs.tencentyun.com --username=<登录用户名>
腾讯云容器镜像服务控制台地址:实例管理 - 容器镜像服务 - 控制台
wl
05 / 07用上了!谢!
From Nginx Proxy Manager 登录出错 Bad gateway