一:介绍
1 | dockerfile是类似于一种脚本,可以按着脚本生成对应的镜像。 |
二:基础知识
2.1 命令介绍
1 | 1.每条保留字指令都必须为大写字母且后面要跟随至少一个参数 |
2.2 执行流程
1 | 1.docker从基础镜像运行一个容器 |
三:常用保留字
from
1
2基础镜像,当前新镜像是基于哪个镜像的,指定一个已经
存在的镜像作为模板,第一条必须是fromMAINTAINER
1
镜像维护者的姓名和邮箱
RUN
1
执行shell脚本,是在build的时候执行的
EXPOSE
1
对外暴露的端口
WORKDIR
1
指定在创建容器后,终端默认登录进来的工作目录,一个落脚点
USER
1
指定该镜像以什么用户执行,如果不指定,默认是root
ENV
1
2
3
4用来在构建镜像过程中设置环境变量
案例: ENV MY_PATH /opt/dd
这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境
变量前缀一样,也可以在其他指令中直接使用这些环境变量($MY_PATH)。ADD
1
将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
COPY
1
2
3类似于ADD,拷贝文件和目录到镜像中。
将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像
内的<目标路径>位置。VOLUME
1
容器数据卷,用于数据保存和持久化工作
CMD
1
2
3
41.指定容器启动后要做的事情
2.注意
- dockerfile可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换
- CMD是在ducker run时运行,RUN指令是在docker build时运行ENTRYPOINT
1
21.指定一个容器启动时要运行的命令
2.类似于CMD指令,但ENTRYPOINT不会被docker run后面的命令覆盖,而且这些命令参数会被当作参数传递给ENTRYPOINT指令指定的程序centos安装jdk17案例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34# 继承centos
from centos
# 作者
MAINTAINER renjie
# 根目录
ENV MYPATH /opt
WORKDIR $MYPATH
# 安装vim编辑器
RUN yum -y install vim
# 安装ifconfig命令查看网络ip
RUN yum -y install net-tools
# 安装jdk17以及lib库
RUN yum -y install glibc.i686
RUN mkdir $MYPATH/jdk
# ADD是相对jar,把jdk-17_linux-x64_bin.tar.gz添加到容器中,安装包必须要和Dockfile文件在同一位置
ADD jdk-17_linux-x64_bin.tar.gz $MYPATH/jdk
# 配置java环境变量
ENV JAVA_HOME $MYPATH/jdk/jdk-17.0.7
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH .:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
EXPOSE 80
CMD echo $MYPATH
CMD echo "success----------ok"
CMD /bin/bash执行build
1
docker build -t centos_jdk17:1.0 .
- 虚悬镜像
1
2
3
4
5仓库和标签都是<none>的镜像,没有什么用可以删除
1.查询所有的虚悬镜像
docker images ls -f dangling=true
2.删除所有的虚悬镜像
docker images prune
*************感谢您的阅读*************