dockerfile demo
什么是 Dockerfile
一个构建镜像的文本文件,包含了一条条构建镜像所需的指令,类似脚本。
dockerfile 指令
• FROM #需定制的镜像,定制的镜像都是基于 FROM 的镜像,例如:FROM ubuntu:latest,后续的操作都是基于 ubuntu:latest。
# 格式为 FROM <image>或FROM <image>:<tag>。
#第一条指令必须为FROM,如果需创建多个镜像,可以使用多个FROM
• MAINTAINER #指定维护者信息。
#格式为 MAINTAINER <name>
• RUN #执行指定的的命令,并提交为新的镜像。
#格式为 RUN <command> 或 RUN ["executable", "param1", "param2"]。
• CMD #指定启动容器时执行的命令,如果用户启动容器时候指定了运行的命令,会覆盖掉 CMD 指定的命令。
#每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。
#三种格式
#CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;
#CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;
#CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;
• EXPOSE #将容器需要暴露的端口号告诉docker,启动容器是需要通过-P参数,docker主机会自动分配一个端口转发到指定端口。
#格式为EXPOSE <port> [<port>...]
• ENV #设定一个环境变量,后续会被RUN指令使用,并在容器运行时保持。
#格式为 ENV <key> <value>
• ADD #该命令将复制指定的 <src> 到容器中的 <dest>。 其中 <src> 可以是Dockerfile所在目录的一个相对路径;也可以是一个 URL;还可以是一个 tar 文件(自动解压为目录)。
#格式为 ADD <src> <dest>。
• COPY #复制本地主机的 <src>(为 Dockerfile 所在目录的相对路径)到容器中的 <dest>。
#格式为 COPY <src> <dest>。
当使用本地目录为源目录时,推荐使用 COPY。
• ENTRYPOINT #配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。
#两种格式:
#ENTRYPOINT ["executable", "param1", "param2"]
#ENTRYPOINT command param1 param2(shell中执行)。
• VOLUME #创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。
#格式为 VOLUME ["/data"]。
• USER #指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户,例如:RUN groupadd -r postgres && useradd -r -g postgres postgres。要临时获取管理员权限可以使用 gosu,而不推荐 sudo。
#格式为 USER daemon
• WORKDIR #为后续的 RUN、CMD、ENTRYPOINT 指定配置工作目录。可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。如:
WORKDIR /lu
WORKDIR mi
WORKDIR ya
RUN pwd
最终会路径为 /lu/mi/ya
#格式为 WORKDIR /path/to/workdir。
• ONBUILD #配置当所有的镜像作为其他新创建镜像的的基础竟像时,所执行的指令。
#格式为 ONBUILD [INSTRUCTION]。
编写完dockerfile之后,可通过docker build命令来创建镜像。
build go demo镜像
基于共golang:1.13的demo镜像
dockerfile
FROM golang:1.13
WORKDIR /app
COPY hello.go app.go
RUN go build app.go
CMD ./app
路径如下 :
go build 构建
run