Docker實戰 九 之資料庫應用

2021-09-20 00:03:29 字數 4034 閱讀 5966

目前,主流資料庫包括關係型和非關係型兩種。

關係型資料庫是建立在關係模型基礎上的資料庫,借助於集合代數等數學概念金額方法來處理資料庫中的資料,支援複雜的事務處理和結構化查詢。代表實現有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資料庫的連線,然後執行了乙個簡單的查詢,並列印查詢結果 ...