这是我的情况,我有一个 Laravel 8 应用程序,我正尝试通过 AWS Fargate 使用 AWS ECS 进行部署。
这是我的dockerfile的有用部分:
### ... Previous composer and npm stages
FROM php:8.0-cli-alpine
# Concatenated RUN commands
RUN apk add --no-cache .........
RUN mkdir -p /run/apache2 \
&& rm -rf /tmp/*
# Apache configuration
COPY docker/fargate/apache.conf /etc/apache2/conf.d
# PHP configuration
COPY docker/fargate/php.ini /etc/php8/conf.d
# Script permission
ADD docker/fargate/docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh
# Copy files from NPM
WORKDIR /var/www/html
COPY --from=build-npm /var/www/html /var/www/html
RUN chmod -R 777 /var/www/html
COPY docker/fargate/.env.fargate /var/www/html/.env
# Run script
EXPOSE 80
ENTRYPOINT ["/docker-entrypoint.sh"]
这是 docker-entrypoint.sh 文件
#!/bin/sh
# Cache
php artisan route:cache --quiet
php artisan config:cache --quiet
# Permissions
# On Alpine Apache's user and groups are apache
chown -R apache:apache /var/www/html
chgrp -R apache /var/www/html/bootstrap/cache
chmod -R ug+rwx /var/www/html/bootstrap/cache
# Launch the httpd in foreground
rm -rf /run/apache2/* || true && /usr/sbin/httpd -DFOREGROUND
现在,部署的应用程序运行良好,我可以浏览我的应用程序。
但是,我想在“/var/www/html”处安装一个持久卷,以便能够保留 Web 会话和其他数据。因此,该卷存在,但似乎只在运行 entrypoint 命令之前安装,这样,所有先前复制的文件都会消失。
我尝试将这些行作为第一行添加到入口点脚本中:
mkdir -p /var/www/html/bootstrap/cache
mkdir -p /var/www/html/public
它正确地创建了文件夹,因此它确认在入口点启动后卷已被挂载。
哪种方法才是实现此处所述目标的正确方法?如果需要,我想保留数据并在容器启动时覆盖它们。
答案1
AWS Fargate 不会持久保存本地存储。即使您将任务配置为使用在实例上创建的卷,实例的生命周期也与任务的生命周期相关联,因此没有必要将其持久保存(在本地存储上)。您可以通过将数据持久保存在 EFS 共享上(ECS/Fargate 与 EFS 本机集成)来实现这一点。这这是 3 篇系列博客中的第 1 篇,介绍了用例并引导您了解如何进行设置。希望这对您有所帮助。