Docker基本概念

Docker是一个公司名称,它的产品也叫Docker。一般来说,当提到Docker的时候,指的是容器化技术,用来创建和使用linux容器,借助Docker,可以将这些容器当作轻巧灵活的虚拟机来使用,实现对容器的创建、部署和复制。
第一次接触Docker时的一些概念好像过了好久才慢慢理解,so现在拿出来整理一遍。

Docker的原理

Docker使用了linux内核和内核功能来分隔进程,使得各个进程相互独立运行,各个系统在独自的进程来运行,保证了独立性和安全性。

相比传统的linux容器

传统的linux容器使用init系统来管理多进程,所有应用都作为一个整体运行,但Docker让应用各自独立运行进程。如下图:
image

RedHat上的一张图是这样表示的:
image

相比vm

Docker并非虚拟机。Docker利用的是宿主机的系统内核(直接利用资源),应用之间的隔离级别是进程级的,可以做到几秒钟之内创建大量容器。而虚拟机的启动是分钟级的,采用hypervisor的隔离策略,隔离级别是操作系统级的,直观上看,vm比docker外层多了一层guest os。
image

Docker的几个重要概念

镜像 images

  • 一个包含了应用程序和其运行时依赖环境的只读文件,用于构建容器
  • 升级:每一个镜像由一系列的层 (layers) 组成。Docker 使用 UnionFS 来将这些层联合到单独的镜像中,当升级到某个程序到新的版本,一个新的层会被创建,不需要替换原先的镜像

容器 containers

  • 从镜像创建的实例,镜像和容器的关系,就像类和实例的关系
  • 一个容器是一个独立的应用平台,用来运行应用
  • 运行实例的两种方式:交互型(前台运行,可以通过控制台与容器交互。如果创建该容器的终端被关闭,则容器就变为停止状态),后台型(后台运行,创建启动之后就与终端无关,需要用 docker stop 或 docker kill 来终止,或者 docker logs 查看运行中的输出)

仓库 registeries

  • 保存镜像的仓库,类似于代码仓库
  • 分为公有和私有,公有:Docker Hub,有很多镜像可以直接使用

Docker常用命令

拉取镜像

1
docker pull [ 仓库 ]:[ tag ]

查看本地镜像

1
docker images

删除本地镜像

1
docker rmi [image-name || image-id]

创建一个新的容器并运行一个命令 docker run

1
docker run [image-name]:[tag]

运行一个镜像

1
docker run [image-name] –d –p 8080:8080 –e KEY=‘VALUE’

“-d” 后台运行容器
“-p” 指定端口映射
“-e” 添加环境变量

1
docker run [image-name] –v /my/own/datadir:/container/dir

“-v” 挂载宿主机的指定目录 ( 或文件 ) 到容器内的指定目录 ( 或文件 )

查看运行中的容器

1
docker ps

删除容器

1
docker rm [container]

关闭和启动容器

1
2
3
4
5
6
7
8
# 关闭容器
docker stop [container]
# 强制关闭容器
docker kill [container]
# 启动容器
docker start [container]
# 重启容器
docker restart [container]

在运行的容器中执行命令 docker exec

1
docker exec -it [image-name] bash

Kubernetes

K8S,对容器进行编排的工具,也就是一个容器集群管理系统,主要职责是启动容器,自动化部署,扩展和管理容器应用,回收容器。