本文已参与「新人创作礼」活动,一起开启掘金创作之路。
介绍:Docker概述、Docker引擎、Docker架构、Docker底层技术、Docker安装
Docker概述
Docker 是一个用于开发、发布和运行应用程序的开放平台。 Docker 使您能够将应用程序与基础结构分离开来,从而可以快速交付软件。 使用 Docker,您可以像管理应用程序一样管理基础结构。 通过利用 Docker 的快速发布、测试和部署代码的方法,可以显著减少编写代码和在生产环境中运行代码之间的延迟。 docs.docker.com/ hub.docker.com/
- 应用程序的快速、一致的交付
- 响应式部署和扩展
- 在同一个硬件上运行更多的工作负载
Docker引擎
- server:服务器是一种长时间运行的程序,称为守护进程(dockerd命令)
- REST API:它指定了一些接口用来与守护进程对话并指示它做什么
- Client:命令行客户端(docker命令)
The CLI uses the Docker REST API to control or interact with the Docker daemon through scripting or direct CLI commands. Many other Docker applications use the underlying API and CLI.
The daemon creates and manages Docker objects, such as images, containers, networks, and volumes.
Docker架构
Docker使用客户机-服务器架构。Docker客户机与Docker守护进程进行对话,后者负责构建、运行和分发Docker容器。Docker客户机和守护进程可以在同一系统上运行,也可以将Docker客户机连接到远程Docker守护进程。Docker客户机和守护进程通过UNIX套接字或网络接口使用REST API进行通信。
Docker Images
Docker镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。
Docker Container
Docker容器是独立运行的一个或一组应用,是镜像运行时的实体。
Docker Client
Docker客户端通过命令行或者其他工具使用 Docker SDK (docs.docker.com/develop/sdk…) 与 Docker 的守护进程通信。
Docker HOST
一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
Docker deamon
Docker守护进程侦听Docker API请求并管理Docker对象。
Docker Registry
Docker 仓库用来保存镜像。
Docker底层技术
Namespaces
Docker使用一种称为名称空间的技术来提供称为容器的隔离工作区。运行容器时,Docker为该容器创建一组名称空间。
这些名称空间提供了一层隔离。容器的每个方面都在一个单独的名称空间中运行,它的访问仅限于该名称空间。
The pid namespace:(Process ID)进程隔离 The net namespace:(Networking)管理网络接口 The ipc namespace:(InterProcess Communication)管理对IPC资源的访问 The mnt namespace:(Mount)管理文件系统挂载点 The uts namespace:(Unix Timesharing System)隔离内核和版本标识符 The usr namespace:(User)管理用户和组
Control groups
Linux上的Docker引擎还依赖于另一种称为control groups (cgroups)的技术。cgroup将应用程序限制为一组特定的资源。控制组允许Docker引擎将可用的硬件资源共享给容器,并可选地执行限制和约束。例如,可以将可用内存限制到特定容器。
Docker安装
安装 docs.docker.com/docker-for-…
获取镜像加速器 cr.console.aliyun.com/cn-beijing/…
配置daemon config
- Docker/Preferences.../Docker Engine
{
"experimental": false,
"debug": true,
"registry-mirrors": ["https://koz8d259.mirror.aliyuncs.com"]
}
重启Docker
使用
docker pull redis
docker run -d --name redis-13350 -p 13350:6379 redis
docker pull mysql
docker run -d --name mysql-3306 -p 3306:3306 mysql
# Jenkins BlueOcean
docker run -itd -p 8080:8080 -p 50000:50000 -v /Users/lihaipeng/docker/jenkins:/var/jenkins_home --name jenkinsci-blueocean jenkinsci/blueocean