Docker的实例小教程--Dockerfile制作镜像(2)

有了制作简单镜像的基础之后,今天准备在上一个Docker image基础上,加入mongodb服务。

首先看一下,现在本地有哪些镜像:

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
kyugao/ali.ubuntu   latest              4f1dec752b62        2 days ago          211.2 MB
ubuntu              14.04               1e0c3dd64ccd        10 days ago         187.9 MB

开始今天的工作:

  • 创建工作目录:mongodb
  • 生成Dockerfile文件
$ mkdir mongodb
$ touch Dockerfile

准备mongodb的发行包,与Dockerfile放在同级目录下下载地址。该版本是14.04的,通过curl还是讯雷,主要看速度。

  • 打开Dockerfile编写头两句:
FROM kyugao/ali.ubuntu
MAINTAINER Adam Gao "solonot@163.com"

– 第一个新命令:WORKDIR
比如,将这一次的工作目录设定为:/root/workdir

WORKDIR /root/workdir

作用一:若不存在,生成该目录
作用二:进入这个目录,并执行接下来的指令,比如通过ADD命令,将mongodb的包,复制到工作目录中。

ADD mongodb-linux-x86_64-ubuntu1404-3.2.10.tar ./

这里将介绍ADD命令的一个新的作用,就是:自动解压。也就是说,最终这个压缩包会被解压到/root/workdir目录下。所以,在镜像里看是下面这样的

$ pwd
/root/workdir/mongodb-linux-x86_64-ubuntu1404-3.2.10

– 第二个新命令:ENV
设置环境变量,在这里就是想将mongodb的命令加到path中:

ENV PATH $PATH:/root/workdir/mongodb-linux-x86_64-ubuntu1404-3.2.10/bin

和linux中设置有点不一样,中间没有”=”号。这样,在镜像中的任何地方,都可以执行mongod这个命令来启动服务了。

– 第三个新命令:EXPOSE
开放端口,容器是一个相对封闭的环境,正常运行的程序和服务,在宿主机中是无法访问的,所以我要开放mongodb服务的端口:

EXPOSE 27017

– 第三个新命令:ENTRYPOINT
ENTRYPOINT这个命令是启动容易的时候,会运行哪个命令,或程序。
我们指定mongod,这是我们想启动的服务,而指定dbpath为数据存储目录。

RUN mkdir dbpath
ENTRYPOINT ["mongod", "--dbpath=./dbpath"]
  • 完整的Dockerfile:
FROM kyugao/ali.ubuntu
MAINTAINER Adam Gao "solonot@163.com"
WORKDIR /root/workdir
ADD mongodb-linux-x86_64-ubuntu1404-3.2.10.tar ./
ENV PATH $PATH:/root/workdir/mongodb-linux-x86_64-ubuntu1404-3.2.10/bin
EXPOSE 27017
RUN mkdir dbpath
ENTRYPOINT ["mongod", "--dbpath=./dbpath"]

使用docker build生成镜像:

$ docker build -t kyugao/mongodb ./

下面的指令:

$ docker run -d -p 27017:27017 kyugao/mongodb
dfe43f4c7de3af1ccf8445d4c535ed212c2935abd0212a098b5f674483723c36
$ docker run -d -p 127.0.0.1:27016:27017 kyugao/mongodb
2465c7597164c507bdf3feb372ec15554ff25015d534ae15100a1425a69f5b4b

-d 参数,表示命令这个容器是一个后台服务。
-p 参数,表示面后要在宿主机和docker容器之间建立一个端口映射,当映射端口时指定了ip地址,如上面第二个docker run指令,便只能在本机访问了。
那么,如果查看这个后台的服务呢?

$ $ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                        NAMES
2465c7597164        kyugao/mongodb      "mongod --dbpath=./db"   3 minutes ago       Up 3 minutes        127.0.0.1:27016->27017/tcp   berserk_golick
dfe43f4c7de3        kyugao/mongodb      "mongod --dbpath=./db"   7 minutes ago       Up 7 minutes        0.0.0.0:27017->27017/tcp     dreamy_franklin

高高宇在学习计算机技术的同时,还在学习中医养生,和股票投资,我已经把全部的学习笔记都放到了我的微信公众号上。
高高宇读书的微信公众号
这里写图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值