创建MongoDB Docker镜像

简介

本文我们准备学习如何构建MongoDB Docker镜像。以及如何推送镜像到Docker Hub registr和与其他人共享。
使用docker和容器部署mongodb实例有几个好处:

  • 易于维护,高度可配置的MongoDB实例
  • 毫秒级运行和启动
  • 可共享镜像
  • 创建MongoDB Dockerfile

    我们来创建Dockerfile并开始构建它:
    以下说明的可选的,不过在Dockerfile开头添加注释可以说明它的目的:

    1. # Dockerizing MongoDB: Dockerfile for building MongoDB images
    2.     # Based on ubuntu:latest, installs MongoDB following the instructions from:
    3.     # http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/

    我们使用从Docker Hub最新的Ubuntu版本来构建镜像。

    1. # Format: FROM    repository[:version]
    2. FROM       ubuntu:latest

    然后声明此Dockerfile的维护者:

    1. # Format: MAINTAINER Name <email@addr.ess>
    2. MAINTAINER M.Y. Name <myname@addr.ess>

    导入MongoDB公共GPG密钥。然后创建一个MongoDB仓库文件。

    1. # Installation:
    2. # Import MongoDB public GPG key AND create a MongoDB list file
    3. RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
    4. RUN echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-3.0.list

    完成这些初始准备后我们就可以更新软件包并安装MongoDB。

    1. # Update apt-get sources AND install MongoDB
    2. RUN apt-get update && apt-get install -y mongodb-org

    MongoDB需要一个数据目录。

    1. # Create the MongoDB data directory
    2. RUN mkdir -p /data/db

    最后设置ENTRYPOINT来让docker从镜像运行一个容器时执行这个ENTRYPOINT。对于端口,使用EXPOSE暴露。

    1. # Expose port 27017 from the container to the host
    2. EXPOSE 27017
    3.  
    4. # Set usr/bin/mongod as the dockerized entry-point application
    5. ENTRYPOINT ["/usr/bin/mongod"]

    构建MongoDB Docker镜像

    开始构建镜像。

    1. # Format: docker build --tag/-t <user-name>/<repository> .
    2. # Example:
    3. $ docker build --tag my/repo .

    推送MongoDB镜像到Docker Hub

    首先登录到docker hub。

    1. # Log-in
    2. $ docker login
    3.  
    4. Username:
    5. ..

    开始推送:

    1. # Push the image
    2. # Format: docker push <user-name>/<repository>
    3. $ docker push my/repo
    4.  
    5. The push refers to a repository [my/repo] (len: 1)
    6. Sending image list
    7. Pushing repository my/repo (1 tags)
    8. ..

    使用MongoDB镜像

    使用刚构建好的MongoDB镜像,我们可以运行一个或多个MongoDB实例。

    1. # Basic way
    2. # Usage: docker run --name <name for container> -d <user-name>/<repository>
    3. $ docker run -p 27017:27017 --name mongo_instance_001 -d my/repo
    4.  
    5. # Dockerized MongoDB, lean and mean!
    6. # Usage: docker run --name <name for container> -d <user-name>/<repository> --noprealloc --smallfiles
    7. $ docker run -p 27017:27017 --name mongo_instance_001 -d my/repo --smallfiles
    8.  
    9. # Checking out the logs of a MongoDB container
    10. # Usage: docker logs <name for container>
    11. $ docker logs mongo_instance_001
    12.  
    13. # Playing with MongoDB
    14. # Usage: mongo --port <port you get from `docker ps`>
    15. $ mongo --port 27017
    16.  
    17. # If using docker-machine
    18. # Usage: mongo --port <port you get from `docker ps`>  --host <ip address from `docker-machine ip VM_NAME`>
    19. $ mongo --port 27017 --host 192.168.59.103

    如果需要在一个主机运行多个实例,需要映射不同的端口。

    1. # Start two containers and map the ports
    2. $ docker run -p 28001:27017 --name mongo_instance_001 -d my/repo
    3.  
    4. $ docker run -p 28002:27017 --name mongo_instance_002 -d my/repo
    5.  
    6. # Now you can connect to each MongoDB instance on the two ports
    7. $ mongo --port 28001
    8.  
    9. $ mongo --port 28002
    标签:DockerMongodb 发布于:2019-11-20 00:24:09