### 描述
在這個例子里,我們會學到如何構建一個預裝?`MongoDB`?的鏡像。我們還將會看到如何推送鏡像到 Docker Hub 并分享給其他人。
使用 Docker 容器來部署?[MongoDB](https://www.mongodb.org/)?實例將會給你帶來許多好處,例如:
* 易于維護、高可配置的 MongoDB 實例
* 準備好運行和毫秒級內開始工作
* 基于全球訪問的共享鏡像
> 注意: 如果你不喜歡sudo,可以查看[非 root 用戶使用](https://github.com/widuu/chinese_docker/blob/master/examples/installation/binaries.md)
### 為 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/
~~~
> 小貼士:`Dockerfile`文件是靈活的。然而,他們遵循一定的格式。第一項定義的是鏡像的名稱,這里是 Dockerized MongoDB 應用的父鏡像。
我們將使用 Docker Hub 中最新版本的 Ubuntu 鏡像來構建。
~~~
# Format: FROM repository[:version]
FROM ubuntu:latest
~~~
繼續,我們將在?`Dockerfile`?中指定?`MAINTAINER`
~~~
# Format: MAINTAINER Name <email@addr.ess>
MAINTAINER M.Y. Name <myname@addr.ess>
~~~
> 注:盡管 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`?可以在這里[下載](https://github.com/widuu/chinese_docker/blob/master/examples/Dockerfile)
### 構建 MongoDB 的 Docker 鏡像
我們可以使用我們的?`Dockerfile`?來構建我們的 MongoD B鏡像。除非實驗,使用?`docker build`?的?`--tag`?參數來給 docker 鏡像指定標簽始終是一個很好的做法。
~~~
# Format: sudo docker build --tag/-t <user-name>/<repository> .
# Example:
$ sudo docker build --tag my/repo .
~~~
當我們發出這個命令時,Docker 將會通過?`Dockerfile`?來構建鏡像。最終鏡像將被標記成?`my/repo`?。
### [](https://github.com/widuu/chinese_docker/blob/master/examples/mongodb.md#推送-mongodb-鏡像到-docker-hub)推送 MongoDB 鏡像到 Docker Hub
`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鏡像,我們可以運行一個或多個的 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
~~~
- 關于Docker
- 鏡像簡介
- 安裝篇
- Mac OS X
- Ubuntu
- Red Hat Enterprise Linux
- CentOS
- Debain
- Gentoo
- Google Cloud Platform
- Rackspace Cloud
- Amazon EC2
- IBM Softlayer
- Arch Linux
- FrugalWare
- Fedora
- openSUSE
- CRUX Linux
- Microsoft Windows
- Binaries
- 用戶指南
- 使用Docker Hub
- 在Docker中運行應用
- 使用容器
- 使用docker鏡像
- 連接容器
- 管理容器數據
- 使用Docker Hub
- Docker Hub
- 賬戶
- 存儲庫
- 自動構建
- 官方案例
- Docker中運行MongoDB
- Docker中運行Redis服務
- Docker中運行PostgreSQL
- Docker中運行Riak服務
- Docker中運行SSH進程服務
- Docker中運行CouchDB服務
- Docker中運行Apt-Cacher-ng服務