上一章,我们讲了DockerFile的最基本构成,讲了两种Dockerfile的构建Image方式,这一篇,我们将来介绍DockerFile里面所带的N多参数。
以下就是今天所要说DockerFile涉及的环境:
DockerFile简易示意图:
1、 RUN参数:我们在上一章创建的DockerFile里加入参数Run yum install –y vim*:
2、 尝试构建,你就会发现Dockerfile的RUN参数生效了:
3、 所以,RUN的作用就是可以帮你运行一些需要预运行的命令,但是最好不要在RUN里面做类似“yum update”、“apt-get update”之类的操作,这并不符合Dockerfile的最佳实践。
4、 CMD参数:介绍到RUN就不得不介绍下CMD了,CMD命令与RUN的区别在于,CMD在一个DockerFile只能用一次,如果在DockerFile存在多个CMD的话,默认只运行最后一条,比如你可以在最后一行写上一句“Enjoy your docker images”,CMD的调用比较特殊,是在通过以你的images构建完成容器后自动触发,比如docker run ImagesName:
5、 EXPOES参数:这个参数用来指定Container需要暴露给其他Container的端口,相当于构建内部网络,与-p的区别在于,expoes是对内提供端口方法(Container之间,比如ngx访问mysql),-p参数是映射端口相当于NAT,比如:
6、 构建完成:
7、 接着,我们通过这个images创建两个容器,就明白EXPOSE参数的作用了,可以看到下图有出现“port 22”:
8、 但是在端口映射表里是看不到的,证明这是内部映射端口:
9、 进入其中一个容器,使用nmap测试另外一个容器的端口是否能够相通:
10、 ENTRYPOINT参数:就此可以看出EXPOSE的作用,眼尖的人儿可能看到我使用了ENTRYPOINT这个参数,ENTRYPOINT这个参数的属性跟CMD有点儿像,同样是多个参数存在的时候只执行最后一条,这个例子中,我使用了该参数将SSH服务作为一个后台服务进行运行: