Syftet med workshopen är att få en liten introduktion till att använda docker som ett redskap vid build/deploy. För att se att det går att använda samma script och miljö på den egna maskinen som på en byggserver i "molnet".
- Ladda ner och installera docker for windows från
Z:\Simplicity platform\Utvecklare\Peter\docker(så slipper du registrera dig på docker för att komma åt filen) - Se till att det är Linux-containers som körs (höger-klicka på valen nere till höger, står det "switch to Linux containers" i context-menyn, klicka på den. Annars är det OK.)
- Starta en console (cmd.exe) och veriera att det går att köra docker-cli och att docker-cli får kontakt med dockerdaemonen genom att skriva
docker info
-
dockervisar alla tillgänliga kommandon -
docker pullladdar ner en image från docker registry -
docker pushladdar upp en image till docker registry -
docker run [option] image [name]: kör en image som container -
docker rm containertar bort en container -
docker ps -avisar alla containers (både som körs och som har stoppats)
Tillgängliga images från dockerhub finns sökbara på dockerhub
ladda ner "hello world"
docker pull hello-world
Docker run försökar ladda ner en image automatiskt om den inte finns nedladdad
Testa att köra en container som bara skriver ut hello world och sedan terminerar. Efter att programmet terminerat kommer container att finnas kvar, vilket innebär att man kan köra fler kommandon i samma container genom docker exec. (Men det är inget vi behöver göra i detta fallet).
Kör "hello world" och ta sedan bort containern
docker run -it hello-worlddocker ps -anu visas en stoppad container av hello world och dess hashdocker rm <hash>tar bort containern
Förklaringar:
-
-it kör interactive terminal, dvs. stdin och stdout binds till din egen terminal. -t gör att även ex. ctrl+c fångas av containern.
-
ps -a listar ALLA containers, även de som inte körs
Du behöver inte skriva hela hashen utan det kan räcker med de två första tecknen, ifall de är unika.
Kör containers med automatiskt borttagning
docker run --rm -it hello-word
--rm tar bort containern när den kört klart
Skall resultera i att Hello from docker... skrivs ut på skärmen och containern stoppas och tas bort autmatiskt.
Det är lätt hänt att man får en massa stoppade containers på datorn som skräpar, så det kan vara bra att känna till --rm-flaggan.
Kör "en web-app" i bakgrunden som lyssnar på port 8080 på din localhost
docker run -d -p 9090:8000 --name webapp jwilder/whoami
-d kör "detached", i bakgrunden
-p binder port 9090 på din dator till port 8000 på containern
-n ger containern ett namn
testa med en browser på http://localhost:9090 programmet kommer att skriva ut sitt hostname
- Se att container körs genom att skriva
docker ps. - Prova att stoppa containern genom att skriva
docker stop webappNu visas den inte längre meddocker ps - Det går att starta containern igen med
docker start webapp - Se att det återigen går att öppna länken http://localhost:9090
- För att ta bort container utan att stoppa den först går det att tvinga borttagning med -f
docker rm -f webapp. Ta bort containern
Gå in i katalogen netcore.
Här finns flera filer som berör byggprocessen. Kika på dessa och se om du kan lista ut vad de gör.
- Dockerfile
- build_docker.sh
- azure-pipelines.yml
Definierar bygg-stegen genom att använda docker images. Docker filen är en s.k. "multistage" docker file. Dvs. det används olika images för att bygga och för att köra.
-
FROM microsoft/dotnet:2.2-sdk AS buildöppnar en container från image med .net core SDK för att bygga. -
COPY . /appkopierar källkoden in i containern under /app -
RUN dotnet publish -c Release -r linux-x64 -o /release WebBygger Web-projektet och publicerar applikationen i katalogen /Web
Sedan byggs image för release med en runtime-image som bas.
-
FROM microsoft/dotnet:2.2-runtimeöppnar en ny container med .net core runtime -
COPY --from=build /release /appkopierar allt i från bygg-containern in i den nya runtime-containern -
WORKDIR /appsätter aktuell katalog till/app(som att skriva cd /app) -
ENTRYPOINT ["dotnet", "Web.dll"]talar om vad som skall köras när den färdiga imagen körs som en container (den images som skapas från containen som bygger på dotnet runtime)
Bygger en docker image med namnet netcore-counter och aktuell datum och tid som tag.
I windows-miljö, kör gitbash och skriv . build_docker.sh för att exekvera skriptet
Ett exempel på en azure-definition som använder Ubutuntu 16.04 och bygger en docker image genom att använda scriptet build_dockerfile.sh
Testa köra bygga och köra applikationen i ./netcore och testa att det går att komma åt den via webläsare.
Följ instruktionen i ./netcore/readme.md
Tiden räckte inte till för att förbereda denna del med en steg för steg-guide. Men i princip så kan man testa med följande:
Logga in med ditt MSDN-konto och skapa en devopsresurs och se om du kan få till en pipeline utifrån ditt github-konto och det clonade projektet.
Om intresse finns, kan vi ta denna del i en annan workshop.