首先谈谈背景, 第一次听说Minio是在公司的一个基于AWS和Kubernetes的项目中, 这个项目本身的生产环境是 AWS上运行的Kubernetes集群, 但是本地开发环境使用的是docker swarm和minio
AWS , Kubernetes , docker swarm 这里就不老生常谈了, 那么minio 到底是个什么鬼
原来这个项目的图片在生产环境中是存储在S3桶上的, 本地开发环境中无法( 也可能是没钱 ) 让每个人都使用自己的s3桶, 所以我们使用了一个代替品
兼容亚马逊S3接口的minio , 既然接口是兼容的, 那么代码也就可以跨s3和minio使用了
minio可以方便的通过docker安装, 使用的端口是 9000, 数据的存储位置以参数形式决定
不过这里我的9000端口被portainer占用了, 所以我将 minio 的端口映射到9090
注意使用 -e MINIO_ACCESS_KEY=admin -e MINIO_SECRET_KEY=admin123456 配置了初始化用户名和密码
用户名要大于3个字符, 密码要在8到40个字符之间
Access key length should be between minimum 3 characters in length.
Secret key should be in between 8 and 40 characters.
lizhedeMacBook-Pro:study lizhe$ docker images | grep minio/minio
minio/minio latest a3e496686886 3 weeks ago 41.2MB
lizhedeMacBook-Pro:study lizhe$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68cafdfd8d42 portainer/portainer "/portainer" 3 weeks ago Up 3 hours 0.0.0.0:9000->9000/tcp portainer
lizhedeMacBook-Pro:study lizhe$ docker run -p 9090:9000 --name studyminio -d -e MINIO_ACCESS_KEY=admin -e MINIO_SECRET_KEY=admin123456 minio/minio server /data
0215e71faa7e308ed175fe3e69dde784687b715210deed79fe6416ec195d2c59
lizhedeMacBook-Pro:study lizhe$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0215e71faa7e minio/minio "/usr/bin/docker-ent…" 5 seconds ago Up 4 seconds (health: starting) 0.0.0.0:9090->9000/tcp studyminio
68cafdfd8d42 portainer/portainer "/portainer" 3 weeks ago Up 3 hours 0.0.0.0:9000->9000/tcp portainer
lizhedeMacBook-Pro:study lizhe$



对象存储的优缺点在这里就不一一描述了, 你可以简单理解为 它比块存储(整个硬盘映射) 和 文件存储 都更灵活, 更容易实现CDN, 更容易在云环境下部署, 高可用等特点
然后我们来看一下如何通过S3cmd 来操作它
S3cmd is a CLI client for managing data in AWS S3, Google Cloud Storage or any cloud storage service provider that uses the s3 protocol. S3cmd is open source and is distributed under the GPLv2 license.
因为本地环境是Mac, 所以这里我选择使用pip来安装它, 先安装pip
lizhedeMacBook-Pro:~ lizhe$ sudo easy_install pip
然后安装 s3cmd
sudo pip install s3cmd
可惜的是使用官方文档中的上述命令, 并不能让我在macos上顺利安装 s3cmd 命令, 会得到一个错误
error: could not create ‘/System/Library/Frameworks/Python.framework/Versions/2.7/share’: Operation not permitted
这是因为EI Captain引入了SIP管理机制,所以旧版本的pip创建的文件目录操作被拒绝,包括使用root也是如此

解决办法是加入 –user 参数
sudo pip install s3cmd –user
将 s3cmd 加入环境变量
sudo vi ~/.bash_profile
lizhedeMacBook-Pro:~ lizhe$ cat ~/.bash_profile
VAGRANT_HOME="/Users/lizhe/Documents/vagrant_workspace/vagrant_home"
export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
export PATH=/Users/lizhe/Library/Python/2.7/bin:$PATH
source ~/.bash_profile
sudo chmod +x /Users/lizhe/Library/Python/2.7/bin/s3cmd
创建一个配置文件 ~/.s3cfg
lizhedeMacBook-Pro:~ lizhe$ cat ~/.s3cfg
# Setup endpoint
host_base = localhost:9090
host_bucket = localhost:9090
bucket_location = us-east-1
use_https = False
# Setup access keys
access_key = admin
secret_key = admin123456
# Enable S3 v4 signature APIs
signature_v2 = False
lizhedeMacBook-Pro:~ lizhe$
尝试创建一个 bucket
lizhedeMacBook-Pro:~ lizhe$ s3cmd mb s3://mybucket
Bucket ‘s3://mybucket/’ created

可以看到 bucket 已经创建
