上一章,我们讲了DockerFile的最基本构成,讲了两种Dockerfile的构建Image方式,这一篇,我们将来介绍DockerFile里面所带的N多参数。

以下就是今天所要说DockerFile涉及的环境:

【VMCloud云平台】拥抱Docker(六)关于DockerFile(2)_第1张图片

DockerFile简易示意图:

【VMCloud云平台】拥抱Docker(六)关于DockerFile(2)_第2张图片

1、 RUN参数:我们在上一章创建的DockerFile里加入参数Run yum install –y vim*:

【VMCloud云平台】拥抱Docker(六)关于DockerFile(2)_第3张图片

2、 尝试构建,你就会发现Dockerfile的RUN参数生效了:

【VMCloud云平台】拥抱Docker(六)关于DockerFile(2)_第4张图片

【VMCloud云平台】拥抱Docker(六)关于DockerFile(2)_第5张图片

3、 所以,RUN的作用就是可以帮你运行一些需要预运行的命令,但是最好不要在RUN里面做类似“yum update”、“apt-get update”之类的操作,这并不符合Dockerfile的最佳实践。

4、 CMD参数:介绍到RUN就不得不介绍下CMD了,CMD命令与RUN的区别在于,CMD在一个DockerFile只能用一次,如果在DockerFile存在多个CMD的话,默认只运行最后一条,比如你可以在最后一行写上一句“Enjoy your docker p_w_picpaths”,CMD的调用比较特殊,是在通过以你的p_w_picpaths构建完成容器后自动触发,比如docker run ImagesName:

wpsB1FA.tmp

5、 EXPOES参数:这个参数用来指定Container需要暴露给其他Container的端口,相当于构建内部网络,与-p的区别在于,expoes是对内提供端口方法(Container之间,比如ngx访问mysql),-p参数是映射端口相当于NAT,比如:

【VMCloud云平台】拥抱Docker(六)关于DockerFile(2)_第6张图片

6、 构建完成:

【VMCloud云平台】拥抱Docker(六)关于DockerFile(2)_第7张图片

7、 接着,我们通过这个p_w_picpaths创建两个容器,就明白EXPOSE参数的作用了,可以看到下图有出现“port 22”:

【VMCloud云平台】拥抱Docker(六)关于DockerFile(2)_第8张图片

8、 但是在端口映射表里是看不到的,证明这是内部映射端口:

【VMCloud云平台】拥抱Docker(六)关于DockerFile(2)_第9张图片

9、 进入其中一个容器,使用nmap测试另外一个容器的端口是否能够相通:

【VMCloud云平台】拥抱Docker(六)关于DockerFile(2)_第10张图片

10、 ENTRYPOINT参数:就此可以看出EXPOSE的作用,眼尖的人儿可能看到我使用了ENTRYPOINT这个参数,ENTRYPOINT这个参数的属性跟CMD有点儿像,同样是多个参数存在的时候只执行最后一条,这个例子中,我使用了该参数将SSH服务作为一个后台服务进行运行:

【VMCloud云平台】拥抱Docker(六)关于DockerFile(2)_第11张图片


 

【VMCloud云平台】拥抱Docker(六)关于DockerFile(2)_第12张图片