一、Dockerfile简介

Dockerfile其实就是根据特定的语法格式撰写出来的一个普通的文本文件。
利用Docker build命令依次执行在Dockerfile中定义的一系列命令,最终生成一个新的镜像(自己制作镜像的技术就是dockerfile)

二、Dockerfile基本结构

  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时指令

三、Dockerfile指令

3.1、FROM指令

  • 作用:指定基础镜像,必须是第一个命令
  • 格式:

    # 格式
    FROM <IMAGE>   常用
    FORM <IMAGE>:<TAG> 常用
    FORM <IMAGE>@<DIGTST>
    # 实例
    FROM python:3.8.0
    # 注:tag/digest是可选的,如果不使用这两个值。则默认会使用latest版本的基础继续

    在执行构建命令之前必须进入Dockerfile文件所在目录----构建镜像的命令:docker build -t {镜像的名称:tag名称} 构建镜像的位置
    eg:

    # 创建Dockerfile文件
    vim  Dockerfile
    # 编辑该文件
    FROM mysql:8.0
    # 利用Docker build 命令执行该文件,构建镜像
    docker build  Dockerfile(报错,换个命令)
    docker build -t mysql:v1.0  .

    image.png

3.2、MAINTAINER指令

  • 作用:给镜像添加维护者信息
  • 格式:

    #格式
    MAINTAINER <name>
    #实例
    MAINTAINER 名字
    MAINTAINER 邮箱
    MAINTAINER 名字 <邮箱>

    3.3、RUN指令

  • 作用:在构建镜像时执行的命令(在构建镜像时要执行的初始指令)
  • 格式:RUN用于在镜像容器中执行命令,有以下两种命令执行方式

    • shell 执行方式
    #格式
    RUN <命令>
    • exec执行方式
    RUN ["executable","param1","param2"]

    eg:

# 编辑Dockerfile文件,增加以下代码
RUN /bin/bash -c "echo  hello"
RUN ["/bin/bash","-c","echo  world"]
# 构建执行
docker build -t mysql:v1.1 .

3.4、ADD指令

  • 作用:将本地文件添加到容器中,tar类型文件会自动化解压(网络压缩资源不会被解压),可以访问网络资源
  • 格式:

    #格式
    ADD 要拷贝的文件  镜像的目录位置
    ADD ["<src>",..."<dest>"] #用于支持包含空格的路径

    eg:

# 以tomcat:latest 为例
# 编辑 Dockerfile文件, 将test.tar.gz文件添加到镜像tomcat:test下面
FROM tomcat:latest
RUN /bin/bash -c "echo  hello"
RUN ["/bin/bash","-c","echo  world"]
ADD test.tar.gz /
# 构建镜像
docker build -t tomcat:test  .
# 确认镜像构建成功
docker images
# 确认copy的文件已经copy成功
# 基于构建的镜像创建容器并运行
docker run -dti --name tomcat_test tomcat:test
# 查看容器是否创建成功
docker ps -a
# 进入容器内部
docker exec -ti 容器的id  /bin/bash
# 回到根目录
cd  /
# 查看copy的内容
ll或者ls

3.5、COPY指令

  • 作用:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源。

3.6、CMD指令

  • 作用:构建容器后调用,也就是在容器启动时才进行调用。
  • 格式:

    • CMD ["executable","param1","param2"] (执行可执行文件,优先)
    • CMD ["param1","param2"] (设置了ENTRYPOINT,则直接调用ENTRYPOINT添加参数)
    • CMD command param1 param2 (执行shell内部命令)

    eg:

# 编写Dockerfile 文件
FROM tomcat:latest
RUN /bin/bash -c "echo  hello"
RUN ["/bin/bash","-c","echo  world"]
CMD echo "hello wrold!!!"
# 构建镜像
docker build -t tomcat:test2 .
# 查看镜像是否创建成功
docker images
# 使用镜像创建容器并启动容器查看输出信息
docker run -ti --name tomcat_test2 tomcat:test2

RUN 指令是在构建镜像时运行的指令,CMD指令是在启动容器时运行的指令

3.7、ENV指令

  • 作用:设置环境变量
  • 格式:

    • ENV <key> <value> <key>之后的所有内容均会被视为其<value>的组成部分,因此,一次只能设置一个变量
    • ENV <key>=<value> ... #可以设置多个变量,每个变量为一个"<key>=<value>"的键值对,如果<key>中包含空格,可以使用\来进行转义,也可 以通过""来进行标示;另外,反斜线也可以用于续行

eg:

# 以centos镜像为基础,配置好java运行环境
# 准备centos基础镜像(自己下载)
# 准备jdk1.8的tar(自己下载)
# 创建Dockerfile ,编辑Dockerfile,将jdk的包拷贝到基础镜像中,设置环境变量
FROM centos:latest
ADD  java的文件   /usr/
ENV JAVA_HOME /usr/jdk目录
ENV PATH $JAVA_HOME/bin

CMD java -version
# 执行构建镜像
docker build -t centos:jdk8 .
# 以创建镜像来启动容器,并且默认执行java -version
docker run -ti --name centos_jdk8 centos:jdk8

3.8、EXPOST指令

  • 作用:指定于外界交互的端口
  • 格式:EXPOSE <port> [<port>...]
    eg:
EXPOSE 80 443
EXPOSE 8080
EXPOSE 11211/tcp 11211/udp

注:EXPOSE并不会让容器的端口访问到主机。要使其可访问,需要在docker run运行容器时通过-p来发布这些端口,或通过-P参数来发布EXPOSE导出的所有端口
eg:

# 创建Dockerfile文件
vim Dockerfiel
# 编辑Dockerfile设置EXPOSE指定端口
FROM tomcat:latest
EXPOSE 8080
# 构建自己的镜像
docker build -t tomcat:test2 .
# 创建容器并启动
docker run -dti -p 8080:8080 --name tomcat_test2  tomcat:test2
# 进入创建容器当中
docker exec -ti  974 /bin/bash
ls
# 修改容器内webapps.dist
cd webapps.dist
mv * /usr/local/tomcat/webapps 
cd ..
rm -rf webapps.dist

3.9、WORKDIR指令

  • 作用:指定工作目录,类似如cd 命令
  • 格式:WORKDIR 位置

注:通过WORKDIR设置工作目录后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行。在使用docker run运行容器时,可以通过-w参数覆盖构建时所设置的工作目录。

3.10、其他指令

  • ENTRYPOINT:配置容器,使其可执行化。配合CMD可以省去"application",只使用参数;
  • VOLUME:用于指定持久化目录;
  • USER:指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服 务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户;
  • ARG:用于指定传递给构建运行时的变量;
  • ONBUILD:用于设置镜像触发器

3.11、Dockerfile使用命令

  • 作用:根据dockerfile创建镜像
  • 命令格式:docker build [options] PATH|URL| -
  • 参数:

    • PATH,Dockerfile所在路径,文件名必须为Dockerfile
    • URL,Dockerfile所在URL地址,可选参数
    • -t,--tag list 为镜像设置名称和tag
    • -f,--file string 指定Dockerfile的路径

    四、总结

    image.png


测试菜鸟
10 声望3 粉丝

测试小白爱测试!!!


« 上一篇
Dokcer-容器
下一篇 »
Docker-Repository