From 780b3d78c7e7f5b121aa7cf106185e7da95eacdf Mon Sep 17 00:00:00 2001 From: Junwei Zhao Date: Wed, 26 Feb 2020 17:14:35 +1100 Subject: [PATCH] docker stuff --- assets/images/container.png | Bin 0 -> 31530 bytes categories/devops/docker.md | 111 +++++++++++++++++++++++--------- categories/devops/kubernetes.md | 1 + 3 files changed, 83 insertions(+), 29 deletions(-) create mode 100644 assets/images/container.png diff --git a/assets/images/container.png b/assets/images/container.png new file mode 100644 index 0000000000000000000000000000000000000000..2ba8feb746b97e83bc06e45196d96268bca9274c GIT binary patch literal 31530 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 Bm&O19 literal 0 HcmV?d00001 diff --git a/categories/devops/docker.md b/categories/devops/docker.md index e7b8383..924c8de 100644 --- a/categories/devops/docker.md +++ b/categories/devops/docker.md @@ -1,45 +1,98 @@ -# Orchestration - -## Rancher +# Docker Easy to use, just drag and drop things. ## Benefits of using Docker - - escape the app dependency matrix - - Solve the environment issue. it works on my machine. +- Escape the app dependency matrix +- Solve the environment issue. it works on my machine. +- Very low resource allocation cost when compare with Virtual Machine. So on the same machine, you can run more containers and spend much less time. + +## How Docker works + +Very useful blog talking about how docker works internally: [Understanding the Docker Internals](https://medium.com/@nagarwal/understanding-the-docker-internals-7ccb052ce9fe) + +![Docker](https://raw.githubusercontent.com/wahyd4/knowledge-mind-mapping/master/assets/images/docker.png) + +Docker use + +* Namespaces +* Cgroups +* Network +* Union File Systems + +to isolate all kinds of resources. + +### Namespaces + +Docker makes use of kernel namespaces to provide the isolated workspace called the container. When you run a container, Docker creates a set of namespaces for that container. These namespaces provide a layer of isolation. Each aspect of a container runs in a separate namespace and its access is limited to that namespace. +Docker Engine uses the following namespaces on Linux: + +- `PID` namespace for process isolation. +- `NET` namespace for managing network interfaces. +- `IPC` namespace for managing access to IPC resources. +- `MNT` namespace for managing filesystem mount points. +- `UTS` namespace for isolating kernel and version identifiers. + +### Cgroups + +Docker also makes use of kernel control groups for resource allocation and isolation. A cgroup limits an application to a specific set of resources. Control groups allow Docker Engine to share available hardware resources to containers and optionally enforce limits and constraints. +Docker Engine uses the following cgroups: + +- Memory cgroup for managing accounting, limits and notifications. +- HugeTBL cgroup for accounting usage of huge pages by process group. +- CPU group for managing user / system CPU time and usage. +- CPUSet cgroup for binding a group to specific CPU. Useful for real time applications and NUMA systems with localized memory per CPU. +- BlkIO cgroup for measuring & limiting amount of blckIO by group. +- net_cls and net_prio cgroup for tagging the traffic control. +- Devices cgroup for reading / writing access devices. +- Freezer cgroup for freezing a group. Useful for cluster batch scheduling, process migration and debugging without affecting prtrace. + +### Union File Systems + +Union file systems operate by creating layers, making them very lightweight and fast. Docker Engine uses UnionFS to provide the building blocks for containers. Docker Engine can use multiple UnionFS variants, including AUFS, btrfs, vfs, and devicemapper. + +### Docker VS VM + +![Docker vs VM](https://raw.githubusercontent.com/wahyd4/knowledge-mind-mapping/master/assets/images/container.png) + ## Network - Bridge - Host -## Tips +## CMD - - difference between `cmd` and `entrypoint` - - difference between `copy` and `add` +- has three forms +- CMD ["executable","param1","param2"] + - exec form, preferred +- CMD ["param1","param2"] + - as default parameters to ENTRYPOINT +- CMD command param1 param2 + - shell form +- The main purpose of a CMD is to provide defaults for an executing container. These defaults can include an executable, or they can omit the executable, in which case you must specify an ENTRYPOINT instruction as well. +- If CMD is used to provide default arguments for the ENTRYPOINT instruction, both the CMD and ENTRYPOINT instructions should be specified with the JSON array format. +- docker run could override the default specified in CMD. - Basically they are similar, copy files and folder to destination. While ADD has some features (like local-only tar extraction and remote URL support) that are not immediately obvious. Consequently, the best use for ADD is local tar file auto-extraction into the image, as in ADD rootfs.tar.xz /. -- CMD - - has three forms - - CMD ["executable","param1","param2"] - - exec form, preferred - - CMD ["param1","param2"] - - as default parameters to ENTRYPOINT - - CMD command param1 param2 - - shell form - - The main purpose of a CMD is to provide defaults for an executing container. These defaults can include an executable, or they can omit the executable, in which case you must specify an ENTRYPOINT instruction as well. - - If CMD is used to provide default arguments for the ENTRYPOINT instruction, both the CMD and ENTRYPOINT instructions should be specified with the JSON array format. - - docker run could override the default specified in CMD. -- ENTRYPOINT - - docker run arguments will as the entrypoint’s parameters. not CMD’s override - - has two forms - - ENTRYPOINT ["executable", "param1", "param2"] - - exec form, preferred - - ENTRYPOINT command param1 param2 - - shell form - - entrypoint setting can be override by docker run —entrypoint -- Security +## ENTRYPOINT + +- docker run arguments will as the entrypoint’s parameters. not CMD’s override +- has two forms +- ENTRYPOINT ["executable", "param1", "param2"] + - exec form, preferred +- ENTRYPOINT command param1 param2 + - shell form +- entrypoint setting can be override by docker run —entrypoint + +## Security - https://docs.docker.com/engine/security/security/ - use non root user - docker daemon attack surface - kernel security features + +## Tips + +- difference between `cmd` and `entrypoint` +- difference between `copy` and `add` + + Basically they are similar, copy files and folder to destination. While ADD has some features (like local-only tar extraction and remote URL support) that are not immediately obvious. Consequently, the best use for ADD is local tar file auto-extraction into the image, as in ADD rootfs.tar.xz /. diff --git a/categories/devops/kubernetes.md b/categories/devops/kubernetes.md index 8a56b72..492914d 100644 --- a/categories/devops/kubernetes.md +++ b/categories/devops/kubernetes.md @@ -703,3 +703,4 @@ k3s is intended to be a fully compliant Kubernetes distribution with the followi - https://kubernetes.io/docs/concepts/overview/components - [Writing a Custom Controller: Extending the Functionality of Your Cluster [I] - Aaron Levy](https://www.youtube.com/watch?v=_BuqPMlXfpE) +- [kubectl docs](https://kubectl.docs.kubernetes.io/)