失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > dockerfile镜像构建命令

dockerfile镜像构建命令

时间:2019-03-23 13:00:04

相关推荐

dockerfile镜像构建命令

dockerfile镜像构建命令

文章目录

dockerfile镜像构建命令1:FROM2:MAINTAINER3:RUN4:ADD5:COPY6:ENTRYPOINT7:ENV8:EXPOSE9:WORKDIR10:USER11:LABEL12:VOLUME 实例

1:FROM

FROM : Dockerfile中第一条指令必须是FROM指令,表示从哪个基础镜像开始构建镜像

FROM centos:7//基于centos7基础镜像构建新的镜像FROM scratch//表示不以任何镜像为基础

2:MAINTAINER

MAINTAINER : 镜像维护者个人信息,维护者的姓名和邮箱

MAINTAINER xuanning@//维护者姓名和邮箱

3:RUN

RUN : 构建镜像时需要执行的命令,有两种命令执行方式

shell形式执行格式:RUN <command>//RUN后边直接跟shell命令,linux操作系统上默认shell为/bin/sh -cexec形式执行格式:RUN ["executable", "param1", "param2"]//执行可执行文件,executable为可执行文件,param为选项或参数;exec形式可以指定使用其他终端两种形式对比:RUN echo "hzz"RUN ["/bin/bash", "-c", "echo hello"]

dockerfile每一条命令为一层,多条命令最好用最少的RUN命令执行,镜像的层数高了造成镜像的臃肿,不仅仅增加了构件部署的时间,还容易出错

4:ADD

ADD :将本地文件添加到构建的镜像中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget

ADD <src>... <dest>ADD ["<src>",... "<dest>"]//用于支持包含空格的路径示例:ADD test /tmp/ //添加"test"文件到镜像的"/tmp"目录ADD hom* /mydir///添加所有以"hom"开头的文件到镜像的"/mydir"目录

5:COPY

CMD : 指定镜像启动为容器后默认执行的命令,每个 Dockerfile 只能有一条 CMD 命令;如果指定了多条命令,只有最后一条会被执行,如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令

格式:CMD ["executable","param1","param2"]//执行可执行文件,此方式优先CMD command param1 param2 //执行shell内部命令CMD ["param1","param2"]//设置了ENTRYPOINT,则为ENTRYPOINT添加参数示例:CMD ["echo","This is a test"]CMD echo "This is a test"

6:ENTRYPOINT

ENTRYPOINT : 类似于 CMD 指令,但其不会被创建容器时指定的命令覆盖,如果创建容器时指定了命令那么这些命令会被当作参数送给 ENTRYPOINT 指令指定的程序;CMD 和ENTRYPOINT 同在时 CMD 的内容会被当作参数传递给 ENTRYPOINT 指定的命令。

格式:ENTRYPOINT ["executable", "param1", "param2"] //执行可执行文件, 此方式优先ENTRYPOINT command param1 param2 //shell内部命令

7:ENV

ENV :设置环境变量。此环境变量为镜像启动为容器之后容器中的环境变量

格式:ENV <key> <value>//<key>之后的所有内容均会被视为其<value>的组成部分,因此,一次只能设置一个变量ENV <key>=<value> ...//可以设置多个变量,每个变量为一个"<key>=<value>"的键值对,如果<key>中包含空格,可以使用\来进行转义,也可以通过""来进行标示示例:ENV myName xuanningENV myName="xuanning" myAge="20"ENV HTTPD_MPM="event"

8:EXPOSE

EXPOSE :指定镜像启动为容器后开放的端口

格式:EXPOSE <port> [<port>...]示例:EXPOSE 80 443EXPOSE 8080EXPOSE 11211/tcp 11211/udp注:EXPOSE并不会让容器的端口访问到主机。要使其可访问,需要在docker run运行容器时通过-p来发布这些端口,或通过-P参数来发布EXPOSE导出的所有端口。

9:WORKDIR

WORKDIR :工作目录,类似于cd命令

格式:WORKDIR /path/to/workdir示例:WORKDIR /hzz //这时工作目录为/hzz注:通过WORKDIR设置工作目录后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行。

10:USER

USER :指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户

格式:USER userUSER user:groupUSER uidUSER uid:gid示例:USER www注:使用USER指定用户后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT都将使用该用户。

11:LABEL

LABEL指令用于让用户为镜像指定各种元数据(键值对的格式),格式如下。

LABEL multi.label1="value1"

12:VOLUME

VOLUME指令用于在镜像中创建一个挂载点目录。Volume有两种类型:绑定挂载卷和docker管理的卷。在Dockerfile中只支持Docker管理的卷,也就是说只能指定容器内的路径,不能指定宿主机的路径,格式如下。

格式:VOLUME ["/path/to/dir"]示例:VOLUME ["/data"]VOLUME ["/var/www","/var/log/apache2","/etc/apache2"]

实例

1、基于基础镜像centos:7

2、维护者信息

3、添加Centos-7仓库

4、添加epel-7仓库

5、安装nginx软件包

6、暴露指定端口80

7、构建镜像,镜像名称为nginx:v1

8、运行容器,容器名称为自己名字的全拼,映射端口88:80

9、进入容器,删除默认网页,写入新的默认网页

10、通过浏览器,能够正常访问nginx

[root@server1 ~]# mkdir vv[root@server1 ~]# cd vv[root@server1 vv]# lsCentos-7.repo Dockerfile epel-7.repo[root@server1 vv]# vim Dockerfile[root@server1 vv]# cat DockerfileFROM centos:7MAINTAINER xuanning@ADD Centos-7.repo /etc/yum.repos.d/COPY epel-7.repo /etc/yum.repos.d/RUN yum -y install nginxEXPOSE 80CMD ["/usr/sbin/nginx","-g","daemon off;"][root@server1 vv]# docker build -t nginx:v1 .Sending build context to Docker daemon 6.656kBStep 1/7 : FROM centos:7---> eeb6ee3f44bdStep 2/7 : MAINTAINER xuanning@---> Running in 9298fb7f02d8Removing intermediate container 9298fb7f02d8......................Step 6/7 : EXPOSE 80---> Running in 16b68cb5e24eRemoving intermediate container 16b68cb5e24e---> ece6f09d85eaStep 7/7 :CMD ["/usr/sbin/nginx","-g","daemon off;"]---> Running in 95c18f5b967dRemoving intermediate container 95c18f5b967d---> 1a93b23c0e25Successfully built 1a93b23c0e25Successfully tagged nginx:v1[root@server1 vv]# docker run -dit --name cvcv -p 88:80 nginx:v1add17290c971ab13adca90a1afa0e8d44e10d501fd35042d20d3103f2f53bb4b[root@server1 vv]# docker psCONTAINER ID IMAGECOMMAND CREATED STATUS PORTS NAMESadd17290c971 nginx:v1 "/usr/sbin/nginx -g …" 2 seconds ago Up 1 second 0.0.0.0:88->80/tcp, :::88->80/tcp cvcv[root@server1 vv]# docker exec -it cvcv /bin/bash[root@add17290c971 /]# cd /usr/share/nginx/[root@add17290c971 nginx]# lshtml modules[root@add17290c971 nginx]# cd html/[root@add17290c971 html]# ls404.html 50x.html en-US icons img index.html nginx-logo.png poweredby.png[root@add17290c971 html]# rm -rf index.html[root@add17290c971 html]# echo lihao > index.html[root@add17290c971 html]# ls404.html 50x.html en-US icons img index.html nginx-logo.png poweredby.png[root@add17290c971 html]#exit[root@server1 vv]# systemctl stop firewalld.service

浏览器访问

如果觉得《dockerfile镜像构建命令》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。