https://docs.docker.com/get-started/overview/
一图千言
常见概念
What is Image?
一切皆对象一切皆镜像。一个镜像是用于创建一个容器指令的只读模板。通常,一个镜像基于另一个镜像,并带有一些额外的自定义。要构建您自己的镜像,您需要 使用简单的语法创建一个Dockerfile,用于定义创建镜像和运行镜像所需的步骤。Dockerfile 中的每条指令都会在镜像中创建一个层。当您更改 Dockerfile 并重建映像时,只会重建那些已更改的层layer
A Docker container image is a lightweight, standalone, executable package of software that includes everything needed to run an application: code, runtime, system tools, system libraries and settings
What is Container?
A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another
可以将容器连接到一个或多个网络,为其附加存储,甚至可以根据其当前状态创建新映像。
默认情况下,容器与其他容器及其主机相对隔离。您可以控制容器的网络、存储或其他底层子系统与其他容器或主机之间的隔离程度。
容器由其映像以及您在创建或启动它时提供给它的任何配置选项定义。当容器被移除时,未存储在持久存储中的对其状态的任何更改都会消失
Relation between image and container
Container images become containers at runtime and in the case of Docker containers- images become containers when they run on Docker Engine.
Docker architecture
Docker使用客户端-服务器架构。Docker客户端与Docker守护进程进行对话,Docker守护进程负责构建、运行和分发你的Docker容器。Docker客户端和守护进程可以运行在同一个系统上,或者你可以连接一个Docker客户端到一个远程的Docker守护进程。Docker客户端和守护进程通过UNIX套接字或网络接口使用REST API进行通信。另一个Docker客户端是Docker Compose,它允许您使用由一组容器组成的应用程序
docker 常用操作
Dockerfiles
使用dockerfile配置生产image
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
docker 网络
https://docs.docker.com/network/
Docker 的网络子系统是可插拔的
bridge
:默认的网络驱动程序。如果您没有指定驱动程序,这就是您正在创建的网络类型。当您的应用程序在需要通信的独立容器中运行时,通常会使用桥接网络。当需要多个容器在同一个 Docker 主机上进行通信时,请参阅 桥接网络。
host
:对于独立容器,去掉容器与Docker主机的网络隔离,直接使用主机的网络。当网络堆栈不应与 Docker 主机隔离,但希望容器的其他方面被隔离时,请参阅 使用主机网络。
overlay
:覆盖网络将多个 Docker 守护进程连接在一起,并使 swarm 服务能够相互通信。您还可以使用覆盖网络来促进 swarm 服务和独立容器之间的通信,或者不同 Docker 守护进程上的两个独立容器之间的通信。这种策略消除了在这些容器之间进行操作系统级路由的需要。当需要在不同 Docker 主机上运行的容器进行通信时,或者当多个应用程序使用 swarm 服务协同工作时,请参阅覆盖网络。
macvlan
:Macvlan 网络允许您为容器分配 MAC 地址,使其在您的网络上显示为物理设备。Docker 守护进程通过容器的 MAC 地址将流量路由到容器。macvlan
在处理期望直接连接到物理网络而不是通过 Docker 主机的网络堆栈路由的遗留应用程序时,使用驱动程序有时是最佳选择。当从 VM 设置迁移或需要容器看起来像网络上的物理主机时,Macvlan 网络是最佳选择,每个主机都有唯一的 MAC 地址。请参阅 Macvlan 网络。
none
:对于这个容器,禁用所有网络。通常与自定义网络驱动程序结合使用。none
不适用于群服务。请参阅 禁用容器网络。网络插件:您可以通过 Docker 安装和使用第三方网络插件。这些插件可从 Docker Hub 或第三方供应商处获得。有关安装和使用给定网络插件的信息,请参阅供应商的文档
Container的NS
每个container,都会有自己的network namespace,并且是独立的
container网络-Bridge
Docker数据持久化
https://docs.docker.com/storage/
在 Docker 中管理数据
默认情况下,在容器内创建的所有文件都存储在可写容器层上,当该容器不再存在时,数据不会持久存在。Docker 有两个选项让容器在主机中存储文件,以便即使在容器停止后文件也能持久化:volumes和 bind mounts。如果您在 Linux 上运行 Docker,您还可以使用tmpfs mount。如果您在 Windows 上运行 Docker,您还可以使用命名管道
卷存储在由 Docker(
/var/lib/docker/volumes/
在 Linux 上)管理的主机文件系统的一部分中。非 Docker 进程不应修改文件系统的这一部分。卷是在 Docker 中持久化数据的最佳方式。卷由 Docker 管理并且与主机的核心功能隔离绑定挂载可以存储在主机系统的任何位置。它们甚至可能是重要的系统文件或目录。Docker 主机或 Docker 容器上的非 Docker 进程可以随时修改它们。
tmpfs
挂载仅存储在主机系统的内存中,永远不会写入主机系统的文件系统
Use Docker Compose
https://docs.docker.com/get-started/08_using_compose/
Docker Compose是一种工具,旨在帮助定义和共享多容器应用程序。使用 Compose,我们可以创建一个 YAML 文件来定义服务,并且可以使用单个命令来启动或拆除所有内容。