Dockerfile
FROM:指定基础镜像
WORKDIR:指定工作目录,不存在则自动创建
COPY:将源路径的文件复制到镜像目标路径,类似的有ADD命令
ENV:用来设置编译阶段需要的环境变量
RUN:执行命令行
EXPOSE:声明运行时容器提供服务端口
这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。在 Dockerfile 中写入这样的声明有两个好处:1、帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;2、运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。
ENTRYPOINT:一旦从镜像中创建容器,Entrypoint就会在容器内运行该命令。
在Dockerfile中只能有一条Entrypoint指令。如果使用了多个Entrypoint指令,则只执行最后一条。
举例:
FROM alpine:3.12 AS builder
ADD go1.19.1.linux-amd64.tar.gz /usr/local/
RUN mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2 && \
ln -s /usr/local/go/bin/go /usr/bin/go && ln -s /usr/local/go/bin/gofmt /usr/bin/gofmt
ENV GO111MODULE=on\
GOPROXY="https://goproxy.io"
RUN mkdir /app
WORKDIR /app
COPY go.mod .
COPY go.sum .
RUN go mod download
COPY . .
RUN GOOS=linux CGO_ENABLED=0 go build -o demo
FROM scratch as demo
COPY ./config/application.yml /config/
COPY --from=builder /app /
EXPOSE 8888
ENTRYPOINT ["/demo"]
预先打包,如Java
FROM openjdk:8u292-slim-buster
ADD ./target/demo-1.0-SNAPSHOT.jar /demo.jar
EXPOSE 8999
ENTRYPOINT ["java","-jar","/demo.jar"]
当然,go可以预先打包成二进制文件再使用dockerfile
标签:RUN,demo,usr,go,COPY,Dockerfile From: https://www.cnblogs.com/leejk/p/16934287.html