add presentation
This commit is contained in:
@@ -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"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
.devcontainer
|
.devcontainer
|
||||||
.git
|
.git
|
||||||
.docker-files
|
.docker-files
|
||||||
.dockerignore
|
.dockerignore
|
||||||
|
.gradle
|
||||||
|
.slides
|
||||||
|
.build
|
||||||
|
dtcw
|
||||||
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
dtcw
|
||||||
|
.gradle
|
||||||
|
.build
|
||||||
173
.slides/openspacet-2312.adoc
Normal file
173
.slides/openspacet-2312.adoc
Normal 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
10
docToolchainConfig.groovy
Normal 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']],
|
||||||
|
]
|
||||||
Reference in New Issue
Block a user