Docker 挂载 S3 容器
Docker mount S3 container
在 docker 主机内安装 S3 容器的最佳做法是什么?有没有办法透明地做到这一点?或者我是否需要使用 VOLUME 指令将卷装载到主机驱动器,然后使用 CRON 手动将文件备份到 S3?
流行的容器存储解决方案(如 Flocker 和 EMC REX-Ray)似乎没有对 Amazon S3 的开箱即用支持。但是,如果您愿意将数据存储在 Amazon EBS 卷上,那么 EMC REX-Ray 允许您创建、装载卷并拍摄快照。
当然,您建议的方法也非常有效。您可以在主机 运行 您的容器上安装 AWS CLI,并编写一个简单的 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"]
并且指定的启动脚本应该是:
开始-script.sh
#!/bin/bash
s3fs $S3_BUCKET_NAME $S3_MOUNT_DIRECTORY
然后构建你的镜像,如果你在你指定的目录中创建了一个文件,它也应该反映在 s3 控制台上,反之亦然。
我在这里有一个更详细的解释和一个工作示例:
https://github.com/skypeter1/docker-s3-bucket
在 docker 主机内安装 S3 容器的最佳做法是什么?有没有办法透明地做到这一点?或者我是否需要使用 VOLUME 指令将卷装载到主机驱动器,然后使用 CRON 手动将文件备份到 S3?
流行的容器存储解决方案(如 Flocker 和 EMC REX-Ray)似乎没有对 Amazon S3 的开箱即用支持。但是,如果您愿意将数据存储在 Amazon EBS 卷上,那么 EMC REX-Ray 允许您创建、装载卷并拍摄快照。
当然,您建议的方法也非常有效。您可以在主机 运行 您的容器上安装 AWS CLI,并编写一个简单的 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"]
并且指定的启动脚本应该是:
开始-script.sh
#!/bin/bash
s3fs $S3_BUCKET_NAME $S3_MOUNT_DIRECTORY
然后构建你的镜像,如果你在你指定的目录中创建了一个文件,它也应该反映在 s3 控制台上,反之亦然。
我在这里有一个更详细的解释和一个工作示例: https://github.com/skypeter1/docker-s3-bucket