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