描述
在这个例子里,我们会学到如何构建一个预装mongodb
的docker镜像。我们还将会看到如何推送镜像到docker hub注册表来分享给其他人。
使用docker容器来部署mongodb将会给你带来许多好处,例如:
- 易于维护、高可配置的mongodb实例
- 准备好运行和毫秒级内开始工作
- 基于全球访问的共享镜像
为mongodb创建一个dockerfile
让我们创建一个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
maintainer m.y. name
注:尽管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
现在保存我们的文件并且构建我们的镜像。
构建mongodb的docker镜像
我们可以使用我们的dockerfile
来构建我们的mongodb镜像。除非实验,使用docker build
的--tag
参数来标记docker镜像始终是一个很好的做法。
# format: sudo docker build --tag/-t / .
# example:
$ sudo docker build --tag my/repo .
当我们发出这个命令时,docker将会通过dockerfile
来构建镜像。最终镜像将被标记成my/repo
。
推送mongodb镜像到docker hub
docker push
命令推送到docker hub上的所有镜像,可以再docker hub上托管和分享。为此,你需要登录:
# log-in
$ sudo docker login
username:
..
# push the image
# format: sudo docker push /
$ 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镜像,我们可以运行一个或多个守护进程模式的mongodb。
# basic way
# usage: sudo docker run --name -d /
$ sudo docker run --name mongo_instance_001 -d my/repo
# dockerized mongodb, lean and mean!
# usage: sudo docker run --name -d / --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
$ sudo docker logs mongo_instance_001
# playing with mongodb
# usage: mongo --port
$ mongo --port 12345