Docker Compose快速入门
我使用的Linux版本是AlmaLinux,在AlmaLinux上安装Docker有点特别
确保系统上的所有包都是最新的
sudo dnf update -y
刷新缓存
sudo dnf makecache
将Docker的官方仓库文件docker-ce.repo添加到AlmaLinux系统中,文件保存在/etc/yum.repos.d/目录下,不需要时可手动删除。
sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
现有仓库列表
dnf repolist all

查看已添加的Docker软件源
dnf list docker-ce

安装Docker引擎
sudo dnf install -y docker-ce --nobest
验证Docker是否正确安装
docker version

启动Docker服务,并设置为开机自动启动
sudo systemctl start docker
sudo systemctl enable docker
如果systemctl start docker无法启动docker,重启一下AlmaLinux即可

接着安装Docker Compose

这里以版本5.1.3为例
cd /
curl -L https://github.com/docker/compose/releases/download/v5.1.3/docker-compose-linux-aarch64 -o docker-compose
将docker-compose移动到/usr/local/bin/目录下
mv docker-compose /usr/local/bin/
修改权限
chmod +x /usr/local/bin/docker-compose
查看
docker-compose --version

创建项目pnm
cd /
mkdir pnm
批量创建项目所需目录
cd pnm
mkdir -p ./{www,php,mysql/{data,conf},nginx/conf.d}
增加docker-compose.yml文件,内容如下
services:
nginx:
image: nginx:1.30.2
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./www:/var/www/html
depends_on:
- php
networks:
- lnmp-network
php:
build: ./php #使用该目录下的Dockerfile构建镜像
image: php:8.4.22-fpm
volumes:
- ./www:/var/www/html
- ./php/php.ini:/usr/local/etc/php/php.ini
# - ./php/conf.d/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini
environment:
PHP_OPCACHE_ENABLE: "1"
networks:
- lnmp-network
mysql:
image: mysql:8.0.46
environment:
MYSQL_ROOT_PASSWORD: 123456 # 自己替换
MYSQL_DATABASE: testdb # 自己替换
MYSQL_USER: user # 自己替换
MYSQL_PASSWORD: 123456 # 自己替换
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/conf:/etc/mysql/conf.d
ports:
- "3306:3306"
networks:
- lnmp-network
networks:
lnmp-network:
driver: bridge
说明
nginx/conf.d:nginx站点配置
mysql/data:MySQL数据持久化
mysql/conf:MySQL自定义配置
www:项目代码目录
增加php/php.ini文件,内容如下
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
zend_extension=xdebug
[Date]
date.timezone = "Asia/Shanghai"
增加php/Dockerfile文件,内容如下
FROM php:8.4.22-fpm
# 安装 PHP 扩展
# RUN docker-php-ext-install pdo_mysql mysqli php-mbstring php-gd php-zip php-xdebug php-bcmath
增加nginx/conf.d/default.conf文件,内容如下
server {
listen 80;
index index.php index.html;
server_name localhost;
#error_log /var/log/nginx/error.log;
#access_log /var/log/nginx/access.log;
root /var/www/html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
fastcgi_pass php:9000; # 注意这里的端口号是 PHP 容器的默认端口号(9000)
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
增加www/index.php文件,内容如下
<?php
echo date('Y-m-d H:i:s') . '</br>';
echo 'hello docker-compose';
phpinfo();
?>
运行docker-compose up -d
需要注意的是安装PHP扩展需要用到PIE。
PIE是一个新的PHP扩展安装器,即将完全取代PECL,这里使用PIE来安装扩展。
确保AlmaLinux已安装好了PIE
curl -fL --output /tmp/pie.phar https://github.com/php/pie/releases/latest/download/pie.phar \
&& sudo mv /tmp/pie.phar /usr/local/bin/pie \
&& sudo chmod +x /usr/local/bin/pie
上面是以安装xdebug扩展为例子



出现如下错误说明无法访问docker官方镜像仓库docker.io

解决办法:使用第三方提供的docker镜像加速,可以配置多个地址,Docker会自动按顺序尝试,直到成功
vi /etc/docker/daemon.json
加入如下内容
{
"registry-mirrors": [
"https://docker.xuanyuan.me",
"https://docker.1ms.run",
"https://docker.m.daocloud.io"
]
}
重载配置并重启 Docker:
systemctl daemon-reload
systemctl restart docker
查看所有容器
docker-compose ps -a
检查是否安装好PHP扩展
# 进入`PHP`容器
docker-compose exec php bash #此处的php是在docker-compose.yml定义为'php'的服务名
# 查看php版本
php -v
# 查看php扩展
php -m
退出PHP容器
exit
清除缓存
docker-compose build --no-cache
这个命令会重新下载基础镜像(如果需要的话),并且不使用任何缓存来构建你的服务镜像。
这对于确保你的应用是基于最新的依赖和环境配置非常重要,尤其是在依赖项或基础镜像更新后。
需要注意的是官方 PHP 镜像(php:8.4.22-fpm)默认基于Debian/Ubuntu系统,使用的是apt-get包管理器,所以不能使用dnf或yum命令。
所以你要在两者之间做出选择
方案一:以 almalinux:10.2 为基础,手动安装 PHP(推荐用于 AlmaLinux)
如果你确实需要使用 AlmaLinux,就以此为基础镜像,然后手动安装 PHP 和所有需要的扩展。
FROM almalinux:10.2
# 安装开发工具
RUN dnf -y update && \
dnf -y groupinstall "Development Tools" && \
dnf clean all
# 安装 PHP 8.4 及相关包(AlmaLinux 10.2 官方源已包含)
RUN dnf -y install \
php \
php-cli \
php-fpm \
php-devel \
php-mysqlnd \
php-gd \
php-xml \
php-mbstring \
&& dnf clean all
# 复制 PIE 并安装 Xdebug
COPY bin/pie.phar /usr/bin/pie
RUN chmod +x /usr/bin/pie
RUN pie install xdebug/xdebug
# 配置 Xdebug
RUN echo "xdebug.mode=debug" >> /etc/php.d/99-xdebug.ini && \
echo "xdebug.client_host=host.docker.internal" >> /etc/php.d/99-xdebug.ini
# 启动 PHP-FPM
CMD ["php-fpm"]
方案二:以 php:8.4.22-fpm 为基础,改用 apt-get(推荐用于官方 PHP 镜像)
如果你喜欢官方 PHP 镜像的稳定性和预配置,就用它作为基础,但包管理器要改用apt-get:
FROM php:8.4.22-fpm
# 安装编译依赖(Debian 方式)
RUN apt-get update && \
apt-get install -y \
gcc g++ make autoconf automake \
libc-dev pkg-config git unzip curl wget \
&& rm -rf /var/lib/apt/lists/*
# 复制 PIE 并安装 Xdebug
COPY bin/pie.phar /usr/bin/pie
RUN chmod +x /usr/bin/pie
RUN pie --version || (echo "❌ PIE installation failed" && exit 2)
RUN pie install xdebug/xdebug
# 配置 Xdebug
RUN echo "xdebug.mode=debug" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini && \
echo "xdebug.client_host=host.docker.internal" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
CMD ["php-fpm"]
方案三:使用多阶段构建(不推荐,过于复杂)
如果你想保留 AlmaLinux 作为最终镜像,但利用 PHP 官方镜像的某些文件,可以使用多阶段构建:
# 阶段1:从官方 PHP 镜像获取 PHP 二进制文件
FROM php:8.4.22-fpm AS php-source
# 阶段2:AlmaLinux 作为最终镜像
FROM almalinux:10.2
# 从 PHP 官方镜像复制 PHP 二进制文件到 AlmaLinux
COPY --from=php-source /usr/local/ /usr/local/
COPY --from=php-source /etc/ /etc/
# 安装 PHP 运行所需依赖
RUN dnf -y update && \
dnf -y install \
libxml2 \
libcurl \
libssl \
libsqlite3 \
libpq \
&& dnf clean all
# 现在安装 PIE 和 Xdebug
COPY bin/pie.phar /usr/bin/pie
RUN chmod +x /usr/bin/pie
RUN pie install xdebug/xdebug
CMD ["php-fpm"]
⚠️ 不推荐方案三,因为 PHP 官方镜像中的二进制文件依赖于 Debian 的库(如 libc6),在 AlmaLinux(使用 glibc)上可能存在兼容性问题。
更多推荐



所有评论(0)