DockerFile

一、DokerFile 介绍

DockerFile是用来构建docker镜像的文件!表示镜像文件到底是由什么东西一步步构成的。

例如:你在淘宝上买了一个衣架,但是卖家并没有给你发一个完整的衣架,而是一些组件和一张图纸,你按照这个图纸一步一步将衣架组装起来,就成了你所需要的样子。那么DockerFile 就是这张图纸,镜像文件就是你需要的这个衣架,Dockerfile 不建议随便命名,就用 Dockerfile。
因此,DockerFile其内部包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

 

二、构建步骤

1、编写一个 Dockerfile 文件
2、docker build 构建为一个镜像
3、docker run 运行镜像
4、docker push 发布镜像(DockerHub、阿里云镜像仓库)

三、DockerFile构建过程

1、基础知识:

(1)每个保留关键字(指令)都必须是大写字母!
(2)从上到下的顺序执行!
(3) # 表示注释!
(4)每个指令都会创建提交一个新的镜像层,并提交!

Dockerfile使面向开发的,我们以后要发布项目,做镜像,就需要编写Dockerfile文件,这个文件十分简单!
Docker镜像逐渐成为企业交付的标准。

2、步骤:

DockerFile:构建文件,定义了一切的步骤,源代码。
DockerImages:通过DockerFile 构建生成的镜像,最终发布和运行的产品。
Docker容器:容器就是镜像运行起来提供服务的。

四、DockerFile的指令

FROM        # 基础镜像,一切从这里开始构建
MAINTAINER  # 镜像是谁写的,姓名加邮箱
RUN         # 镜像构建的时候需要运行的命令
ADD         # 步骤 例如tomcat镜像,添加这个tomcat压缩包!
WORKDIR     # 镜像的工作目录
VOLUME      # 挂载的目录
EXPOSE      # 暴露端口配置
CMD         # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT  # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD     # 当构建一个被继承 DockerFile 这个时候就会运行 ONBUILD 的指令
COPY        # 类似ADD,将我们文件拷贝到镜像中
ENV         # 构建的时候设置环境变量!

 


五、实战测试-Centos7

Docker Hub中 99%镜像都是从这个基础的 FROM scratch 镜像过来的,然后配置需要的软件和配置来进行的构建。

创建一个自己的Centos7

1、编写 DockerFile 文件

mkdir /home/dockerfile

cd /home/dockerfile

vim mydockerfile-centos    

# 写入以下内容
FROM centos:7
MAINTAINER Liang<2018180595@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum install -y vim net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "----end----"
CMD /bin/bash

2、通过这个文件构建镜像

docker build -f mydockerfile-centos -t mycentos:0.1 .

3、测试运行

docker run -it --name myc01 mycentos:0.1

4、查看本地镜像的变更历史

docker history <镜像ID>OR<镜像名>

六、测试CMD 与 ENTRYPOINT 区别

CMD          # 指定这个容器四栋的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT   # 指定这个容器启动的时候要运行的命令,可以追加命令

1、测试 CMD

(1) 编写Dockerfile文件

vim dockerfile-cmd-test

FROM centos:7
CMD ["ls","-a"]

(2) 构建镜像并查看

docker build -f dockerfile-cmd-test -t cmdtest .

(3) run运行,发现 ls -a 命令生效

(4) 追加一个命令 -l  # ls -al

-l 替换了 CMD ["ls","-a"] 所以报错

2、测试ENTRYPOINT

(1) 编写 Dockerfile 文件

vim dockerfile-cmd-entrypoint

FROM centos:7
ENTRYPOINT ["ls","-a"]

(2) 构建镜像

docker build -f dockerfile-cmd-entrypoint -t entrypoint-test .

(3) run运行,发现 ls -a 命令生效

(4) 追加一个命令 -l  # ls -al

DockerFile中很多命令都十分的相似,我们需要了解他们的区别,我们最好的学习就是对比他们然后测试效果!

七、实战测试-Tomcat

1、准备镜像文件 tomcat 压缩包,jdk的压缩包!

 

2、编写 Dockerfile 文件,创建readme文件。官方命名 Dockerfile build会自动寻找这个文件,就不需要 -f指定了!

FROM centos:7
MAINTAINER liang<123@qq.com>

COPY readme.txt /usr/local/readme.txt

ADD jdk-8u333-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-10.0.22.tar.gz /usr/local/

RUN yum install -y vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_333
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-10.0.22
ENV CATALINA_BASH /usr/local/apache-tomcat-10.0.22
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-10.0.22/bin/startup.sh && tail -F /usr/local/apache-tomcat-10.0.22/bin/logs/catalina.out

3、构建镜像

docker build -t diytomcat .

4、启动镜像

docker run -d -p 9090:8080 --name dt -v /home/docker/tomcat/test:/usr/local/apache-tomcat-10.0.22/webapps/test -v /home/docker/tomcat/tomcatlogs:/usr/local/apache-tomcat-10.0.22/logs diytomcat

5、访问测试

6、发布项目 (由于做了卷挂,我们直接在本地编写项目就可以发布!)

(1)、返回到宿主机,进入挂载目录

cd /home/docker/tomcat/test


vim index.jsp

<!DOCTYPE html>
<html>
  <h1>Hello, world!</h1>
</html>

(2)、访问

 小结

 

posted @ 2022-06-14 17:06  荔枝的汁  阅读(26)  评论(0编辑  收藏  举报