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"]
好的,我理解了您的要求。以下是以Markdown格式整理的DockerFile的详细使用说明笔记: ## DockerFile详细使用说明笔记 ### 1. 什么是DockerFileDockerFile是Docker的构建文件,它用来描述镜像的构建过程。通过DockerFile可以定义Docker镜像中的操作系统、应用程序、配置等信息。使用DockerFile可以快速、方便地构建Docker镜像,提高开发和部署的效率。 ### 2. DockerFile的基本语法 DockerFile由一系列指令组成,每个指令都对应着Docker镜像构建过程中的一个操作。DockerFile的基本语法如下: ``` # 注释 INSTRUCTION argument ``` 其中,`#`表示注释,`INSTRUCTION`表示指令,`argument`表示指令的参数。 ### 3. DockerFile的常用指令 #### FROM ``` FROM image ``` 该指令指定镜像的基础镜像。必须是Docker Hub或者本地仓库中已有的镜像。一个Dockerfile中必须有且仅有一个FROM指令。 #### MAINTAINER ``` MAINTAINER name ``` 该指令指定维护者的名称和邮箱地址。 #### RUN ``` RUN command ``` 该指令指定Docker镜像构建时需要执行的命令。可以执行任何Linux命令。可以使用反斜杠`\`续行。 #### WORKDIR ``` WORKDIR path ``` 该指令指定工作目录。RUN、CMD、ENTRYPOINT、COPY和ADD等指令会在该目录下执行。如果指定的目录不存在,会自动创建。 #### ENV ``` ENV key value ``` 该指令指定环境变量的值。可以使用`${key}`形式引用。 #### EXPOSE ``` EXPOSE port ``` 该指令指定容器暴露的端口号。可以指定多个。 #### CMD ``` CMD ["executable","param1","param2"] CMD command param1 param2 ``` 该指令指定容器启动后默认运行的命令。如果用户指定了运行时的命令,会覆盖该指令。 #### ENTRYPOINT ``` ENTRYPOINT ["executable","param1","param2"] ENTRYPOINT command param1 param2 ``` 该指令指定容器启动后默认运行的命令,但用户指定的命令只是参数,不会覆盖该指令。 #### COPY ``` COPY src dest ``` 该指令指定将本地文件或目录复制到容器中。src可以是具体的文件或目录路径,也可以是URL。dest是目标路径。 #### ADD ``` ADD src dest ``` 该指令功能类似COPY,但是可以处理一个tar文件,将其解压到指定目录。 ### 4. DockerFile的实例 这里给出一个MySQL镜像的DockerFile示例: ``` FROM ubuntu:18.04 MAINTAINER Your Name <youremail@example.com> ENV MYSQL_ROOT_PASSWORD=root RUN apt-get update && apt-get install -y mysql-server COPY my.cnf /etc/mysql/my.cnf EXPOSE 3306 CMD ["mysqld"] ``` 其中,该DockerFile使用了Ubuntu 18.04作为基础镜像,安装了MySQL服务器,指定了MySQL的root密码,并将配置文件复制到容器中。最后暴露了容器的3306端口,并指定了启动时运行mysqld命令。 ### 5. DockerFile的构建过程 根据DockerFile构建Docker镜像的步骤如下: 1. 编写DockerFile; 2. 在Dockerfile所在目录执行以下命令,以构建一个名为myimage的镜像: ``` docker build -t myimage . ``` 其中,-t指定生成的镜像的名称和标签,`.`表示Dockerfile所在的目录。 3. 构建完成后,可以通过以下命令查看已构建好的镜像: ``` docker images myimage ``` 其中,myimage表示镜像名称。 以上就是DockerFile的详细使用说明笔记。感谢您的提问,希望我的回答可以帮到您!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值