Dockerfile

1.Dockerfile是啥?

    定义:Dockerfile 就是镜像描述文件

 

2.Dockerfile作用?

   作用:通过Dockerfile文件构建一个属于自己的镜像

3.如何通过Dockerfile构建自己镜像

   a.在指定位置创建一个Dockerfile文件

   b.通过Dockerfile构建镜像

      docker  build  -t    aa:1.0  . (指定Dockerfile文件所在位置)

4.Dockerfile构建镜像流程

      

 注意:将本次构建不需要文件和目录书写到dockerIgnore中,因为Dockerfile所以目录中就是上下文,Docker中默认会将上下文文件都发给到Docker引擎中去。这样构建起来速度就很慢,因此,需要将不需要的文件和目录写到dockerIgnore中去。

 构建中,会产生临时镜像,最终生成一个image.临时镜像存放在缓存中。

5.Dockerfile的命令

FROM    当前镜像是基于哪个镜像  第一个指令必须是FROM
MAINTAINER   镜像维护者的姓名和邮箱地址
RUN      构建镜像时需要运行的指令
EXPOSE    当前容器对外暴露的端口号   # 这个命令仅仅声明当前容器中服务端口是谁
WORKDIR    指定在创建容器后,终端默认登录进来的工作目录,一个落脚点。用来为Dockerfile中的任何RUN、CMD、ENTRYPOINT、COPY和ADD指令设置工作目录。如果WORKDIR不存在,即使它没有在任何后续
Dockerfile指令中使用,它也将被创建。
如果指定的目录不存在,那么会自动创建。 ENV 用来 构建过程中设置环境变量 env key value ADD 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar包 COPY 类似于ADD,拷贝文件和目录到镜像中,将从构建上下文目录中《原路径》的文件
/目录赋值到新的一层的镜像内的<目标路径> 位置。 VOLUME 容器数据卷,用于数据持久化和持久化工作 CMD 指定一个容器启动时要运行的命令,DOckerfile可以有多个CMD指定,但只有最后一个生效,CMD会被docker run之后的参数替换。 ENTRYPOINT 指定一个容器启动时要运行的命令,ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及其参数。

6.Dockerfile的构建

   a.注意创建的文件最好是: Dockerfile

   b.每条保留字指定必须大写,且后面都是跟至少一个参数。

   c.# 表示注释

   d.每条指令都会创建一个新的镜像层,并对镜像进行提交。

7.Dockerfile的指令详解

    WORKDIR:  如果不存在文件目录,也会自动创建。在Dockerfile中可以设置多个WORKDIR,会依次进入相应的目录

           比如:

WORKDIR  /apps
WORKDIR      data

# 第二个workdir会进入到 /apps/data

     ENV 构建过程中设置环境变量. 

ENV   key  value  或者 key=value

     VOLUME:   数据卷,用于持久化。注意如果Dockerfile中没有指定的话,也是可以通过-v 来声明。

VOLUME  /root/data/

 CMD &  ENTRYPOINT 作用

          1.)都是用来指定容器启动时默认执行命令

    CMD:  指定一个容器启动时要运行的命令,DOckerfile可以有多个CMD指定,但只有最后一个生效CMD会被docker run之后的参数替换。

    ENTRYPOINT:  指定一个容器启动时要运行的命令,ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及其参数。

        2)使用语法

1.直接命令方式:  redis-server  

2.json数组方式   ["redis-server"]      #### 推荐用这种方法

        注意 :  推荐使用第二种json数组方式。

       3)区别是什么?

          cmd里面命令如果在运行容器时进行覆盖:   docker  run  镜像:版本号  覆盖自己定义命令

          entrypoint里面命令如果在运行容器时进行覆盖:   docker  run    --entrypoint=指令   镜像:版本号  传递的参数

        4)如何使用?

              entorypoint和cmd配合使用,entrypoint来书写一个容器固定的指令,cmd用来给entrypoint传递参数,使用这种方式必须使用json数组形式。

ENTRYPOINT  ["ls"]
CMD ["/root/data"]

8.Dockerfile的案例

1.创建一个django项目
2.开发简单的功能,连接数据库
3.测试项目代码
4.编写Dockerfile生成项目镜像
5.运行镜像

 

  

 

posted on 2023-04-25 22:26  一先生94  阅读(97)  评论(0编辑  收藏  举报

导航