Dockerfile details

demo相关地址

Dockerfile内容:

FROM node:8.4.0-alpine

RUN set -ex \
   && npm install -g mountebank

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY ./imposter.ejs /usr/src/app
COPY ./mockApi /usr/src/app/mockApi

EXPOSE 8001
CMD mb --configfile imposter.ejs

#CMD语句与RUN不同,RUN是在build镜像的时候运行,而CMD语句是在build结束后运行。
#一个Dockerfile钟可以有多个RUN语句,虽然也可以有多个CMD语句,但是却只有最后一条CMD语句会执行。
  1. RUN set -ex \ 的作用
    set是shell的一个命令,因为shell的执行的过程中,如果有某个出错了,也会继续往下执行,set -ex作用就是,当下面的命令执行出错后,就退出执行,不在继续往下执行。

  2. Dockerfile 的ADDCOPY 的区别:
    在build镜像时ADD

  • ADD 可以实现从远程的某个指定的url上下载文件,然后添加到容器的系统文件目录中。
  • ADD可以将本地可识别的压缩文件解压到容器的指定路径上(但是URL下载和解压不能同时进行,任何通过远程URL下载的压缩文件,都只能拷贝到容器中,不会自动解压)
    COPY:
  • 它是ADD的一个简化版本,它只会复制文件到容器中
  1. mkdir -p /var/www/app中的-p :
    因为mkdir创建目录时,不是递归的,所以想要从非现有的父目录创建子目录,就必须使用 -p来不存在的父目录下创建子目录

使用多个FROM基础镜像来构建多个镜像,dockerfile 如下:

FROM jetty
MAINTAINER "xxx <xxx@163.com>"
COPY RESTful.war /var/lib/jetty/webapps/
FROM jetty
MAINTAINER "xxx <xxx@163.com>"
COPY serverManager.war /var/lib/jetty/webapps/

build 的时候:加 -t 指定仓库名称、tag名称,只对最后一个镜像有效。
如果不加-t,所有新生成镜像都没有仓库名、tag名称。

试过以下几种build生成镜像命令:
1、docker build -t test/restful -t test/manager .      
//指定多次-t ,只有最后一个镜像有名称,前面都是<none>

2、docker build .                             
 //不指定-t,新生成的镜像都是<none>

关于Dockerfile的操作

写好Dockerfile后,可以使用docker来构建一个镜像:

$ docker build .  // . 表示本地Dockerfile的路径
查看刚才创建的容器

通过构建的这个镜像来创建一个容器:

$ docker images
$ docker run -p 8001:8001 7784202e0e60( 镜像ID || 镜像名字) 

如果创建容器总是有错,就需要把错误信息更正了,然后重新构建以此镜像,再创建容器。
但是再创建容器总是出错的时候 ,可以进入到docker中去查看目录等信息:

docker run -it d0b7e6faf4eb sh

构建一个指定名字镜像:

 docker build -t mounteserver .   //通过Dockerfile构建了名字为mountersever的镜像

将自己写好的Dockerfile放到远程docker hub上。
step1: 需要在本地登陆Docker:

$ docker login
 然后输入username(是用户名,不是Docker ID(邮箱)) 和password 

将本地的某个镜像push到远程的Docker hub的镜像库中

//表示通过当前目录的Dockerfile构建一个镜像 名字叫qmm888/qmm
// 注意! 构建镜像名格式必须为:`docker hub的用户名/自定义镜像名`, 否则就会出现push到docker hub时,提示没有权限.
$ docker build -t qmm888/qmm .    

$ docker push qmm888/qmm   //然后把这个镜像push到远程的qmm888用户的qmm仓库下
⚠️: 需要镜像的名字和远程库的目录一致,才能push成功

给镜像打标签

$ docker tag qmm888/qmm qmm888/qmm:0.0.1
$ docker push qmm888/qmm:0.0.1
docker hub 上的我提交的镜像

可以看到第一次提交的镜像没有指定标签,docker就会默认给它一个lastest的标签;
第二次指定标签为0.0.1(可以认是一个版本),在Tag Name中显示了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 10,544评论 0 120
  • 0. 前言 docker是什么?docker是用GO语言开发的应用容器引擎,基于容器化,沙箱机制的应用部署技术。可...
    sessionboy阅读 3,884评论 2 49
  • docker基本概念 1. Image Definition 镜像 Image 就是一堆只读层 read-only...
    慢清尘阅读 8,838评论 1 21
  • 五、Docker 端口映射 无论如何,这些 ip 是基于本地系统的并且容器的端口非本地主机是访问不到的。此外,除了...
    R_X阅读 1,800评论 0 7
  • 一不小心 打倒了 一瓶怀素的百年老酒 线条醉了 墨色也醉了 古老的汉字这会是解脱了 从来不曾如此的张狂 如此的空灵...
    卓不云阅读 389评论 0 1