amazon-web-services - Docker 挂载 S3 容器

标签 amazon-web-services amazon-s3 docker backup

在 docker 主机中安装 S3 容器的最佳做法是什么?有没有办法透明地做到这一点?还是我需要使用 VOLUME 指令将卷挂载到主机驱动器,然后使用 CRON 手动将文件备份到 S3?

最佳答案

根据您想要完成的内容有不同的方法,但这是我使用 s3fs-fuse 的方法

我创建了一个基于ubuntu的docker镜像

  • 包括一些有用的依赖项(根据我的要求)
  • 安装 aws cli
  • 安装 s3fs-fuse
  • 在目录中挂载 s3

Dockerfile

FROM ubuntu:18.04

## Some utilities
RUN apt-get update -y && \
    apt-get install -y build-essential libfuse-dev libcurl4-openssl-dev libxml2-dev pkg-config libssl-dev mime-support automake libtool wget tar git unzip
RUN apt-get install lsb-release -y  && apt-get install zip -y && apt-get install vim -y

## Install AWS CLI
RUN apt-get update && \
    apt-get install -y \
        python3 \
        python3-pip \
        python3-setuptools \
        groff \
        less \
    && pip3 install --upgrade pip \
    && apt-get clean

RUN pip3 --no-cache-dir install --upgrade awscli

## Install S3 Fuse
RUN rm -rf /usr/src/s3fs-fuse
RUN git clone https://github.com/s3fs-fuse/s3fs-fuse/ /usr/src/s3fs-fuse
WORKDIR /usr/src/s3fs-fuse 
RUN ./autogen.sh && ./configure && make && make install

## Create folder
WORKDIR /var/www
RUN mkdir s3

## Set Your AWS Access credentials
ENV AWS_ACCESS_KEY=YOURAWSACCESSKEY
ENV AWS_SECRET_ACCESS_KEY=YOURAWSSECRETACCESSKEY

## Set the directory where you want to mount your s3 bucket
ENV S3_MOUNT_DIRECTORY=/var/www/s3

## Replace with your s3 bucket name
ENV S3_BUCKET_NAME=your-s3-bucket-name

## S3fs-fuse credential config
RUN echo $AWS_ACCESS_KEY:$AWS_SECRET_ACCESS_KEY > /root/.passwd-s3fs && \
    chmod 600 /root/.passwd-s3fs

## change workdir to /
WORKDIR /

## Entry Point
ADD start-script.sh /start-script.sh
RUN chmod 755 /start-script.sh 
CMD ["/start-script.sh"]

并且指定的启动脚本应该是:

start-script.sh

#!/bin/bash
s3fs $S3_BUCKET_NAME $S3_MOUNT_DIRECTORY

然后构建您的镜像,如果您在指定的目录中创建一个文件,它也应该反射(reflect)在 s3 控制台上,反之亦然。

我在这里通过一个工作示例进行了更详细的解释: https://github.com/skypeter1/docker-s3-bucket

关于amazon-web-services - Docker 挂载 S3 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35189251/

相关文章:

Python Pyramid 关闭事件

testing - 是否可以使用 Vagrant 或 Docker 进行 Web 应用程序的 QA 测试

amazon-web-services - 在 Amazon CloudFront 中为特定文件类型添加内容类型?

php - Amazon PHP SDK 最小文件

javascript - 如何使用 sinon stub aws s3 上传

mod-rewrite - S3 上带有 Backbone 前端的深层链接

mysql - 如何读取docker端口映射信息?

amazon-web-services - aws 胶中的transformation_ctx 有什么用?

amazon-ec2 - 在 Amazon EC2 中,如何将 EBS 卷复制到另一个用户?

amazon-web-services - 是否可以从 AWS Lambda 函数触发 Sagemaker 笔记本?