目录
1. 是什么
2 构建过程解析
2.1 构建的三个步骤
2.2 Docker内容基础知识
2.3 Docker执行DockerFile的大致流程
3. DockerFile 常用保留字指令
4. 案例理解常用保留字指令
4.1 案例要求
4.2 pull镜像
4.3 编写 Dockerfile文件
4.4 构建
4.5 运行
5. 虚悬镜像
5.1 是什么
5.2 查找容器中的虚悬镜像
5.3 删除虚悬镜像
1. 是什么
DockerFile使用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。
2 构建过程解析
2.1 构建的三个步骤
- 编写DockerFile文件
- docker build命令构建镜像
- docker run 依照镜像运行容器实例
2.2 Docker内容基础知识
- 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
- 指令按照从上到下,顺序执行
- #表示注释
- 每条指令都会创建一个新的镜像层并对镜像进行提交
2.3 Docker执行DockerFile的大致流程
- docker从基础镜像运行要一个容器
- 执行一条指令并对容器做出修改
- 执行类似docker commit的操作提交一个新的镜像层
- docker再基于刚提交的镜像运行一个新容器
- 执行dockerFile中的下一条指令直到所有指令都执行完成
总结:DockerFile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。
3. DockerFile 常用保留字指令
- FROM : 基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模版,第一条必须是from
- MAINTAINER : 镜像维护者的姓名和邮箱地址
-
RUN:容器构建时需要运行的命令;
俩种格式:
shell:RUN <命令行命令> ,类似于在终端操作shell命令 ,例 RUN yum -y install vim
exec:RUN ["可执行文件","参数1","参数2"...],例RUN ["./test.php","dev","offline"] 等价 于RUN ./test.php dev offline
RUN是在docker build时运行 - EXPOSE:当前容器对外暴露出的关口
- WORKDIR:指定在创建容器后,终端默认登录进来的工作目录,一个落脚点
- USER:指定该镜像以什么样的用户去执行,如果都不指定,默认是root
-
ENV:用来在构建镜像过程中设置环境变量。
ENV MY_PATH /usr/mytest,这个环境变量可以在后续的任何RUN指令中使用,这就 如同在命令前面指定了环境变量前缀一样;也可以在其它指令中直接使用这些环境变量 - VOLUME:容器数据卷,用于数据保存和持久化工作
- ADD:将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
-
COPY:类似ADD,拷贝文件和目录到镜像中。
将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径> 位置。COPY src dest 等价于 COPY["src","dest"] -
CMD:指定容器启动后要干的事情。和RUN相似,也是俩种格式。
注意:Dockerfiel 中可以有多个CMD指令,但是只有最后一个生效,CMD会被docker run之后的参数替换。
CMD是在docker run时运行;RUN是在docker build时运行。 - ENTRYPOINT:也是一个用来指定容器启动时要运行的命令。类似CMD指令,但是ENTRYPOINT不会被docker run后面的命令覆盖,而且这些命令行参数会被当做参数送给ENTRYPOINT指令指定的程序
4. 案例理解常用保留字指令
4.1 案例要求
在原有centos基础上增加vim + ifconfig + jdk8的功能
4.2 pull镜像
docker pull centos:7
pull拉去centos镜像的时候,建议拉取centos:7(指定版本),要是不指定版本,默认拉取最新版即8.x,但是cengos官方在21年年底停止更新,yum指令没有源,会报错。
4.3 编写 Dockerfile文件
FROM centos:7
MAINTAINER dylan
ENV MY_PATH /usr/local
WORKDIR $MY_PATH
#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络ip
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar。把 jdk-8u181-linux-x64.tar.gz 添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u181-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_181
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
EXPOSE 80
CMD echo $MY_PATH
CMD echo "success..................ok"
CMD /bin/bash
将上面的内容编写到 /myfile/Dockerfile 文件中。(下载的jdk 也在这个目录中)
4.4 构建
docker build -t 新镜像名字:TAG .
注意 上面TAG 后面后个点
构建信息:
[+] Building 29.6s (12/12) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 827B 0.0s
=> [internal] load metadata for docker.io/library/centos:7 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/7] FROM docker.io/library/centos:7 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 107B 0.0s
=> CACHED [2/7] WORKDIR /usr/local 0.0s
=> CACHED [3/7] RUN yum -y install vim 0.0s
=> CACHED [4/7] RUN yum -y install net-tools 0.0s
=> [5/7] RUN yum -y install glibc.i686 11.4s
=> [6/7] RUN mkdir /usr/local/java 0.5s
=> [7/7] ADD jdk-8u181-linux-x64.tar.gz /usr/local/java/ 5.7s
=> exporting to image 11.6s
=> => exporting layers 11.5s
=> => writing image sha256:e31b03196027d41b27e2f4342fa0705405b03b180b0239a95f1bb8a11cfbd4e0 0.0s
=> => naming to docker.io/library/centosjava:1.0.1
4.5 运行
docker run -it 新镜像名字:TAG
5. 虚悬镜像
5.1 是什么
仓库名、标签都是<none>的镜像,称之为dangling image。文章来源:https://www.toymoban.com/news/detail-848974.html
5.2 查找容器中的虚悬镜像
docker image ls -f dangling=true
5.3 删除虚悬镜像
虚悬镜像已经失去存在价值,可以删除文章来源地址https://www.toymoban.com/news/detail-848974.html
[root@localhost ~]# docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N]
到了这里,关于DockerFile 简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!