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