Dockerfile语法笔记

什么是Dockerfile?

Dockerfile是一个包含用于构建镜像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成镜像。它们简化了从头到尾的流程并极大的简化了部署工作。
Dockerfile 一般分为四部分:基础镜像信息维护者信息镜像操作指令容器启动时执行指令,’#’ 为 Dockerfile 中的注释。

常用指令介绍

1. FROM:

# 指定镜像的基础镜像时,必须是第一条命令
# FROM <image>:<tag>
# FROM <image>@<digest>
# tag或digest是可选的,如果不使用这两个值时,会使用latest版本的基础镜像
FROM golang:1.12

2. MAINTAINER:

# 指明该镜像的作者及其电子邮件
MAINTAINER liuyh73 "xxxx@qq.com"

3. WORKDIR:

#设置镜像工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR $GOPATH/src/github.com/money-hub/MoneyDodo.service

4. ADD:

#将宿主机的文件复制到docker容器中(ADD <source> <destination>)
ADD . $GOPATH/src/github.com/money-hub/MoneyDodo.service

5. COPY:

#将宿主机的文件复制到docker容器中(COPY <source> <destination>)
COPY . $GOPATH/src/github.com/money-hub/MoneyDodo.service

【注】COPY和ADD使用方式基本一样,但是ADD会对压缩文件(tar, gzip, bzip2等)做提取和解压操作。
6. RUN:

# 在新镜像内部执行的命令,比如安装一些软件、配置基础环境等,可以使用"\"来换行
RUN go get ./...
# 也可以使用exec格式:RUN ["executable", "param1", "param2" ...]
# executable是命令,param为参数
RUN ["go get", "./..."]

7. EXPOSE:

# 暴露镜像的端口供主机做映射,启动镜像时,使用-P参数来将镜像端口与宿主机的随机端口做映射
EXPOSE 8005

8. VOLUME:

# 1 卷可以容器间共享和重用
# 2 容器并不一定要和其它容器共享卷
# 3 修改卷后会立即生效
# 4 对卷的修改不会对镜像产生影响
# 5 卷会一直存在,直到没有任何容器在使用它
VOLUME ["/path/to/dir"]

9. ENV:

# 设置环境变量
# ENV <key> <value>  #<key>之后的所有内容均会被视为其<value>的组成部分,因此,一次只能设置一个变量
# ENV <key>=<value> ...  #可以设置多个变量,每个变量为一个"<key>=<value>"的键值对
ENV PORT=8005

10. CMD:

# 构建容器后调用,也就是在容器启动时才进行调用
# CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令
CMD command param1 param2
# 也可以使用exec语法
# CMD ["executable","param1","param2"]

11. ENTRYPOINT:
用法和CMD一样,但是CMD的命令会被 docker run 的命令覆盖而ENTRYPOINT不会。docker run
命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令。
当CMD和ENTRYPOINT都存在时,CMD的指令变成了ENTRYPOINT的参数,并且此CMD提供的参数会被 docker run 后面的命令覆盖。

示例

#源镜像
FROM golang:1.12
#设置镜像工作目录
WORKDIR $GOPATH/src/github.com/money-hub/MoneyDodo.service
#将宿主机的go工程代码加入到docker容器中
ADD ../ $GOPATH/src/github.com/money-hub/MoneyDodo.service
# 安装依赖包
RUN go get ./...
#暴露端口
EXPOSE 8005
#最终运行docker的命令
ENTRYPOINT ["go run", "./cpt/cmd/main.go"]
Dockerfile是用来定义Docker镜像的文本文件。它包含了一系列的指令,用于构建镜像的过程。根据引用\[1\]的内容,这是一个示例的Dockerfile文件,其中使用了FROM、ENV和ENTRYPOINT指令。FROM指令用于指定基础镜像,ENV指令用于设置环境变量,ENTRYPOINT指令用于指定容器启动时要执行的命令。 根据引用\[2\]的内容,构建Docker镜像的命令格式为:docker build -t \[镜像名\]:\[版本号\] \[Dockerfile所在目录\]。其中,-t参数用于指定构建后的镜像信息,\[Dockerfile所在目录\]表示Dockerfile文件所在的路径。 根据引用\[3\]的内容,示例的构建命令为:docker build -t mysoft/centos:6.6 /tmp/dockerfile/centos6。这个命令将会根据指定的Dockerfile文件在/tmp/dockerfile/centos6目录下构建一个名为mysoft/centos的镜像,版本号为6.6。 总结起来,Dockerfile是用来定义Docker镜像的文件,它包含了一系列的指令。构建Docker镜像的命令格式为docker build -t \[镜像名\]:\[版本号\] \[Dockerfile所在目录\]。 #### 引用[.reference_title] - *1* [dockerfile语法](https://blog.csdn.net/MyySophia/article/details/109491622)[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^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Dockerfile语法](https://blog.csdn.net/u013755520/article/details/91126933)[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^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [详解Dockerfile基本语法](https://blog.csdn.net/zhousenshan/article/details/126208642)[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^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值