• Docker专题-入门与运维


    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
    在这里插入图片描述
      标注:免费的社区版:ce 收费的企业版:ee 轻量级版:alpine
       2)安装(在线)
      2.1)设置 Docker 仓库(或者#安装yum install\ yum update)

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

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

    	yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-engine
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

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

      2.4)安装最新版本的 Docker

    	yum install docker-ce docker-ce-cli containerd.io
    
    • 1
         或 安装特定版本的 Docker Engine-Community,请在存储库中列出可用版本,然后选择并安装:
    
    • 1
    	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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

      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
    
    • 1
    • 2

    如何工作?
      CS架构,client-server模式,client端负责处理用户输入的各种命令,比如docker build、docker run;server端[docker demon]负责任务的执行。
      docker的工作流程:
      1-docker build: docker daemon创建“可执行程序”image
    在这里插入图片描述

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

      3-docker pull:docker daemon接收到命令后向docker registry发送image下载请求。docker registry存放各种image,image的公共仓库docker Hub。
    在这里插入图片描述

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

    2 架构

    在这里插入图片描述
    概念说明
      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 博客:https://www.cnblogs.com/niceyoo/p/13058238.html

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    运行中命令:

    	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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

      说明: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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    6附录

      英文官网   镜像查询   中文官网    docker-ce github

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

  • 相关阅读:
    C语言的简单学习
    QT:QSS自定义 QCheckBox实例
    操作指南|JumpServer堡垒机支持通过Passkey进行登录认证
    基于深度学习视觉算法的多模型文件融合检测系统设计与实现及优化(工人姿态检测+安全帽佩戴检测系统)
    【C语言】善于利用指针(三)
    数说故事×北拓资本访谈:数说故事的发展历程以及对数字化的理解
    ACM-BCB2019 | SMILES-BERT:基于大规模无监督预训练的分子属性预测模型
    代码版的《本草纲目》毽子舞!如何本地整一个
    大数据之LibrA数据库常见术语(六)
    Leetcode | 算法(二)
  • 原文地址:https://blog.csdn.net/jun55xiu/article/details/126270334