add presentation

This commit is contained in:
2023-12-02 15:23:33 +00:00
parent f9433d1017
commit 81741668d5
6 changed files with 205 additions and 3 deletions

View File

@@ -6,12 +6,24 @@
"image": "mcr.microsoft.com/devcontainers/base:jammy", "image": "mcr.microsoft.com/devcontainers/base:jammy",
"features": { "features": {
"ghcr.io/devcontainers/features/docker-in-docker:2": {}, "ghcr.io/devcontainers/features/docker-in-docker:2": {},
"ghcr.io/devcontainers-contrib/features/doctoolchain-sdkman:2": {} "ghcr.io/devcontainers-contrib/features/doctoolchain-sdkman:2": {
"version" : "3.1.2",
"jdkVersion": "17"
},
"ghcr.io/devcontainers-contrib/features/http-server:1": {}
}, },
"postCreateCommand": "curl -Lo dtcw https://doctoolchain.org/dtcw && chmod +x dtcw",
"remoteUser": "vscode", "remoteUser": "vscode",
"workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind,Z", "workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind,Z",
"workspaceFolder": "/workspace", "workspaceFolder": "/workspace",
"runArgs": ["--userns=keep-id"], "runArgs": ["--userns=keep-id"],
"containerUser": "vscode" "containerUser": "vscode",
"customizations": {
"vscode": {
"extensions": [
"asciidoctor.asciidoctor-vscode"
]
}
}
} }

View File

@@ -1,4 +1,8 @@
.devcontainer .devcontainer
.git .git
.docker-files .docker-files
.dockerignore .dockerignore
.gradle
.slides
.build
dtcw

3
.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
dtcw
.gradle
.build

View File

@@ -0,0 +1,173 @@
= Docker Build Optimization
:source-highlighter: highlightjs
== Why Optimize Docker Builds?
* Faster build times
* Reduced image size
== Optimization Strategies
* Reordering
* Combining
* Mounting and local Cache
* Multi-stage builds
* Choose of base image
* Clean docker build context
* Remote Caching
== Demo
=== Base Image
[source,docker]
----
include::../.docker-files/0-origin.Dockerfile[]
----
[.notes]
--
---
docker build -f .docker-files/0-origin.Dockerfile -t demo/base .
docker build -f .docker-files/0-origin.Dockerfile -t demo/base .
touch foo
docker build -f .docker-files/0-origin.Dockerfile -t demo/base .
dive demo/base
--
=== Reordering
[source,docker]
----
include::../.docker-files/1-reordering.Dockerfile[]
----
[.notes]
--
* reduce build time by layer cache
docker build -f .docker-files/1-reordering.Dockerfile -t demo/reorder .
docker build -f .docker-files/1-reordering.Dockerfile -t demo/reorder .
touch bar
docker build -f .docker-files/1-reordering.Dockerfile -t demo/reorder .
dive demo/reorder
--
=== Combining
[source,docker]
----
include::../.docker-files/2-combining.Dockerfile[]
----
[.notes]
--
* reduce layer numbers
docker build -f .docker-files/2-combining.Dockerfile -t demo/combine .
dive demo/combine
--
=== Mounting and local Cache
[source,docker]
----
include::../.docker-files/3-mounting.Dockerfile[]
----
[.notes]
--
docker build -f .docker-files/3-mounting.Dockerfile -t demo/mounts .
* extend intall package list
docker build -f .docker-files/3-mounting.Dockerfile -t demo/mounts-2 .
dive demo/mounts
--
=== Multi-stage builds
[source,docker]
----
include::../.docker-files/4-multi-stage.Dockerfile[]
----
[.notes]
--
* remove all not needed files
docker build -f .docker-files/4-multi-stage.Dockerfile -t demo/multistage .
dive demo/multistage
--
=== Choose of base image
[source,docker]
----
include::../.docker-files/5-base-image.Dockerfile[]
----
[.notes]
--
docker build -f .docker-files/5-base-image.Dockerfile -t demo/alpine .
dive demo/alpine
--
=== Using pinned image
[source,docker]
----
include::../.docker-files/6-pinimage.Dockerfile[]
----
== Clean docker build context
* The `.dockerignore` file excludes unnecessary files from the build context
[source,plaintext]
```
.git
.gitignore
.dockerignore
*.log
tmp/*
```
== Remote Caching
* other build driver like https://docs.docker.com/build/drivers/[`docker-container`^] supports cache export
[source,shell]
----
docker buildx build \
--cache-from myapp:cache \
--cache-to myapp:cache \
-t myapp:latest \
.
----
* Kaniko is a tool to build container images from a Dockerfile, inside a container or Kubernetes cluster.
[source,shell]
----
kaniko build --cache=true -f Dockerfile.
----
[.notes]
--
* It's designed to work without Docker daemon
* making it suitable for environments with restricted access.
--
== Resources
* Docker Documentation: https://docs.docker.com/
* Docker Build Best Practices:
** https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
** https://docs.docker.com/build/cache/
* .dockerignore Documentation: https://docs.docker.com/engine/reference/builder/#dockerignore-file
* Remote Caching with Buildx: https://docs.docker.com/build/cache/backends/
* Kaniko GitHub Repository: https://github.com/GoogleContainerTools/kaniko
* Alpine Linux: https://alpinelinux.org/
* Dive - A tool for exploring each layer in a Docker image: https://github.com/wagoodman/dive

10
docToolchainConfig.groovy Normal file
View File

@@ -0,0 +1,10 @@
// Path where docToolchain creates its artifacts.
outputPath = '.build'
// Path where the docToolchain will search for the input files.
inputPath = '.slides';
// Define which formats should be processed.
inputFiles = [
[file: 'openspacet-2312.adoc', formats: ['revealjs']],
]