什么是Docker
Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口以及操作系统级别的虚拟化。
更为直白的叙述就是,Docker可以将程序和环境(依赖库+配置+操作系统)打包并运行的工具软件。
基础镜像
总所周知,环境不同,程序运行的结果就会不同,甚至会失败。所以统一环境是十分有必要的,其中最重要的就是操作系统的统一。让所有程序都跑在同一个操作系统上,利用操作系统的用户空间构建出应用程序所需的环境。
镜像(image)就是对应用程序及其依赖进行打包,通过该文件生成Docker容器及容器实例。同一个image文件可生成多个同时运行的容器实例。
Dockerfile
在有了基础镜像后,往往为构建复杂的应用程序,需要安装各种依赖以及文件夹。Dockerfile就是可以将这些需要安装的依赖相关的命令等列个清单,从而创建出一个适合程序运行的环境。
容器
当我们用命令执行docker build的时候, docker就会按着Dockerfile的说明,一行行构建环境+应用程序。最终将这个环境+程序,打包成一个类似“压缩包”的东西,我们称之为容器镜像(container image)
基于此,当我们执行docker run命令时,就会将容器镜像给“解压缩”,获得一个独立的环境和应用程序并运行起来。也就是所谓的容器(container)
简而言之,容器就是镜像创建的运行实例,Docker利用容器来运行应用。每个容器都是相互隔离的、保证安全的平台。我们可以把容器看做是一个轻量级的Linux运行环境。
容器VS虚拟机
Docker容器:使用Docker引擎进行调度和隔离,提高了资源利用率,在相同硬件能力下可以运行更多的容器实例;每个容器拥有自己的隔离化用户空间。
VM:使用Hypervisor提供虚拟机的运行平台,管理每个VM中操作系统的运行。每个VM都要有自己的操作系统、应用程序和必要的依赖文件等。
一句话概括就是,容器本质上只是个自带独立运行环境的特殊进程,底层用的其实是宿主机的操作系统内核。
什么是Docker compose
一个可以用来定义和分享多容器应用程序的工具。可以使用单一资源来运行一个有多容器的项目。在对容器部署顺序有要求的项目下使用十分便利(比如先启动数据库在启动身份验证最后启动web服务)
常见的docker操作命令
// 列出本机所有的image文件
docker image ls
// 运行指定image文件 自动抓取image文件。如果发现本地没有指定的image文件,就会从仓库自动抓取
docker container run xxx
// 列出本机正在运行的容器
docker container ls
// 列出本机所有容器,包括终止运行的容器
docker container ls --all
// 终止运行的容器文件
docker container rm [containerID]
// 启动已经生成已经停止运行的容器文件
docker container start [containerID]
// 查看docker容器里的输出 如果docker run命令运行容器的时候,没有使用-it参数,就要用这个命令查看输出
docker container logs [containerID]
// 将docker容器里正运行文件拷贝到本机
docker container cp [containID]:[/path/to/file]
// 本地image镜像重命名
docker tag imageName:TAG REGISTRYHOST/USERNAME/NAME:TAG
docker tag hello-world:latest registry.cn-shenzhen.aliyuncs.com/chenjinting/hello-world:v1.0.0
// 查看正在运行的容器
docker ps
// 查看所有的容器
docker ps -a
// 附加到运行的容器
docker attach [name]/[containerId]
// 后台运行容器
docker run (–name xxx) -d xxx xxxx/xxx/xxx
// 查看运行中容器的进程号
docker top xxx(name)
// 停止容器
docker kill xxx(name)
// 查看容器的具体信息
docker inspect [name]/[containerId]
// 删除镜像文件
docker rmi 仓库名+标签名
// 删除所有标签及其镜像文件
docker rmi 【id】
// 查找镜像
docker search xxx
// 拉取镜像
docker pull xxx
// 导成tar包并使其具备可移植性:
docker save -o xxx.tar xxxx(name)
什么是K8s
一个开源的容器编排平台,可以自动化在部署、管理和扩展容器化应用过程中涉及的许多手动操作。可以轻松对服务器实现负载均衡以及弹性伸缩。
K8s与docker的关系
Docker 部署的容器,其实就是 k8s 调度的 Pod 里的 container,它们都叫容器,其实是一回事。只不过 k8s 除了支持 Docker 的容器外,还支持别人家的容器。Docker Compose 基于多个 container 创建的一整套服务,其实就是 k8s 里的 pod。
Docker 主要负责容器的创建和管理,而 Kubernetes 则负责这些容器的编排和管理。简单来说,Docker 解决的是“如何运行单个容器”的问题,而 Kubernetes 解决的是“如何在大规模环境中管理和编排多个容器”的问题。
写在最后
简单介绍了下Docker,Docker常见命令以及K8s, 后面应该会继续补充(大概)