在這個例子里,我們會學到如何構建一個預裝MongoDB的Docker鏡像。我們還將會看到如何推送鏡像到Docker Hub注冊表來分享給其他人。
使用Docker容器來部署MongoDB將會給你帶來許多好處,例如:
注意:——如果你不喜歡sudo,可以查看非root用戶使用
讓我們創(chuàng)建一個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
繼續(xù),我們將指定Dockerfile中的MAINTAINER
# Format: MAINTAINER Name <email@addr.ess>
MAINTAINER M.Y. Name <myname@addr.ess>
注:盡管Ubuntu系統(tǒng)已經有MongoDB包,但是它們可能過時,因此,在這個例子中,我們將使用MongoDB的官方包。
我們將開始導入MongoDB公共GPG秘鑰。我們還將創(chuàng)建一個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需要數據目錄,讓我們在最后一步中執(zhí)行
# 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來構建我們的MongoDB鏡像。除非實驗,使用docker build的--tag參數來標記docker鏡像始終是一個很好的做法。
# Format: sudo docker build --tag/-t <user-name>/<repository> .
# Example:
$ sudo docker build --tag my/repo .
當我們發(fā)出這個命令時,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)
..
使用我們創(chuàng)建的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