mirror of
https://github.com/ohwgiles/laminar.git
synced 2024-10-27 20:34:20 +00:00
add example script for docker builds
This commit is contained in:
parent
d01cf1c9b0
commit
9a5ccc70e3
@ -588,6 +588,8 @@ docker run --rm -ti -v $PWD:/root ubuntu /bin/bash -xe <<EOF
|
||||
EOF
|
||||
```
|
||||
|
||||
For more advanced usage, see [docker-advanced.sh](https://github.com/ohwgiles/laminar/blob/master/examples/docker-advanced.sh)
|
||||
|
||||
---
|
||||
|
||||
# Colours in log output
|
||||
|
53
examples/docker-advanced.sh
Executable file
53
examples/docker-advanced.sh
Executable file
@ -0,0 +1,53 @@
|
||||
#!/bin/bash -eu
|
||||
|
||||
# Any failing command in a pipe will cause an error, instead
|
||||
# of just an error in the last command in the pipe
|
||||
set -o pipefail
|
||||
|
||||
# Log commands executed
|
||||
set -x
|
||||
|
||||
# Simple way of getting the docker build tag:
|
||||
tag=$(docker build -q - <<\EOF
|
||||
FROM debian:bullseye
|
||||
RUN apt-get update && apt-get install -y build-essential
|
||||
EOF
|
||||
)
|
||||
|
||||
# But -q suppresses the log output. If you want to keep it,
|
||||
# you could use the following fancier way:
|
||||
|
||||
exec {pfd}<><(:) # get a new pipe
|
||||
docker build - <<\EOF |
|
||||
FROM debian:bullseye
|
||||
RUN apt-get update && apt-get install -y build-essential
|
||||
EOF
|
||||
tee >(awk '/Successfully built/{print $3}' >&$pfd) # parse output to pipe
|
||||
read tag <&$pfd # read tag back from pipe
|
||||
exec {pfd}<&- # close pipe
|
||||
|
||||
# Alternatively, you can use the -t option to docker build
|
||||
# to give the built image a name to refer to later. But then
|
||||
# you need to ensure that it does not conflict with any other
|
||||
# images, and handle cases where multiple instances of the
|
||||
# job attempt to update the tagged image.
|
||||
|
||||
# If you want the image to be cleaned up on exit:
|
||||
trap "docker rmi $tag" EXIT
|
||||
|
||||
# Now use the image to build something:
|
||||
docker run -i --rm \
|
||||
-v "$PWD:$PWD" \
|
||||
-w "$PWD" \
|
||||
-u $(id -u):$(id -g) \
|
||||
$tag /bin/bash -eux \
|
||||
<<EOF
|
||||
# The passed options mean we keep our current working
|
||||
# directory and user, so no permission problems on the
|
||||
# artifacts produced within the container.
|
||||
echo 'main(){puts("hello world");}' | gcc -x c -static -o hello -
|
||||
EOF
|
||||
|
||||
# Test the result
|
||||
./hello
|
||||
|
Loading…
Reference in New Issue
Block a user