在這個例子裡,我們會學到如何構建一個預裝MongoDB
的Docker鏡像。我們還將會看到如何推送鏡像到Docker Hub注冊表來分享給其他人。
使用Docker容器來部署MongoDB將會給你帶來許多好處,例如:
注意:——如果你不喜歡sudo,可以查看非root用戶使用
讓我們創建一個Dockerfile
並且來開始構建它:
$ nano Dockerfile
雖然是可選的,但是在Dockerfile
開頭處的注釋說明很方便的說明其目的:
# Dockerizing MongoDB: Dockerfile for building MongoDB images # Based on ubuntu:latest, installs MongoDB following the instructions from: # http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/
提示:Dockerfiles是靈活的。然而,他們遵循一定的格式。第一項定義的是鏡像的名稱,這裡是MongoDB docker應用的父鏡像。
我們將使用 Docker Hub中最新版本的Ubuntu鏡像來構建鏡像。
# Format: FROM repository[:version] FROM ubuntu:latest
繼續,我們將指定Dockerfile
中的MAINTAINER
# Format: MAINTAINER Name <[email protected]> MAINTAINER M.Y. Name <[email protected]>
注:盡管Ubuntu系統已經有MongoDB包,但是它們可能過時,因此,在這個例子中,我們將使用MongoDB的官方包。
我們將開始導入MongoDB公共GPG秘鑰。我們還將創建一個MongoDB庫包管理器
# Installation: # Import MongoDB public GPG key AND create a MongoDB list file RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 RUN echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | tee /etc/apt/sources.list.d/10gen.list
這個初步的准備後,我們將更新我們的包並且安裝MongoDB。
# Update apt-get sources AND install MongoDB RUN apt-get update RUN apt-get install -y -q mongodb-org
提示:您可以安裝MongoDB的特定版本與版本使用所需的軟件包列表,例如: RUN apt-get install -y -q mongodb-org=2.6.1 mongodb-org-server=2.6.1 mongodb-org-shell=2.6.1 mongodb-org-mongos=2.6.1 mongodb-org-tools=2.6.1
MongoDB需要數據目錄,讓我們在最後一步中執行
# Create the MongoDB data directory RUN mkdir -p /data/db
最後我們設置ENTRYPOINT
來告訴Docker如何在我們的MongoDB鏡像容器內運行mongod
。並且我們將使用EXPOSE
命令來指定端口:
# Expose port 27017 from the container to the host EXPOSE 27017 # Set usr/bin/mongod as the dockerized entry-point application ENTRYPOINT usr/bin/mongod
現在保存我們的文件並且構建我們的鏡像。
注:完整版的
Dockerfile
可以在這裡下載
我們可以使用我們的Dockerfile
來構建我們的MongoDB鏡像。除非實驗,使用docker build
的--tag
參數來標記docker鏡像始終是一個很好的做法。
# Format: sudo docker build --tag/-t <user-name>/<repository> . # Example: $ sudo docker build --tag my/repo .
當我們發出這個命令時,Docker將會通過Dockerfile
來構建鏡像。最終鏡像將被標記成my/repo
。
docker push
命令推送到Docker Hub上的所有鏡像,可以再Docker Hub上托管和分享。為此,你需要登錄:
# Log-in $ sudo docker login Username: .. # Push the image # Format: sudo docker push <user-name>/<repository> $ sudo docker push my/repo The push refers to a repository [my/repo] (len: 1) Sending image list Pushing repository my/repo (1 tags) ..
使用我們創建的MongoDB鏡像,我們可以運行一個或多個守護進程模式的MongoDB。
# Basic way # Usage: sudo docker run --name <name for container> -d <user-name>/<repository> $ sudo docker run --name mongo_instance_001 -d my/repo # Dockerized MongoDB, lean and mean! # Usage: sudo docker run --name <name for container> -d <user-name>/<repository> --noprealloc --smallfiles $ sudo docker run --name mongo_instance_001 -d my/repo --noprealloc --smallfiles # Checking out the logs of a MongoDB container # Usage: sudo docker logs <name for container> $ sudo docker logs mongo_instance_001 # Playing with MongoDB # Usage: mongo --port <port you get from `docker ps`> $ mongo --port 12345