目前,主流資料庫包括關係型和非關係型兩種。
關係型資料庫是建立在關係模型基礎上的資料庫,借助於集合代數等數學概念金額方法來處理資料庫中的資料,支援複雜的事務處理和結構化查詢。代表實現有mysql
、oracle、postgresql、mariadb、sqlserver等。
非關係型資料庫是新興的資料庫技術,它放棄了傳統關係型資料庫的部分強一限制,帶來效能上的提公升,使其更適用於需要大規模並行處理訂單場景。非關係型資料庫是關係型資料庫的補充,代表產品有mongodb、redis、couchdb等。
1.mysql
使用官方映象可與快速啟動乙個mysql server例項,如下所示:
docker run --name hi-mysql -e mysql_root_password=123 -d mysql:latest
當然,還可以使用--link標籤將乙個應用容器連線到mysql容器:
(1)系統與日誌訪問
docker exec -it some-mysql bash
mysql日誌可以使用docker logs指令檢視:
docker logs some-mysql
(2)使用自定義配置檔案
如果使用者希望使用自定義mysql配置,則可以建立乙個目錄,內建cnf配置檔案,然後將其掛載至容器的/etc/mysql/conf.d目錄。比如,自定義配置檔案為/my/custom/config-file.conf,則可以使用以下指令:
docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e mysql_root_password=my-secret-pw -d mysql:tag
這是新的容器some-mysql啟動後,就會結合/etc/mysql/my.cnf和/etc/mysql/conf.d/config-file.cnf兩個配置檔案。
(3)脫離cnf檔案進行配置
很多配置選項可以通過標籤(flags)傳遞至mysqld程序。這樣使用者就可以脫離cnf配置檔案,對容器進行彈性定製。比如,使用者需要改變預設編碼方式,將所有**額的編碼改為ut8mb4,則可以使用以下指令:
docker run --name some-mysql -e mysql_root_password=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
如果需要檢視可用選項的完整列表,可以執行:
docker run -it --rm mysql:tag --verbose --help
2.mongodb
mongodb是一款可擴充套件,高效能的開源文件資料庫,是當今最流行的nosql資料庫之一。它採用c++開發,支援複雜的資料型別和強大的查詢語言,提供了關聯式資料庫的絕大部分功能。由於mongodb高效能、易部署、易使用等特點,已經在很多領域都很多應用。
(1)使用官方映象
docker run --name mongo-container -d mongo
docker exec -it 942be12b8418 sh
進入mongodb資料庫介面
mongo顯示相關版本資訊
show dbs顯示所有庫
db.status()檢視資料庫狀態
通過該命令 docker exec -it 942be12b8418 /bin/bash進入容器
映象預設暴露mongodb的服務埠:27017,可以通過該埠訪問服務。
(1)連線mongodb容器
使用--link引數,連線新建的mongo-container容器
docker run -it --link mongo-container:db alpine sh
進入alpine系統容器後,使用者可以通過ping指令測試mongo容器的連通性:
(2)直接使用mongo cli指令
如果想直接在宿主機器上使用mongodb映象,可以在docker run指令後面加入entrypoint指令,這樣就可以非常方便的直接進入mongo cli了。
redis是乙個開源的基於記憶體的資料結構儲存系統,可以用作資料庫、快取和訊息中介軟體。
使用官方映象
(1)連線redis容器
docker run -it --link redis-container:db alpine sh
官方映象內也自帶了redis客戶端,可以使用以下指令直接使用:
(2)使用自定義配置
memcached是乙個高效能、分布式的開源記憶體物件快取系統。最初是danga interactive為了優化livejournal的訪問速度而編寫的。目前已經非常廣泛的應用於各種web應用。以bsd licenses授權協議發布。
memcached守護程序基於c語言實現,基於libevent的事件處理可以實現很高的效能。需要注意的是,由於資料僅存在於記憶體中,因此重啟memcached或重啟作業系統會導致資料全部丟失。
可以直接通過官方提供的memcached映象執行乙個memcached-container容器:
docker run --name memcached-container -d memcached
以下指令會將memcached server的記憶體使用量設定為64mb。
docker run --name memcached-container-2 -d memcached memcached -m 64
5.couchdb
couchdb是一款面向文件的nosql資料庫,以json格式儲存資料。它相容acid,可以用於儲存**的資料與內容,以及提供快取等。couchdb裡文件域都是以鍵值對的形式儲存,對資料的每次修改都會得到乙個新的文件修訂號。
couchdb側重於api(可用性和分割槽容忍度)。相比之下,mongodb側重於cp(一致性和分割槽容忍度),neo4j則提供了特有的面向圖形的結構。
執行官方映象:
6.cassandra
cassandra是個開源的分布式資料庫,支援分散的資料儲存,可以實現容錯以及無單點故障等。cassandra在設計上引入了p2p技術,具備大規模可分割槽行儲存能力,並支援spark、storm、hadoop的整合。目前facebook、twitter、instagram、ebay、github等多家公司都在使用cassandra。類似的工具還有hbase等。
使用官方映象
docker run --name my-cassandra -d cassandra:latest
這裡的--name標籤指定容器名稱。cassandra:tag的標籤指定版本號。標籤名稱可以參考官方倉庫的標籤說明:
Docker資料庫應用 Cassandra
apache cassandra 是個開源 apache license 2.0 的分布式資料庫,支援分布式高可用資料儲存,可以提供跨資料中心的容錯能力其無單點故障,並通過非同步無主複製實現所有客戶端的低延遲操作。cassandra在設計上引入了p2p 技術,具備大規模可分割槽行儲存能力,並支援sp...
Docker實戰 四 之Docker資料管理
在生產環境中使用docker的過程中,往往需要對資料進行持久化,或者需要在多個容器之間進行資料共享,這必然涉及到容器的資料管理操作。容器中管理資料主要有兩種形式 資料卷 容器內資料直接對映到本地主機環境 資料卷容器 使用特定容器維護資料卷 1.資料卷 資料卷是乙個可供容器使用的特殊目錄,它將主機作業...
Python實戰之MySQL資料庫操作
1.要想使python可以操作mysql資料庫,首先需要安裝mysql python包,在centos上可以使用一下命令來安裝 sudo yum install mysql python2.啥都不說了,走兩步吧,下面的程式建立了乙個到mysql資料庫的連線,然後執行了乙個簡單的查詢,並列印查詢結果 ...