Docker 实战四(Dockerfile命令)

目录

什么是Dockerfile?

DockerFile文件

FROM指令

MAINTAINER指令

WORKDIR指令

COPY和ADD指令

RUN指令

ENV指令

CMD/ENTRYPOINT指令

VOLUME指令

EXPOSE指令

USER指令


什么是Dockerfile?

  • Dockerfile 是 Docker 的 RPM Spec文件

  • Dockerfile 是一个包含用户创建Docker镜像所有指令的文本文件

  • Dockerfile 中的指令指定在创建Docker 镜像时做什么操作

  • Docker 读取Dockerfile中指令创建Docker镜像

  • 每个指令将创建新的Docker镜像层

下面我来介绍dockerfile的各个参数的作用以及用法

DockerFile文件

FROM指令

  • Dockerfile必须以FROM 开头,指定baseimage

  • 语法

    • FROM <images> [AS <name>]

    • FROM <image> [:<tag>] [AS <name>

demo:

FROM centos

MAINTAINER指令

  • 镜像的维护者的姓名和邮箱
  • 语法
    • MAINTAINER <name>

demo:

MAINTAINER chen<xxxx@163.com>

WORKDIR指令

  • WORKDIR指令设置RUN,CMD,ENTRYPOINT,COPY和ADD的工作目录

  • 语法

    • WORKDIR /path/to/directory

  • 默认WORKDIR是根目录/,任何通过WORKDIR指令设置的WORKDIR都相对于根目录/

  • 在同一Dockerfile中可设置多个WORKDIR指令,如果设置WORKDIR为绝对路径,后续WORKDIR指令设置的相对路径被附加到初始绝对路径

demo:

WORKDIR $MYPATH

COPY和ADD指令

  • COPY和ADD指令实现从主机到容器的文件传输功能

  • COPY支持简单 的文件服务

  • ADD除了COPY支持的功能外还支持其他功能如:tar包,自动解压,远程url等

  • 语法

    • ADD <source><destination>

    • COPY <source><destination>

    • ADD -–chown=<user>:<group><source><destination>

    • COPY -–chown=<user>:<group><source><destination>

使用注意点:

  • 如果destination不存在,则自动创建

  • 所有新创建的文件或者文件夹UID和GID为0,即root用户,通过–chown选项修改

  • 如果destination 末以/结尾,则认为destination为文件,source内容将写入文件

  • 如果source包含通配符,则destination必须为目录,且以/结尾,否则build失败

  • source 必须在build上下文存在,不能build上下文之外

  • 针对ADD指令

    • 如果source是url,而destination不是目录不以/结尾,则从url下载的文件写入destination;

    • 如果destination是目录且以/结尾,则URL对应的文件被下载到destination所在目录,如<destination>/<filename>;

    • 如果source是本地tar包,tar包被自动解压为目录,而远程tar包暂时不支持

demo:

# 复制test.txt 到/usr/local/testincontainer.txt
COPY test.txt /usr/local/testincontainer.txt
# 解压tomcat 到 /usr/local
ADD apache-tomcat-9.0.14.tar.gz /usr/local

RUN指令

  • 语法

    • RUN <command>

    • RUN [“executable”,“parameter 1”,“parameter 2”]

  • RUN指令在容器的可写入层被执行命令,并commit容器为新的镜像

  • 上一步RUN指令生成的镜像被接下来RUN使用,每次RUN指令生成一个新的镜像

  • Dockerfile中最好用链式输入命令以减少创建镜像层数量 command && command

demo:

RUN yum -y install vim

ENV指令

  • 用来在构建镜像时设置的环境变量
  • 语法
    • ENV key value
    • ENV key=value

demo:

ENV MYPATH /usr/local

CMD/ENTRYPOINT指令

  • 如何指定启动容器时执行什么命令

  • 语法

    • CMD [“executable”,“param1”,“param2”](exec形式)

    • CMD[“param1”,“param2”](作为ENTRYPOINT的默认参数)

    • CMD command param1 param2(shell 形式)

    • ENTRYPOINT [“executable”,“param1”,“param2”] (exec形式 )

    • ENTRYPOINT command param1 param2 (shell 形式)

  • 如果在Dockerfile中不指定CMD/ENTRYPOINT指令,Docker将使用基础镜像提供的默认命令

  • CMD/ENTRYPOINT指令在创建Docker镜像时不执行,只有在容器启东时才执行

  • 既可以使用exec形式也可以shell形式指定要执行的指令

 

 No ENTRYPOINTENTRYPOINT exec_entry p1_entryENTRYPOINT [“exec_entry”,“p1_entry”]
No CMDerror,not allowed/bin/sh -c exec_entry p1_entryexec_entry p1_entry
CMD[“exec_cmd”,“p1_cmd”]exec_cmd p1_cmd/bin/sh -c exec_entry p1_entryexec_entry p1_entry exec_cmd p1_cmd
CMD[“p1_cmd”,“p2_cmd”]p1_cmd p2_cmd/bin/sh -c exec_entry p1_entryexec_entry p1_entry p1_cmd p2_cmd
CMD exec_cmd p1_cmd/bin/sh -c exec_cmd p1_cmd/bin/sh -c exec_entry p1_entryexec_entry p1_entry /bin/sh -c exec_cmd p1_cmd
  • ENTRYPOINT 指令最好以exec形式执行,如果以shell形式则一些参数不能正确传入或不能正常工作

  • shell形式整个命令作为参数传入,可执行子命令,管道等

  • exec形式不会调用shell命令,这意味着shell的一些特性如变量替换,管道等不能正常工作

  • shell形式下将以/bin/sh -c 调用可执行程序,这意味着可执行程序没有PID与之对应,将不能接受unix信号

demo:

CMD /usr/local/apache-tomcat-9.0.14/bin/startup.sh 

VOLUME指令

  • VOLUME指令在Docker主机上创建目录并挂载到容器中,通常在Docker的根目录

  • 语法

    • VOLUME <dir>

demo:

VOLUME /home

EXPOSE指令

  • EXPOSE指令告知Docker容器将监听在指定的端口

  • 语法

    • EXPOSE <port> [<port>/<protocol>…]

demo:

EXPOSE 8080

USER指令

  • 设置启动容器的用户,可以是用户名或UID
  • 语法
    • USER chen
    • USER UID
  • 如果设置了容器以daemon用户去运行,那么RUN, CMD 和 ENTRYPOINT 都会以这个用户去运行

Dockerfile实战参考: 使用Dockerfile构建tomcat9

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker部署Dockerfile是通过使用Docker来构建和运行镜像的一种方式。可以使用手动部署的方式来熟悉部署流程,也可以使用插件方式来编写Dockerfile文件。 对于手动部署,首先需要修改docker配置,开放远程部署(上传)端口。可以通过编辑docker.service文件,在ExecStart=后添加配置"-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock"来实现。 对于使用插件的方式,则是通过配置Dockerfile命令参数来生成Dockerfile文件,并最终根据jar包和Dockerfile构建镜像。 在进行Docker部署之前,首先需要进行Docker的安装和部署。具体的流程包括配置Docker、测试Docker、镜像的分层以及镜像的构建。 Docker部署Dockerfile的具体步骤包括: 1. 配置Docker,确保远程部署(上传)端口已经开放。 2. 使用插件方式或手动方式编写Dockerfile文件。 3. 将需要的jar包和Dockerfile放置在同一个目录下。 4. 使用命令行工具进入到该目录,并执行docker build命令来构建镜像。 5. 根据构建后的镜像,运行相应的容器。 通过以上步骤,就可以成功部署Dockerfile并运行相应的容器。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [docker实战Dockerfile构建部署项目(三)](https://blog.csdn.net/weixin_42322925/article/details/121697564)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Docker 1 (安装部署、Dockerfile详解)](https://blog.csdn.net/qq_38664479/article/details/119488160)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值