标准的 Docker 容器卷一般是位于 Docker 主机上的一个本地目录。在这样的配置下,容器必须依赖于一台特定的主机,因此使得容器的迁移和扩展变得困难。通过使用容器卷插件,能让容器访问独立于主机的存储,使得迁移或者共享变得简单。

Docker Volume Plugin for Azure File Storage 是 Microsoft 提供的容器共享存储解决方案。使用该插件,通过 SMB3.0 协议将 AFS 挂载到本地,Docker 就能够使用通过该插件驱动创建 Docker 容器卷。

目前 Docker Volume Plugin for Azure File Storage 仅支持 Ubuntu。更多信息和更新,请参见 https://github.com/Azure/azurefile-dockervolumedriver 。

在开始前,请确认您已经拥有一个共享出来的 AFS 和一个已经搭建好的 docker 虚拟机。登录到该虚拟机,切换到 root 账号。确认 cifs-utils 已经安装。

复制
# apt-get install cifs-utils

根据 Ubuntu 系统版本不同,配置方式稍有区别。Ubuntu14 及以下版本使用 upstart 模式;Ubuntu15 及以上版本使用 systemd 模式。

Upstart 模式下的配置

复制
#wget -O azurefile-dockervolumedriver.conf https://raw.githubusercontent.com/Azure/azurefile-dockervolumedriver/master/contrib/init/upstart/azurefile-dockervolumedriver.conf
#wget -O azurefile-dockervolumedriver.default https://raw.githubusercontent.com/Azure/azurefile-dockervolumedriver/master/contrib/init/upstart/azurefile-dockervolumedriver.default

其中 azurefile-dockervolumedriver.default 是 AFS 账号配置文件,您需要按照下面步骤修改存储链接后缀,并添加存储账号和密钥;azurefile-dockervolumedriver.conf 是服务启动配置文件。

编辑 AFS 配置文件

取消 AZURE_STORAGE_BASE 的注释,并将 core.windows.net 替换成中国区的环境 core.chinacloudapi.cn;将 youraccount 和 yourkey 替换成对应的存储账号和密钥。

复制
# Configuration file for Azure File Service Docker Volume Driver.
#
# Required keys:
# - AF_ACCOUNT_NAME: Azure storage account name
# - AF_ACCOUNT_KEY: Azure storage account key
#
# Customize location of executable (dev/test purposes):
# AF_CMD=/usr/local/bin/azurefile-dockervolumedriver
#
# Additional arguments to executable:
# AF_OPTS=--debug
AZURE_STORAGE_BASE= **core.chinacloudapi.cn** AF_ACCOUNT_NAME= **youraccount**
AF_ACCOUNT_KEY= **yourkey**
#mv azurefile-dockervolumedriver.conf /etc/init/
#mv azurefile-dockervolumedriver.default /etc/default/azurefile-dockervolumedriver

安装插件

访问 https://github.com/Azure/azurefile-dockervolumedriver/releases,选择您要使用的版本并下载到本地。建议使用最新版的插件。

复制
# wget -O /usr/bin/azurefile-dockervolumedriver https://github.com/Azure/azurefile-dockervolumedriver/releases/download/<font color=red>v0.5.1</font>/azurefile-dockervolumedriver
# chmod +x /usr/bin/azurefile-dockervolumedriver
# 使用 ls -al 或者 file 命令查看文件是否下载成功,且处于可执行状态。
# file /usr/bin/azurefile-dockervolumedriver
# 启动服务并检查服务状态
# initctl reload-configuration
# initctl start azurefile-dockervolumedriver
# initctl status azurefile-dockervolumedriver

<font color=darkblue>Systemd 模式下的配置

下载配置文件

复制
#wget -O azurefile-dockervolumedriver.default https://raw.githubusercontent.com/Azure/azurefile-dockervolumedriver/master/contrib/init/systemd/azurefile-dockervolumedriver.default

#wget -O azurefile-dockervolumedriver.service https://raw.githubusercontent.com/Azure/azurefile-dockervolumedriver/master/contrib/init/systemd/azurefile-dockervolumedriver.service

其中 azurefile-dockervolumedriver.default 是 AFS 账号配置文件,您需要按照下面步骤修改存储链接后缀,并添加存储账号和密钥;azurefile-dockervolumedriver.service 是服务启动配置文件。

编辑 AFS 配置文件

取消 AZURE_STORAGE_BASE 的注释,并将 core.windows.net 替换成中国区的环境 core.chinacloudapi.cn;将 youraccount 和 yourkey 替换成对应的存储账号和密钥。

复制
#vi azurefile-dockervolumedriver.default
# Environment file for azurefile-dockervolumedriver.service
#
# AF_OPTS=--debug
AZURE_STORAGE_BASE=**core.chinacloudapi.cn** AZURE_STORAGE_ACCOUNT=**youraccount**
AZURE_STORAGE_ACCOUNT_KEY=**yourkey** # 将文件移动到正确的目录下面。 # mv azurefile-dockervolumedriver.default /etc/default/azurefile-dockervolumedriver
# mv azurefile-dockervolumedriver.conf /etc/systemd/system/

安装插件

访问 https://github.com/Azure/azurefile-dockervolumedriver/releases,选择您要使用的版本并下载到本地。建议使用最新版的插件。

复制
# wget -O /usr/bin/azurefile-dockervolumedriver https://github.com/Azure/azurefile-dockervolumedriver/releases/download/v0.5.1/azurefile-dockervolumedriver
# chmod +x /usr/bin/azurefile-dockervolumedriver
# 使用 ls -al 或者 file 命令查看文件是否下载成功,且处于可执行状态。
# file /usr/bin/azurefile-dockervolumedriver

加载服务

重新加载守护进程,使其识别到新添加的 azurefile-dockervolumedriver 服务。设置服务开机自启动,并启动服务。

复制
# systemctl daemon-reload
# systemctl enable azurefile-dockervolumedriver
# systemctl start azurefile-dockervolumedriver

使用 status 检查服务状态。Active(running) 表示服务启动成功;如果是其他状态,请根据错误信息进行错误排查,如确认配置文件的正确性;尝试其他版本的插件等。

复制
# systemctl status azurefile-dockervolumedriver
● azurefile-dockervolumedriver.service - Azure File Service Docker Volume Driver
Loaded: loaded (/etc/systemd/system/azurefile-dockervolumedriver.service; disabled; vendor preset: enabled)
Active: active (running) since Sun 2016-09-18 05:50:08 UTC; 3s ago
Docs: https://github.com/Azure/azurefile-dockervolumedriver/
Main PID: 38866 (azurefile-docke)
Tasks: 4
Memory: 860.0K
CPU: 8ms
CGroup: /system.slice/azurefile-dockervolumedriver.service
└─38866 /usr/bin/azurefile-dockervolumedriver

<font color=darkblue>创建和使用 Docker volume

下面命令会在 docker 虚拟机上创建一个名为 myvol 的卷;同时,在您的 AFS 中,会创建一个名为 myvol 的文件服务。

复制
# docker volume create -d azurefile --name myvol -o share=myvol
myvol
# docker volume ls
DRIVER VOLUME NAME
azurefile myvol

使用 volume 存放数据,实际上是通过 SMB 协议挂载共享文件夹,并将数据写入到共享文件夹中;因为 Linux 目前还不支持 SMB3.0,因此在使用 AFS 时,可能会有性能上的影响。

在创建 volume 的过程中,azurefile 驱动支持的可选参数如下,这其实与通过 mount.cifs 挂载 AFS 的选项相关。

复制
-o share=sharename #在 portal 中看到的 AFS share 的名字
-o uid=<uid>
-o gid=<gid>
-o filemode=0600
-o dirmode=0755
-o nolock=true
-o remotepath=directory #

通过该驱动创建的共享文件夹,默认 quota 是 5TB。您可能需要在 Azure portal 上去修改该 quota 值以适应您的需求。立即访问http://market.azure.cn

创建基于 AFS 的 Docker 容器卷的更多相关文章

  1. Docker(七):Docker容器卷管理

    1.使用容器卷的原因:Docker容器产生的数据,如果不通过commit生成新的镜像,数据会在容器删除后丢失.为了能持久化保存和共享容器的数据,Docker提出了两种管理数据的方式:数据卷和数据卷容器 ...

  2. Docker(九):Docker容器卷插件

    1.Convoy 1.1 安装 [root@MediaServer tmp]# tar xvf convoy.tar.gz convoy/ convoy/convoy-pdata_tools conv ...

  3. webservice系统学习笔记10-使用jax-ws创建基于tomcat类型的容器的ws服务

    1.在web-info目录下新建目录wsdl 2.在1步的目录下 新建文件user.wsdl <?xml version="1.0" encoding="UTF-8 ...

  4. Docker容器学习梳理 - Volume数据卷使用

    之前部署了Docker容器学习梳理--基础环境安装,接下来看看Docker Volume的使用. Docker volume使用 Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker ...

  5. 实例解析Docker数据卷+数据卷容器+flocker数据共享+DockerHub操作

    Docker内部数据管理和Docker之间的数据共享为数据卷和数据卷容器,实例解析1.将本地的文件作为容器的数据卷,2.数据卷flocker插件实现容器集群(或者Docker Swarm)的数据共享3 ...

  6. Docker容器数据卷-Volume详解

    Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume).数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享.数据 ...

  7. Docker容器学习梳理 - 日常操作总结

    使用Docker已有一段时间了,今天正好有空梳理下自己平时操作Docker时的一些命令和注意细节: Docker 命令帮助 $ sudo docker Commands: attach Attach ...

  8. 宿主机-免密登录Docker容器

    CentOS7 安装Docker 讨论QQ:1586558083 目录 一.检查系统内核 二.安装Docker 2.1 安装 2.2 查看docker版本 2.3 启动docker 三.建立docke ...

  9. 3.Docker容器学习之新手基础使用

    原文地址: http://blog.weiyigeek.top/2019/5/2-docker%E5%AD%A6%E4%B9%A0%E4%B9%8B%E5%9F%BA%E7%A1%80%E4%BD%B ...

随机推荐

  1. 手机端全局样式表整理(mobile)

    @charset "utf-8";/*  * filename:          global.css * description:       全局样式(包含样式重置,公共常用 ...

  2. SSM的XML和WEB.XML的配置

    显示层(handler/controller): request请求到springmvc的前端控制器,从处理器映射器找相应的handler(用@RequestMapping("  " ...

  3. 《Algorithms算法》笔记:元素排序(3)——洗牌算法

    <Algorithms算法>笔记:元素排序(3)——洗牌算法 Algorithms算法笔记元素排序3洗牌算法 洗牌算法 排序洗牌 Knuth洗牌 Knuth洗牌代码 洗牌算法 洗牌的思想很 ...

  4. C#的托管和非托管的简单理解

    应该说“托管”一词是和.net概念一起出生的, 我们都知道以前的开发工具无论是Delphi.VB编译出的dll或exe文件都是二进制文件, 可以被操作系统直接识别.而微软为了和JAVA火拼,实现跨平台 ...

  5. varchar(n) 和 int(n)

    mysql(测试版本为5.6) 的varchar必须加范围,否则报错: mysql> CREATE TABLE test ( -> id INT, -> name VARCHAR - ...

  6. Nexus centos 安装

    目录 1.安装nexus 2.启动nexus 2.1启动服务器 2.2以后台进程启动: 2.3web访问 3.搭建私服 3.1 界面元素介绍 3.2 仓库集合的界面 3.3 通过网页方式将jar包上传 ...

  7. Java 动态代理机制分析及扩展--转

    http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/#icomments http://www.ibm.com/developerworks/c ...

  8. Mysql工作流程分析

    Mysql工作流程图 工作流程分析 1. 所有的用户连接请求都先发往连接管理器 2. 连接管理器    (1)一直处于侦听状态    (2)用于侦听用户请求 3. 线程管理器    (1)因为每个用户 ...

  9. ORACLE 分页 java 用jdbc方式以 sys账号连接oracle数据的问题

    2,3,4,6,8   betwenen 为闭区间,前后都包括 select * from(select a.*,rownum rn from (select * from student) a ) ...

  10. IOS9网络请求报错:The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.

    今天下载Xcode7试了下,运行项目时报上面的错误,网上查了下原来iOS9引入了新特性App Transport Security (ATS).详情:App Transport Security (A ...