Docker系列教程06_Docker的Dockerfile

1.什么是Dockerfile

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

  2. Dokcerfile的构建步骤

    a) 编写Dokcerfile文件

    b)docker build 生成新的镜像

    c) docker run 运行镜像

  3. 以centos的镜像为例来说明 https://hub.docker.com/_/centos
    Docker系列教程06_Docker的Dockerfile_第1张图片
    Docker系列教程06_Docker的Dockerfile_第2张图片

FROM scratch  #基于某个父镜像
ADD centos-7-x86_64-docker.tar.xz / 把宿主机里面的这个tar包添加并解压到容器
一些标签的设置
LABEL org.label-schema.schema-version="1.0" \
    org.label-schema.name="CentOS Base Image" \
    org.label-schema.vendor="CentOS" \
    org.label-schema.license="GPLv2" \
    org.label-schema.build-date="20191001"
#执行终端
CMD ["/bin/bash"]

以上的Dockerfile执行流程

  1. FROM scratch #基于某个父镜像 生成一个镜像 使用生成的镜像再启动一个新的容器

  2. ADD centos-7-x86_64-docker.tar.xz 把压缩包添加到上一行命令执行完之后运行的新的容器里面,再运行一个新的容器

  3. LABEL org.label-schema.schema-version=“1.0” 在上一行命令执行完之后运行的新的容器里面添加一个LABEL 再运行一个新的容器

  4. CMD ["/bin/bash"] 在上一个新的容器里面执行一个/bin/bash的命令 再生一个新的镜像

2.DockerFile构建过程解析

2.1基础知识

1,每条保留字指令都必须为大写字母后面要跟随至少一个参数
2,指令从上到下顺序执行
3,#表示注释
4,每条指令都会创建一个新的镜像层,并对镜像进行提交

2.2大致流程

1,docker从基础镜像运行一个容器
2,执行一条指令并对容器进行修改
3,执行类似于docker commit的操作提交一个新的镜像
4,docker再基于刚提交的新的镜像运行一个新的容器
5,执行dockerfile的下一个指令再从执行第2点直到没有指令

2.3总结

从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,
① Dockerfile是软件的原材料
② Docker镜像是软件的交付品
③ Docker容器则可以认为是软件的运行态。
Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。

  1. Dockerfile,需要定义一个Dockerfile,Dockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等;
  2. Docker镜像,在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行 Docker镜像时,会真正开始提供服务;
  3. Docker容器,容器是直接提供服务的。
    Docker系列教程06_Docker的Dockerfile_第3张图片

3.DockerFile体系结构

3.1关键字

FROM 基础镜像,当前新镜像是基于哪个镜像的

MAINTAINER 镜像维护者的姓名和邮箱地址

RUN 容器构建时需要运行的命令

EXPOSE 当前容器对外暴露的端口

WORKDIR 指定在创建容器后,终端默认登陆进来的工作目录

ENV 用来在构建镜像过程中设置环境变量

ADD 将宿主机目录下的文件拷贝进镜像并且ADD命令会自动处理URL和解压tar包

COPY 类似ADD,拷贝文件和目录到镜像中 ,语法COPY src dest COPY [’'src",“dest”]

VOLUME 容器数据卷,用于数据保存和持久化工作

CMD 指定一个容器启动时要运行的命令格式CMD[‘ls’] run -it cenos -lh

​ shell: CMD <命令>

​ exec CMD [‘可执行文件’,“参数1”,“参数2”]

​ DockerFile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换

ENTEYPONT 指定一个容器启动时要运行的命令 ENTEYPORT [‘ls’] run -it cenos -lh

​ ENTRYPOINT的目地和CMD一样,都是在指定容器启动程序及参数

OBBUILD 当构建一个被继承的Dockerfile时运行命令,父镜像在被子镜像继承后触发父镜像的onbuild

3.2总结

Docker系列教程06_Docker的Dockerfile_第4张图片

4.Base镜像的说明

docker Hub上99%的镜像都是通过base镜像中安装和配置需要的软件构建出来的
Docker系列教程06_Docker的Dockerfile_第5张图片

5.自定义mycentos镜像

5.1目地

  1. 登陆后的默认路径
  2. vim编辑器
    Docker系列教程06_Docker的Dockerfile_第6张图片

5.2进入mydocker目录创建DockerFile文件编写

cd  /mydocker
mkdir mycentos
touch Dockerfile
vi Dockerfile

向Dockerfile里面写入内容
Docker系列教程06_Docker的Dockerfile_第7张图片

5.3使用docker build命令构建镜像

docker build -f /root/mydocker/mycentos/Dockerfile -t mycentos:1.1 .

-f /root/mydocker/mycentos/Dockerfile 如果Dockerfile的文件是这个名字,可以不加

docker build -t mycentos:1.1 .

Docker系列教程06_Docker的Dockerfile_第8张图片
Docker系列教程06_Docker的Dockerfile_第9张图片

5.4使用docker run命令运行

Docker系列教程06_Docker的Dockerfile_第10张图片
测试进入了自动在/root目录下,并且可以使用vim命令了

5.5列出镜像的变更历史

docker history 镜像名:TAG
Docker系列教程06_Docker的Dockerfile_第11张图片

6.自定义镜像说明CMD和ENTRYPORT的区别

6.1CMD说明

Dockerfile 中可以有多个CMD的命令,但只有最后一个生效,CMD会被docker run之后的参数替换掉

可以使用tomcat的案例演示

查看tomcat的Dockerfile
在这里插入图片描述
从上面的可以看出最后执行了一个catalina.sh的命令 相当于./bin/catalina.sh
运行如下命令,可以看出下图的效果

docker run -it -p 9999:8080 tomcat ls -lh

Docker系列教程06_Docker的Dockerfile_第12张图片
发现这个tomcat的容器启动之后就退出了

那是因为在启动容器的时候后面加了ls -lh那么会覆盖Dockerfile里面的 CMD [“catalina.sh”, “run”]

6.2ENTRYPOINT说明

使用ENTRYPOINT来运行命令,在run 运行的参数会追加到新的命令后面

6.3自定义ls镜像来说明CMD和ENTRYPOINT的区别

6.3.1编写Dockerfile

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

6.3.2构建镜像

docker build -t myls:1.2 .

6.3.3启动镜像

docker run -it myls:1.2 -lh

在这里插入图片描述
出现错误,这是因为Dockerfile里面使用的是CMD [“ls”, “-a”]运行是传一个-lh过去会覆盖

6.3.4修改Dockerfile

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

6.3.5构建镜像

docker build -t myls:1.3 .

6.3.6运行镜像

docker run -it myls:1.3 -l

Docker系列教程06_Docker的Dockerfile_第13张图片

发现 【 -l 】被追加到 ls 后面了哦

7.自定义tomcat镜像

7.1准备工作

下载tomcat8

下载jdk8linux
Docker系列教程06_Docker的Dockerfile_第14张图片

#创建目录
mkdir -p /mydocker/mytomcat
#进入目录
cd /mydocker/mytomcat

在这里插入图片描述

7.2编写Dockerfile

Docker系列教程06_Docker的Dockerfile_第15张图片

7.3构建镜像

docker build -t mytomcat:1.0 .

7.4运行镜像测试

docker run -it --name 'mytomcat-1' -p 9999:8080 mytomcat:1.0

Docker系列教程06_Docker的Dockerfile_第16张图片

8.构造项目的镜像

8.1准备工作

在这里插入图片描述

8.2jar包镜像的制作

8.2.1创建目录

在这里插入图片描述

8.2.2进入并把jar包放进来

在这里插入图片描述

8.2.3创建并编写dockerfile文件

Docker系列教程06_Docker的Dockerfile_第17张图片

8.2.4构造镜像

在这里插入图片描述

8.2.5测试

在这里插入图片描述
Docker系列教程06_Docker的Dockerfile_第18张图片

8.3war包镜像的制作

8.3.1准备war 包

在这里插入图片描述

8.3.2创建并编写Dockerfile

Docker系列教程06_Docker的Dockerfile_第19张图片

8.3.3打包构建

在这里插入图片描述

8.3.4运行测试

在这里插入图片描述
Docker系列教程06_Docker的Dockerfile_第20张图片

9.视频地址

https://ke.qq.com/course/469242?taid=3997450616908026&tuin=21f98a63

ps:如需最新的免费文档资料和教学视频,请添加QQ群(627407545)领取。

你可能感兴趣的:(docker,linux,java,大数据,python)