Docker_DockerFile

DockerFile

Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构造的脚本。

构建三步骤:
1.编写Dockerfile文件
2.docker build
3.docker run

DockerFile构建过程解析

Dockerfile内容基础知识
1 每条保留字段指令都必须为大写字母且后面要跟随至少一个参数
2 指令按照从上到下,顺序执行
3 #表示注释
4 每条指令都会创建一个新的镜像层,并对镜像进行提交
Docker执行Dockerfile的大致流程
1 docker从基础镜像运行一个容器
2 执行一条指令并对容器作出修改
3 执行类似docker commit的操作提交一个新的镜像层
4 docker再基于刚提交的镜像运行一个新容器
5 执行dockerfile中的下一条指令直到所有指令都执行完成

Dockerfile面向开发,
Docker镜像成为交付标准,
Docker容器则涉及部署与运维。

DockerFile体系结构(保留字指令)

1 FROM
基础镜像,当前新镜像是基于哪个镜像的
2 MAINTAINER
镜像维护者的姓名和邮箱地址
3 RUN 
容器构建时需要运行的命令
4 EXPOSE
当前容器对外暴露出的端口
5 WORKDIR
指定在创建容器后,终端默认登陆的进来工作目录
(没有指定的话 就是根目录)
6 ENV
用来在构建镜像过程中设置环境变量
7 ADD
宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
8 COPY
类似ADD,拷贝文件和目录到镜像中。
将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置
9 VOLUME
容器数据卷,用于数据保存和持久化工作
10 CMD
指定一个容器启动时要运行的命令
Dockerfile中可以有多个CMD命令,但只有最后一个生效,CMD会被docker run之后的参数替换
11 ENTRYPOINT
指定一个容器启动时要运行的命令
ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数
12 ONBUILD
当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

DockerFile案例

自定义镜像mycentos

如果直接拉取的是阿里云的Centos镜像
在这里插入图片描述
初始centos镜像的默认路径是/,而且不支持vim、iifconfig等命令。接下来就通过编写dockerfile文件创建一个新的镜像,使之默认路径及相关命令都发生改变。

FROM centos

ENV mypath /tmp
WORKDIR $mypath

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo "success"
CMD /bin/bash

编写dockerfile
在这里插入图片描述
在Dockerfile的目录下执行下列命令

docker build  -t mycentos:1.3 .
#后面还有一个点 不要忘记
docker build -f 指定dockerfile文件 -t 新镜像名字:TAG

在这里插入图片描述
运行一下镜像

docker run -it 新镜像名字:TAG

发现默认路径和相关命令都发现了改变
在这里插入图片描述
列出镜像的变更历史

docker history 镜像名称/ID

在这里插入图片描述

CMD-ENTRYPOINT命令

编写一个Dockerfile文件
在这里插入图片描述
如果使用CMD的话只能是最后一个生效,那么假设要查看请求页面的头信息,加上参数i,那么命令就变成了
在这里插入图片描述
那么CMD -i便会覆盖到掉上面的CMD命令,而我们希望的是加入-i参数,因此可以使用ENTRYPOINT命令
在这里插入图片描述
这时再执行只需在语句后加上-i参数即可

docker run myip -i

参数追加到原来的命令中,进一步去执行

之前的命令,就会变成以下的命令,而不是覆盖

ENTRYPOINT ["curl","-s",-i "http://ip.cn"]
ONBUILD命令

先创建一个父类的dockerfile文件在这里插入图片描述
再构建成镜像

docker build -f /mydocker/Dockerfile2 -t myip_father .

再创建一个dockerfile文件,FPOM继承的是myip_father这个镜像
在这里插入图片描述
构建子镜像并运行,发现父镜像的ONBUILD被执行
在这里插入图片描述

自定义的tomcat9

先建立一个文件夹,放置以下文件
在这里插入图片描述
接下来就可以自己来编写Dockerfile文件

FROM centos

COPY c.txt /usr/local/a.txt

ADD jdk-8u231-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.36.tar.gz /usr/local/
#安装VIM编辑器
RUN yum -y install vim
#设置工作访问时的WORKDIR路径,登陆落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_231
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomact-9.0.36
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.36
ENV PATH $PATH:$JAVA_HOME HOME/BIN:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听的端口
EXPOSE 8080
#ENTRYPOINT ["/usr/local/apache-tomcat-9.0.36/bin/startup.sh"]
#CMD ["/usr/local/apache-tomcat-9.0.36/bin/catalina.sh","run"]
#启动时运行tomcat
CMD /usr/local/apache-tomcat-9.0.36/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.36/bin/logs/catalina.out                              

在这里插入图片描述
下面就可以进行构建

docker build -f Dockerfile -t lemon/tomcat9 .

在这里插入图片描述
运行一下

docker run -d -p 9080:8080 --name myt9
-v /mydocker/tomcat9/test:/usr/local/lemon/tomcat9/apache-tomcat-9.0.36/webapps/test
-v /mydocker/tomcat9/tomcat9logs/:/usr/local/apache-tomcat-9.0.36/logs --privileged=true 2158a23cca7d

在这里插入图片描述
再次验证一下即可

完结撒花!,Docker的使用基本了解,就先学习到这里,如果以后哪里有再需要进一步学习的,再来学习!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值