dockerfile - multiple binaries in a docker container based on scratch -
i have spec container requires 2 binaries executed 1 after other. prefer inherit scratch image container no larger sum of 2 executables. obvious way accomplish inherit alpine or other small os i'd prefer scratch. also, cmd, run , exec commands in dockerfile seems require shell , scratch not option. building 2 containers , docker swarm interesting not answer.
i'm not entirely sure question here, here few ideas.
first, correct run
requires shell, doesn't sound need that. have 2 binaries, we'll call file1
, file2
, , need copy image:
from scratch copy file1 /file1 copy file2 /file2
if wanted run single executable, life simple. cmd
not require shell, add:
cmd ["/file1"]
using json version of cmd
means binary executed without shell.
while running single command easy, fact want run 2 different commands in sequence means need something handle workflow. easiest solution shell, because can run:
cmd /file1;/file2
but if don't want shell, need write third binary handles executing first command, waiting complete, executing second. make entire dockerfile like:
from scratch copy file1 /file1 copy file2 /file2 copy file3 /file3 cmd ["/file3"]
unless planning on deploying in unusually space-constrained environment, time better spent using alpine
image or similar.
update
since came in comments:
using -e
or --env-file
not impose special requirements on container. example, can produce container contains /usr/bin/env
command (and necessary shared libraries); complete image source looks like:
dockerfile lib64/libc.so.6 lib64/ld-linux-x86-64.so.2 usr/bin/env
and dockerfile
looks like:
from scratch copy . / entrypoint ["/usr/bin/env"]
and file bar.env
contains:
bar=somevalue
assuming build container named "testenv", can run:
docker run -e foo=bar --env-file bar.env testenv
and see:
path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin hostname=f8f43505a272 bar=somevalue foo=bar home=/root
Comments
Post a Comment