dockerfile的写法

Dockerfile的编写

1、Dockerfile的指令

FROM

  • 指示基础镜像

  • 用法 FROM 镜像名称:镜像tag

  • 示例 FROM golang:1.20.1

WORKDIR

  • 用法类似于linux中的cd
  • 示例 WORKDIR /user WORKDIR /id 此时便是在/user/id路径下

ADD

  • 拷贝

  • 用法 COPY src源文件 dest容器

  • 示例 COPY main.go . 把本地当前路径下的main.go拷贝到容器中的当前路径

    ADD精彩用法:

    • ADD可以解压缩文件并添加到镜像中
    • ADD可以从url拷贝文件到镜像中
    • 示例 ADD http://example.com/big.tar.gz /usr/local/test 此命令会从远端下载并解压文件到/test路径下
    • 注意 精彩用法在实践中应避免使用,因为会创建更多层镜像导致镜像文件过大 应使用COPY 以及wget curl tar等命令代替

COPY

  • 用法与ADD相似
  • 不同点 : COPY可以在多层构建中把上层镜像构建的产物拷贝到本层容器中 详细见下文示例

RUN

  • 构建镜像,每一个RUN均会构建一层镜像,在实际应用中尽可能的少RUN多&&
  • 示例 RUN go mod init test && go mod tidy && go build -o hello main.go

CMD

  • docker run 时才会运行的指令

ARG

  • 定义变量的指令,唯一可以在FROM之前的指令
  • 格式 ARG key=value
  • 示例 注意:大写的意义在于与参数做区分
ARG VERSION=latest
FROM golang:$VERSION    

AS

  • 别名
  • 示例 FROM golang:latest AS builder

LABEL

  • 为镜像添加元数据
  • 格式 LABLE key1=value1 key2=value2
  • 示例 LABLE version="1.0" maintainer=nuts_plp@126.com

EXPOSE

  • 用来在运行时通知容器监听指定的端口
  • 用法 EXPOSE port/proto
  • 示例 EXPOSE 80/tcp 没有指定协议时默认为tcp

注意 :RUN 指令有shell和exec两种格式 语法如下:

#方式一
RUN <command>
#方式二
RUN ["executable","param1","param2"]

CMD除了由以上两种格式外还有参数这一格式 ,这一格式主要作为EMTRYPOINT的指令的默认参数 格式如下

CMD ["param1","param2"]

示例

文件夹/tmp/test下有{Dockerfile,main.go,go.mod}三个文件

Dockerfile文件内容如下

ARG VERSION=1.20.1	#定义变量
FROM golang:$VERSION AS builder
WORKDIR /workfile1
COPY . .   #将本地/tmp/test文件夹下的文件拷贝到容器/workfile路径下
RUN go build -o hello main.go

FROM apline
WORKDIR /workfile2
COPY --from=builder /workfile1/hello /workfile2/hello  # 把上一层镜像中的文件拷贝到这一层
EXPOSE 8090
CMD["./hello"]

main.go文件内容如下

packeage main
import(
	"net"
	"net/http"
)
func main(){
	coon,_:=net.Listen("tcp",":8090")
	http.HandleFunc("/",func(w http.ResponseWriter,r http.Request){
		w.Write([]byte("hi!"))
	})
	http.Serve(coon,nil)
}

go.mod文件为在/test目录下执行go mod init test生成的空白go module文件

在当前路径下执行docker build -t hello:1 .生成以1为tag名称为hello的镜像

注意 两个特殊的镜像

  • 镜像一 alpine 一个轻型的linux发行版,非商业组织维护,提供了自己的包管理工具apk,大小仅为5MB
  • 镜像二 scratch 完全空白的镜像
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值