標籤:net 技術 logs vol lib 請求 enc restart 設定
容器分類
從業務資料的角度看,容器可以分為兩類:無狀態(stateless)容器和有狀態(stateful)容器。
無狀態是指容器在運行過程中不需要儲存資料,每次訪問的結果不依賴上一次訪問,比如提供靜態頁面的 網頁伺服器。
有狀態是指容器需要儲存資料,而且資料會發生變化,訪問的結果依賴之前請求的處理結果,最典型的就是資料庫伺服器
volume driver
volume driver可以實現跨主機管理 data volume 方案
任何一個 data volume 都是由 driver 管理的,建立 volume 時如果不特別指定,將使用 local 類型的 driver,即從 Docker Host 的本地目錄中分配儲存空間。如果要支援跨主機的 volume,則需要使用第三方 driver
Rex-Ray driver特點
- cep 是開源的,而且社區活躍。
- 支援多種 backend,VirtualBox 的 Virtual Media、Amazon EBS、Ceph RBD、OpenStack Cinder 等。
- 支援多種作業系統,Ubuntu、CentOS、RHEL 和 CoreOS。
- 支援多種容器編排引擎,Docker Swarm、Kubernetes 和 Mesos。
- Rex-Ray 安裝使用方法非常簡單。
安裝配置
Rex-Ray 以 standalone 進程的方式運行在 Docker 主機上
在使用 Rex-Ray driver 的主機 docker1 和 docker2 上運行如下命令
curl -sSL https://rexray.io/install | sh
然後建立並編輯 Rex-Ray 的設定檔 /etc/rexray/config.yml
可以使用圖形化的線上 Rex-Ray 配置產生器
VirtualBox backend
在 VirtualBox 宿主機,即筆記本上啟動 vboxwebsrv 服務:
vboxwebsrv -H 0.0.0.0
執行如下命令關閉 VirtualBox 的登入認證:
VBoxManage setproperty websrvauthlibrary null
在關機狀態下修改虛擬機器 docker1 和 docker2 的 Storage 配置:
1.刪除 IDE controller。
2.設定 SATA controller 的 port 數量為最大值 30。
重啟 Rex-Ray 服務:
systemctl restart rexray.service
運行 rexray volume ls 測試 Rex-Ray 是否能夠正常工作。
列表中的 volume 是當前 VirtualBox 所有的虛擬磁碟。
建立 Rex-Ray volume安裝外掛程式
從Docker 1.13開始,Docker現在支援一種新的外掛程式架構,其中外掛程式可以作為容器安裝。
$ docker plugin install rexray / ebs EBS_ACCESSKEY = access_key EBS_SECRETKEY = secret_key
建立 volume
在 docker1 或 docker2 上執行如下命令建立 volume:
rexray volume create mysql_data --size=2
使用volume啟動docker
docker run -dit --name mydb_on_docker1 --volume-driver=rexray -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=passw0rd -d mysql
未建立成功放棄,改用ceph作為後端儲存
驗證volumeceph-做後端
部署文檔
1.更改rex-ray的設定檔
其中test-pool是ceph中建的pool
2.重啟rex-ray服務
rexray restart
3.建立卷
docker volume create --driver rexray --name=mysqldata --opt=size=2
4.使用卷建立容器
docker run -dit --name mydb_on_docker1 --volume-driver=rexray -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=passw0rd -d mysq
5.寫資料測試
6.驗證資料一致性
刪除mydb_on_docker1
重新建立一個容器
docker run --name mydb_on_docker2 -v mysqldata:/var/lib/mysql -d mysql
新容器也使用相同的卷 mysqldata,不過這次不需要指定環境變數 MYSQL_ROOT_PASSWORD,因為密碼已經儲存到 mysqldata 裡面了。
現在 Rex-Ray volume mysqldata 已經掛載到 docker2:
① 進入到容器 mydb_on_docker2。
② 登入資料庫,密碼與 mydb_on_docker1 一致。
③ 切換到資料庫 mysql。
④ 確認之前由 mydb_on_docker1 建立的表和寫入的資料完好無損。
docker-跨主機儲存