文章目录

  • Docker专题-基础知识
  • 1 发展缘由
  • Docker?
  • 为什么要使用Docker?
  • 2 架构
  • 3 基于Docker搭建私有镜像仓库
  • 4 常见工具
  • 5 常见命令
  • 6附录


Docker专题-基础知识

1 发展缘由

  1960年IBM开始推出大型主机虚拟化,虚拟机虚拟化主要代表是Xen、Kvm,至到2013 年 3 月 Docker出世,一种容器技术组件。
  传统虚拟化一般通过硬件来模拟实现,也可以通过操作系统软件来实现。而容器技术则充分利用OS本身已有的机制与特性,更加优雅的实现远超传统虚拟机的轻量级虚拟化。被称为”新一代的虚拟化“技术,并将基于容器打造的云平台称为“容器云”。

Docker?

  Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
  Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低,大量节省宿主机资源。
  17.03版本后分为CE-Community Edition社区版和EE-Enterprise Edition企业版。
  Docker的构想是要实现“Build,Ship and Run Any App, Anywhere",即通过对应用组件的封装(Packaging)、分发(Distribution)、部署(Deployment)、运行(Runtime)生命周期进行管理,达到应用组件级别的“一次封装,到处运行”。应用组件,既可以是一个Web应用、一个编译环境、一套数据库平台服务,甚至是一个操作系统或集群。
  Docker提供了各种容器管理工具(如分发、版本、移植等),让用户无须关注底层的操作,更加简单明了地管理和使用容器;其次,Docker通过引入分层文件系统构建和高效的镜像机制,降低了迁移难度,极大地改善了用户体验。用户操作Docker容器就像操作应用自身一样简单。

为什么要使用Docker?

那些典型的应用场景?

  Web 应用的自动化打包和发布。

  自动化测试和持续集成、发布。

  在服务型环境中部署和调整数据库或其他的后台应用。

如何安装?

  1)确定安装版本

  Docker: https://hub.docker.com/_/docker

docker 什么时候开始收费 docker诞生于哪一年_docker 什么时候开始收费


  标注:免费的社区版:ce 收费的企业版:ee 轻量级版:alpine

   2)安装(在线)

  2.1)设置 Docker 仓库(或者#安装yum install\ yum update)

yum install -y yum-utils device-mapper-persistent-data lvm2

  2.2)检查是否存在Docker,并且删除旧版本

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

  2.3)设置stable镜像仓库(阿里云)

yum install -y yum-utils
	yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/
	centos/docker-ce.repo

  2.4)安装最新版本的 Docker

yum install docker-ce docker-ce-cli containerd.io
或 安装特定版本的 Docker Engine-Community,请在存储库中列出可用版本,然后选择并安装:
yum list docker-ce --showduplicates | sort -r
	sudo yum install docker-ce-20.10.9 docker-ce-cli-20.10.9 containerd.io
	[root@iZm5eblmh3oa6nk0bpvg19Z ~]# yum list docker-ce --showduplicates | sort -r 
	Installed Packages 
	docker-ce.x86_64 3:20.10.9-3.el8 docker-ce-stable 
	docker-ce.x86_64 3:20.10.8-3.el8 docker-ce-stable 
	docker-ce.x86_64 3:20.10.7-3.el8 docker-ce-stable 
	docker-ce.x86_64 3:20.10.6-3.el8 docker-ce-stable 
	docker-ce.x86_64 3:20.10.5-3.el8 docker-ce-stable 
	docker-ce.x86_64 3:20.10.4-3.el8 docker-ce-stable 
	docker-ce.x86_64 3:20.10.3-3.el8 docker-ce-stable 
      如上:VERSION_STRING=20.10.9

  2.5)启动 systemctl start docker
  2.6)通过运行hello-world镜像来验证Docker引擎是否正确安装 docker run hello-world
  2.7)查询docker版本 docker -v
  2.8)删除安装包\删除镜像、容器、配置文件等内容

yum remove docker-ce      
	rm -rf /var/lib/docker

如何工作?

  CS架构,client-server模式,client端负责处理用户输入的各种命令,比如docker build、docker run;server端[docker demon]负责任务的执行。

  docker的工作流程:

  1-docker build: docker daemon创建“可执行程序”image

docker 什么时候开始收费 docker诞生于哪一年_Docker_02

  2-docker run: docker daemon接收到命令找到具体的image,然后加载到内存开始执行。containers:容器是独立运行的一个或一组应用,是镜像运行时的实体

docker 什么时候开始收费 docker诞生于哪一年_容器_03

  3-docker pull:docker daemon接收到命令后向docker registry发送image下载请求。docker registry存放各种image,image的公共仓库docker Hub。

docker 什么时候开始收费 docker诞生于哪一年_容器_04

docker的底层实现
  NameSpace:命名空间,容器隔离的基础。NameSpace机制是一种资源隔离方案,将机器全局资源[User,Mnt,Network,UTS,IPC,Pid等]划分至某个特定的NameSpace,各个NameSpace下的资源互不干扰,形成一个独立的文件操作系统。
  Control groups:cgroup控制容器中进程对资源[CPU、内存、磁盘、网络]的访问,控制容器对系统资源的消耗。
  unionfs 联合文件系统:典型如aufs/overlayfs,分层镜像实现的基础。
  参考:

2 架构

docker 什么时候开始收费 docker诞生于哪一年_docker_05


概念说明

  Docker 镜像(Images)-用于创建Docker容器的模板,比如 Ubuntu 系统。

  Docker 容器(Container)-容器是独立运行的一个或一组应用,是镜像运行时的实体。

  Docker 客户端(Client)- Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。

  Docker 主机(Host)-一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。

  Docker Registry-Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。

  Docker Hub(https://hub.docker.com) -提供庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

  Docker Machine-Docker Machine是一个简化Docker安装的命令行工具,通过简单的命令行可在相应的平台上安装Docker,如VirtualBox、 Digital Ocean、Microsoft Azure。

3 基于Docker搭建私有镜像仓库

  参考 niceyoo 博客:

4 常见工具

  1)BusyBox是一个集成了一百多个最常用Linux命令(如cat、echo、grep、mount、telnet等)的精简工具箱,被誉为“Linux系统的瑞士军刀"。BusyBox可运行于多款POSIX环境的操作统中,如Linux(包括Android)、Hurd、FreeBSD等。
docker pull busybox:latest docker run -it busybox
  2)Jenkins持续集成和交付工具:持续集成(Continuous Integration,CI)完成开发团队定期进行集成验证,集成通过自动化的构建来完成,包括自动编译、发布和测试,从而尽快地发现错误。特点:鼓励自动化的周期性的过程,从检出代码、编译构建、运行测试、结果记录、测试统计等都由自动完成的,减少人工干预;需要有持续集成系统的支持,包括代码托管机制支持以及集成服务器等。持续交付(Continuous Delivery,CD)则强调产品在修改后到部署上线的流程要敏捷化、自动化。部署上线的简易性。

5 常见命令

  基本命令

启动docker:systemctl start docker 
	停止docker:systemctl stop docker 
	重启docker:systemctl restart docker 
	查看docker状态:systemctl status docker 
	开机启动:systemctl enable docker 
	当前系统docker信息:docker info 
	列举出所有的容器:docker ps -a 
	停止容器:docker start 容器ID或容器名 
	直接关闭容器:docker kill 容器ID或容器名 
	重启容器:docker restart 容器ID或者容器名 
	删除容器:docker rm 容器ID或者容器名 
	删除镜像:docker rmi -f 镜像名1:TAG  (先删除容器,当镜像无容器时再删除镜像)
	查看镜像:docker image  或  【docker images|grep redis|grep redis】
			-a :列出本地所有的镜像(含历史映像层)  -q :只显示镜像ID
	查询仓库中镜像:docker search redis
	拉取镜像:docker pull redis:latest
	查看镜像/容器/数据卷所占的空间:docker system df

运行中命令:

1 启动容器:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
 	 创建容器:docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
		OPTIONS:--name 容器新名字
      			 -d 后台运行容器并返回容器ID,即启动守护式容器(后台服务)
				-i以交互模式运行容器,通常与-t 同时使用; 
				-t为容器重新分配伪输入终端,即启动交互式容器(前台有伪终端,等待交互);
				-p 指定端口映射  -P 随机端口映射
    	COMMAND:
			例如运行redis容器:$docker run -itd --name redis-automation 
			-p 6379:6379 redis redis-server --appendonly yes
 	2 进入正在运行的容器:docker exec -it 容器ID /bin/bash
	3 容器→主机文件拷贝:docker cp 容器ID:容器内目录 主机目录
	4 导入和导出容器(快照):
 		[export导出容器的内容为tar归档文件;import 从tar归档文件创建新的文件系统再导入为镜像]。
     	案例: docker export 容器ID > 文件名.tar
		cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
	 5 存出和载入容器(备份):
    	案例: docker save -o 文件名.tar 镜像名:镜像版本号
		docker load -i 文件名.tar 或  docker load < 文件名.tar

  说明:save/load:保存、加载容器,保留所有的历史记录和元数据信息;docker import/export:导入、导出容器快照,可以重新指定标签等元数据信息,仅保存容器当时的快照状态。

日志相关:

$docker logs [OPTIONS] CONTAINER
   Options:--details 显示更多的信息   -f, --follow跟踪实时日志
           --since string 显示timestamp之后的日志或相对时间,如42m(即42分钟)
           --tail string 日志末尾显示多少行日志,默认是all
           -t, --timestamps显示时间戳
           --until string 显示timestamp之前的日志或相对时间,如42m(即42分钟)
  	如:$docker logs -f -t --since="2020-02-08" --tail=50 CONTAINER_ID
	$docker logs -t --since="2020-08-08T13:23:37" --until 
			"2020-08-09T12:23:37" CONTAINER_ID
	$docker logs --since 30m CONTAINER_ID

6附录

docker中的三剑客
  machine、compose和swarm。
  Machine是一个简化Docker安装的命令行工具,对docker运行环境进行安装与管理;
  compose是用来定义和运行一个或多个容器运行和应用的工具,负责实现对基于docker容器的多
应用服务的快速编排,简化容器镜像的构建以及容器的运行,compose 使用 YAML 文件来定义多
容器之间的关系。应用案例:Web负载均衡、大数据Spark集群。
  Swarm是社区提供的原生支持Docker集群的工具,本身不是很成熟,不建议用在生产环境。
Kubernetes:
  开源容器集群管理系统,基于go语言,底层基于docker、rkt等容器技术,提供强大的应用管理和资源调度能力。可轻松搭建和管理一个可扩展的生产级别的容器云。