一、 docker hello world
FROM centos:7.5.1804
MAINTAINER 11@qq.com
CMD echo "hello world"
FROM centos:7.5.1804
# 指定源於一個基礎鏡像 centos:7.5.1804
# FROM <image>[:<tag>] [AS <name>]
MAINTAINER 11@qq.com
# 維護者/擁有者
# MAINTAINER <name>
CMD echo "hello world"
# 運行命令
# CMD <command> or CMD [<command>]
# 整個Dockerfile 中只能有一個,多個會被覆蓋的
// 在Dockerfile 所在的目錄下
docker build -t hello .
二、Dockerfile 構建go程序鏡像
FROM golang:1.12 as build
ENV GOPROXY https://goproxy.cn
ENV GO111MODULE on
WORKDIR /go/cache
ADD go.mod .
ADD go.sum .
RUN go mod download
WORKDIR /go/release
ADD . .
RUN GOOS=linux CGO_ENABLED=0 go build -ldflags="-s -w" -installsuffix cgo -o app
FROM alpine as prod
ARG MODE="debug"
COPY --from=build /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
COPY --from=build /go/release /go/release/ /home/
WORKDIR /home
ENV MODE ${MODE}
CMD ["./app"]
FROM golang:1.12 as build
# 指定源於一個基礎鏡像 golang:1.12 並起一個別名 build
# FROM <image>[:<tag>] [AS <name>]
ENV GOPROXY http://goproxy.cn
ENV GO111MODULE on
# ENV 在鏡像內設置環境變量
# ENV <key> <value>
WORKDIR /go/cache
# 指定接下來的參數工作目錄 你可以理解為 cd /go/cache ,目錄不存在時會自動創建
# WORKDIR <dir>
ADD go.mod .
ADD go.sum .
# 這里的意思是 go.mod 和go.sum 添加到 鏡像的工作目錄下即/go/cache 下
# ADD [--chown=<user>:<group>] <src>... <dest>
RUN go mod download
# 運行 go mod download
# RUN <command>
COPY . .
# 將當前目錄的所以文件及文件夾 copy 到 工作目錄下
# copy <src> <desc>
RUN GOOS=linux CGO_ENABLED=0 go build -ldflags="-s -w" -installsuffix cgo -o app
# 編譯go 程序
FROM alpine as prod
# 再指定一個基礎鏡像alpine 並起別名 prod
ARG MODE="debug"
# 通過docker構建鏡像時, 外部傳參, 默認參數debug
# --build-arg MODE=release 外部docker build 時添加這個參數,意思是設置MODE=release
# ARG <key>[=<value>]
COPY --from=build /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
COPY --from=build /go/release /go/release/ /home/
# 將來自build(go:1.12) 鏡像下的 /usr/share/zoneinfo/Asia/Shanghai /etc/ssl/certs/ca-certificates.crt /go/release /go/release/
# 復制到 prod 鏡像的 /etc/localtime /etc/ssl/certs/ca-certificates.crt home/
# COPY [--from=<image_alias>] <src>...<desc>
WORKDIR /home
# 指定工作目錄 可以理解為 cd /home
ENV MODE ${MODE}
# 設置環境變量 ${MODE} 使用的是ARG 里面的MODE
CMD ["./app"]
# CMD 執行命令
docker build --build-arg MODE=release -t app .
// --build-arg 外部傳傳參數, 多個參數就添加多個--build-arg
refer
dockerfile 官方文檔