Göra containern exekverbar
Intruktionerna RUN, CMD och ENTRYPOINT används för att exekvera någonting, ett kommando eller ett script. Containern blir med andra ord exekverbar. Korfattat är skillnaden att:
- RUN exekverar kommandon i nya lager och skapar en ny image.
- CMD sätter default kommandon som kan skrivas över via
docker run ...
. - ENTRYPOINT används oftast för att konfigurera en exekverbar container.
De olika instruktionerna kan skrivas på två olika sätt: shell form eller exec form.
#shell form
<instruction> <command>
När vi använder shell form kommer kommandot exekveras i /bin/sh -c
.
FROM ubuntu:24.04 RUN apt update CMD echo "Hello dbwebb" ENTRYPOINT echo "Hello dbwebb"
#exec form
<instruction> ["executable", "param1", "param2", ...]
Den här formen är att föredra för CMD och ENTRYPOINT. Om vi inte specificerar ett shell med exec form kommer inget shell att användas då vi kallar på det exekverbara programmet direkt.
FROM ubuntu:24.04 RUN apt update CMD ["/bin/echo", "Hello dbwebb"] ENTRYPOINT ["/bin/echo", "Hello dbwebb"]
Vill vi använda till exempel bash som shell kan vi specificera det:
FROM ubuntu:24.04 RUN apt update ENTRYPOINT ["/bin/bash", "-c", "echo Hello dbwebb"]
#Kombinerat
Vi kan även kombinera formerna och via CMD ge parametrar till ENTRYPOINT.
FROM ubuntu:24.04 RUN apt update ENTRYPOINT ["/bin/echo", "Hello"] CMD ["dbwebb"]
Kör vi ovan så ser vi att CMD läggs till ENTRYPOINT:
$ docker run imagename Hello dbwebb
Då CMD även är i exec form kan vi skriva över den via docker run-kommandot:
$ docker run imagename Kenneth Hello Kenneth
#Revision history
- 2022-04-13: (B, lew) Uppdatering inför HT22.
- 2020-06-23: (A, lew) Första versionen.