Ant*_*ean 5 docker docker-compose
我知道新的多阶段构建功能,它可以很好地与Docker Compose配合使用.但是,让我说我坚持使用构建器模式(不要问)...有没有办法docker-compose up使用构建器模式所需的构建脚本?
考虑链接文章中的相同构建器模式文件:
Dockerfile.build
FROM golang:1.7.3
WORKDIR /go/src/github.com/alexellis/href-counter/
RUN go get -d -v golang.org/x/net/html
COPY app.go .
RUN go get -d -v golang.org/x/net/html \
&& CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
Run Code Online (Sandbox Code Playgroud)
Dockerfile
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY app .
CMD ["./app"]
Run Code Online (Sandbox Code Playgroud)
build.sh
#!/bin/sh
docker build -t alexellis2/href-counter:build . -f Dockerfile.build
docker create --name extract alexellis2/href-counter:build
docker cp extract:/go/src/github.com/alexellis/href-counter/app ./app
docker rm -f extract
docker build --no-cache -t alexellis2/href-counter:latest .
rm ./app
Run Code Online (Sandbox Code Playgroud)
我可以构建一个像这样的Docker Compose文件,但我不知道如何cp从临时Docker容器中获取文件.
泊坞窗,compose.yml
version: '3'
services:
app:
build: .
depends_on:
- app-build
app-build:
build:
context: .
dockerfile: Dockerfile.build
Run Code Online (Sandbox Code Playgroud)
我可以构建临时的Docker镜像/容器并cp使用build.sh上面的脚本的第一部分运行,然后使用精简的compose文件,但是,我可能只是坚持使用脚本.
一种方法可以使用 2 个 docker-compose 调用,并结合目录映射:
version: '3'
services:
app:
build: .
app-build:
build:
context: .
dockerfile: Dockerfile.build
volumes:
- ./build/:/go/src/github.com/alexellis/href-counter/
Run Code Online (Sandbox Code Playgroud)
然后:
#This will produce local ./build/app artifact
docker-compose build app-build
#Having the previous artifact, will use it:
docker-compose build app
Run Code Online (Sandbox Code Playgroud)
只需将其更改为 Dockerfile:
COPY build/app .
Run Code Online (Sandbox Code Playgroud)
不过,我推荐您使用多阶段构建方法。比这简单得多。
| 归档时间: |
|
| 查看次数: |
1113 次 |
| 最近记录: |