栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Dockerfile知识点总结

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Dockerfile知识点总结

简介

Dockerfile是docker 执行 build 镜像构建命令的时候所需的文件,描述了镜像构建所需的base image和构建镜像时需要做的事情

1. Dockerfile创建
touch Dockerfile
注意:docker build 命令中的Dockerfile文件路径是指Dockerfile的父级文件夹路径,不是Dockerfile本体
2. Dockerfile内容 常见指令:
#Version 1.0.0   注释
FROM centos:centos7   #指定base image
MAINTAINER yuuma "xxxxx@qq.com"   #设置作者信息
ENV REFRESHED_TIME 2022-06-06   #自定义环境变量
RUN yum install -y vim   #在容器内执行的命令
EXPOSE 8080   #开放端口
指令格式用法
FROMFROM {container}指定构建镜像所引用的base image
MAINTAINERMAINTAINER {author} {email}指定镜像的作者信息,可以通过docker inspect IMAGE命令查看
ENVENV {key} {value}记录一个环境变量,可被这行指令之后的指令使用,在其它指令中使用$key即可调用,也可通过在容器内输入env查看
RUNRUN {command}执行一个命令,每一个RUN指令结束后都会构建一个新镜像并启动为容器执行下一个RUN指令
EXPOSEEXPOSE {port}开放端口,端口都需要手动开放

Tips : 环境变量可以通过在docker run时,使用参数 -e {…}来配置环境变量

CMD 和 ENTRYPOINT

1.CMD :

CMD [ command ]

CMD [ "/bin/bash" ]
CMD [ "ls", "-a"]

CMD指令可以指定一个启动容器后执行的命令,使用效果等同于docke run命令后面跟随的容器执行命令
注意:CMD和docker run后的容器执行命令同时存在时,CMD的命令会被覆盖掉

2.ENTRYPOINT :

ENTEYPOINT [ command ]

ENTEYPOINT [ "/bin/bash" ]
ENTEYPOINT [ "ls", "-a"]

ENTRYPOINT结构与CMD相同,但是ENTRYPOINT指令可以作为执行命令的描述,使执行命令的参数通过CMD或者docke run后附带命令传递进来,例:

ENTRYPOINT [ "ls" ]   #执行命令描述
CMD [ "/bin" ] 或 docker run IMAGE "/bin"   #执行命令的参数

最终得到的容器内执行命令是 "ls /bin"
WORKDIR

跳转到指定目录,执行后续指令,例:

WORKDIR /bin   #后续指令将会在/bin目录下执行

WORKDIR与ENV的结合使用,例:

ENV HOME_PATH /home   #配置环境变量HOME_PATH
WORKDIR $HOME_PATH   #跳转到/home目录下执行后续指令
USER

指定该镜像构建成的容器将以哪个用户身份去执行,可以指定用户以及分组,例:

USER 用户名/UID:分组/GID

USER user
USER user:group
USER user:gid
USER uid
USER uid:group
USER uid:gid

还可以通过在docker run 命令中,使用-u参数指定执行容器的用户

Tips : 不指定用户的话,容器默认以root用户身份执行

VOLUME

向镜像构建的容器中添加卷,例:

VOLUME [ "/home/myFIle" ]   #为容器添加卷
VOLUME [ "/home/myFIle", "/usr/local" ]   #可以为容器添加多个卷,以数组的形式书写即可

VOLUME指令添加的卷,绑定的宿主机地址默认为/var/lib/docker/volumes/{CONTAINER} (不同版本的docker可以会有所差异)
当docker run -v 和 VOLUME指定同一个目标目录时,-v 会覆盖掉VOLUME的映射
更多可以查阅 一文说清楚Dockerfile 中VOLUME到底有什么用? 这位大佬的博客

ADD

将外部文件复制到容器里,例:

ADD /home/myConf/myNginx.conf /etc/nginx/nginx.conf
#上述代码将本机/home/myConf目录下的myNginx.conf文件,复制到了容器中的/etc/nginx目录下,
#并命名为nginx.conf

ADD指令的文件源还可以是url格式,例:

ADD http://wordpress.org/latest.zip /home/latest.zip

如果将ADD的文件源指定为一个合法的归档文件(包括gzip, bzip2, xz)的话,Docker甚至会将其解开,例:

ADD latest.tar.gz /var/www/wordpress/

Tips:ADD 指令通过文件路径最后一个字符是否是 / 来判断需要处理的是文件目录还是文件

COPY

COPY和ADD非常相像,但是COPY仅仅只负责复制的工作,例:

COPY settings.xml /home/maven/

COPY的目标源必须是容器内的一个绝对路径,不存在的文件目录将会被创建
COPY的文件源必须和Dockerfile在同一目录下,不能复制该路径以外的
如果文件源源是文件,那文件随同元数据会被一起复制; 如果文件源是目录,那这整个目录包括文件系统元数据都会被复制
Tips:由该指令复制的文件或者目录,uid和gid都会设置为0

ONBUILD

指定某指令为触发器,例:

FROM centos:centos7   
MAINTAINER yuuma "xxxxx@qq.com"   
ENV REFRESHED_TIME 2022-06-06  
RUN yum install -y git 
ONBUILD RUN yum install -y vim   #触发器
EXPOSE 8080   

成为触发器的那行指令,只有在当前Dockerfile构建时,或者作为其它镜像的base image被构建时,才会触发。(子镜像会触发,孙子之后的镜像不会触发)
Tips:FROM, MAINTAINER, ONBUILD,这三个指令都不能作为ONBUILD的触发器指令

未完待续
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/965004.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号