Docker實戰(九)之數據庫應用


目前,主流數據庫包括關系型和非關系型兩種。

關系型數據庫是建立在關系模型基礎上的數據庫,借助於集合代數等數學概念金額方法來處理數據庫中的數據,支持復雜的事務處理和結構化查詢。代表實現有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容器:

docker run --name some-app --link some-mysql:mysql -d application-that-uses-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容器的連通性:

ping db

 

(2)直接使用mongo cli指令

如果想直接在宿主機器上使用mongodb鏡像,可以在docker run指令后面加入entrypoint指令,這樣就可以非常方便的直接進入mongo cli了。

docker run -it --link mongo-container:db --entrypoint mongo mongo --host db

 

3.Redis

Redis是一個開源的基於內存的數據結構存儲系統,可以用作數據庫、緩存和消息中間件。

使用官方鏡像

 docker run --name redis-container -d redis

(1)連接redis容器

docker run -it --link redis-container:db alpine sh

 官方鏡像內也自帶了redis客戶端,可以使用以下指令直接使用:

docker run -it --link redis-container:db --entrypoint redis-cli redis -h db

(2)使用自定義配置

docker run -v /myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf --name myredis redis redis-server /usr/local/etc/redis/redis.conf

 

4.Memcached

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則提供了特有的面向圖形的結構。

運行官方鏡像:

docker run --name couchdb-container couchdb
這個鏡像中CouchDB的默認端口是5984,用戶可以使用link指令進行容器鏈接:

docker run --name couchdb-app --link couchdb-container:couch couchdb

 

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的標簽指定版本號。標簽名稱可以參考官方倉庫的標簽說明:https://hub.docker.com/r/library/cassandra/tags。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM