add presentation
This commit is contained in:
@@ -6,12 +6,24 @@
|
||||
"image": "mcr.microsoft.com/devcontainers/base:jammy",
|
||||
"features": {
|
||||
"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",
|
||||
"workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind,Z",
|
||||
"workspaceFolder": "/workspace",
|
||||
|
||||
"runArgs": ["--userns=keep-id"],
|
||||
"containerUser": "vscode"
|
||||
"containerUser": "vscode",
|
||||
"customizations": {
|
||||
"vscode": {
|
||||
"extensions": [
|
||||
"asciidoctor.asciidoctor-vscode"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,3 +2,7 @@
|
||||
.git
|
||||
.docker-files
|
||||
.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