写在开头:实验室给的电脑只能装 20.04 然后跑仿真需要在 18.04 (20.04 的 Gazebo 居然不能支持!要是有人知道如何在 20.04 中使用 Gazebo GPU 欢迎留言;电脑配置是 Nvidia 3060)又是被迫学习一下 Docker
DockerFile 指定了 Docker 镜像的制作过程。通常用于自定义镜像。
FROM
指令是指定基本的镜像。这里着重讲解 Multiple FROM 机制。Multiple FROM 机制通常是在一个镜像下编译,将编译结果放在另一个镜像下运行。类似于 devel
与 runtime
区别。
# syntax=docker/dockerfile:1
FROM golang:1.16 AS builder
WORKDIR /go/src/github.com/alexellis/href-counter/
RUN go get -d -v golang.org/x/net/html
COPY app.go ./
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /go/src/github.com/alexellis/href-counter/app ./
CMD ["./app"]
每一个 FROM
构成一个新的基础镜像,之后的代码会在基础镜像中运行。第一段中在环境一中编译代码得到结果 app
。第二段通过指令
COPY --from=builder /go/src/github.com/alexellis/href-counter/app ./
将第一段中的结果拷贝到当前镜像。其中 --from=builder
的 builder
是由第一段中的 FROM golang:1.16 AS builder
决定。二镜像中不会留有其余一镜像的残余。
COPY [--chown=:] ...
COPY [--chown=:] ["",... ""]
两种拷贝方式 – 本地到镜像 与 不同编译阶段的拷贝(上文的 Multi FROM
机制)。
本地到镜像注意:
需要在 docker build
的目录下
不同编译之间的拷贝可以看上文的:
COPY --from=builder /go/src/github.com/alexellis/href-counter/app ./
这就是从一个编译阶段拷贝到另一个编译阶段。