1、是什么
Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
2、Dockerfile基础知识
- 每条保留字指令都必须为大写字母且后面跟至少一个参数
- 指令按照从上到下,顺序执行
- 每条指令都会创建一个新的镜像层,并对镜像层进行提交
3、docker执行Dockerfile的流程
- docker从基础镜像运行一个容器
- 执行一条指令并对容器作出修改
- 执行列斯docker commit的操作提交一个新的镜像层
- docker再基于刚 提交的镜像运行一个新容器
- 执行dockerfile中的下体条指令直到所有指令都执行完成
4、DockerFile体系结构(保留字指令)
1、FROM
基础镜像,当前新镜像是基于哪个镜像的,必须放在第一行。
scratch镜像是所有镜像的根镜像,类似与java的Object类,但是是一个空镜像。
2、MAINTAINER
镜像创建者的姓名和邮箱
3、RUN
容器构建时需要运行的命令
4、EXPOSE
当前容器对外暴露的端口
5、WORKDIR
指定创建容器后,终端默认登录进来的工作目录
6、ENV
用来在构建镜像过程中设置环境变量,这些变量以”key=value”的形式存在,并可以在容器内被脚本或者程序调用
7、ADD
将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包,它有两个参数,源和目标,如果源是一个URL,那该URL的内容将被下载并复制到容器中
8、COPY
类似ADD,拷贝文件和目录,但没ADD强大
9、VOLUME
容器数据卷,用于数据保存和持久化工作
10、CMD
指定一个容器启动时要运行的命令
Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换掉
11、ENTRYPOINT
指定一个容器启动时要运行的命令,和CMD不同的是它不会被docker run之后的参数所覆盖
12、ONBUILD
当构建一个被继承的Docckerfile时运行命令,父镜像在被子镜像继承后父镜像的onbuild被触发
例子:构建一个tomcat
编写Dockerfile
FROM centos
MAINTAINER bw<bw@xxx.com>
#把宿主机当前上下文的c.txt拷贝到容器/usr/local下并重命名为cincointainer.txt
COPY c.txt /usr/local/cincointainer.txt
#把java与tomcat添加到容器中
ADD apache-tomcat-9.0.10.tar.gz /usr/local/
ADD jdk-8u181-linux-x64.tar.gz /usr/local/
#安装vim编辑器
RUN yum -y install vim
ENV MYPATH /usr/local
#设置工作访问时候的WORKDIR路径
WORKDIR $MYPATH
#配置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_181
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/libtools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.10
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.10
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#设置数据卷
VOLUME /usr/local/data
#容器运行时监听并对外暴露的端口
EXPOSE 8080
#启动并运行tomcat 下面几种方式都可以
# ENIRYPOINT ["/usr/local/apache-tomcat-9.0.10/bin/startup.sh"]
# CMD ["/usr/local/apache-tomcat-9.0.10/bin/startup.sh","run"]
CMD /usr/local/apache-tomcat-9.0.10/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.10/logs/catalina.out
构建Dockerfile
//运行命令时就在Dockerfile所在目录可以这样,可以通过-f制定Dockerfile路径
[root@localhost tomcat9]# docker build -t bwtomcat .
[root@localhost tomcat9]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
bwtomcat latest 2ce845153889 16 minutes ago 737.4 MB
//运行此镜像
docker run --name "tomcat" -it -p 8080:8080 -v /opt/data:/usr/local/data bwtomcat
//进入到容器中
[root@localhost ~]# docker exec -t b01c196de9e1 /bin/bash
//当前落脚的目录就是在Dockerfile中WORKDIR设置的目录
[root@bf9b80c997db local]#