Docker学习 基于centOS7

Docker学习 基于centOS7

1. Docker的基本概念

环境说明

  • 采用企业应用广泛的Linux发行版CentOS 7系统
  • 远程连接工具使用Xshell、Xftp

什么是Docker

环境配置的难题

  • 软件开发最大的麻烦事之一,就是环境配置,用户计算机环境各不相同,配置也要根据环境相应变化。
  • 操作系统的设置,各种库和组件的安装。只有它们都正确,软件才能运行,比如开发Java应用,计算机必须配置JDK。
  • 如果某些依赖过时与当前环境不兼容,那更是一场灾难。
  • 将不同的软件集成起来的过程中有很多不可控的风险,由于依赖关系复杂,容易出现兼容性问题。
  • 由于开发、测试、生产环境的差异,一旦需要重新迁移服务器或者重 新部署一套环境,还将重新执行一遍。

如何解决

  • 环境配置如此麻烦,换一台机器,就要重来一次,能不能从根本上解决问题呢
  • 如果软件连同环境一起打包,那就解决了上述问题,也就是说,使用软件时,把原始环境一模一样地复制过来。

Docker如何解决依赖的兼容问题?

  • 将应用的Bins/Libs-与应用一起打包
  • 将每个应用放到一个隔离容器去运行,避免互相干扰

image-20240604193735213

Docker如何解决不同系统环境的问题?

  • Docker将用户程序与所需要调用的系统函数库一起打包
  • Docker在运行到不同操作系统时,直接通过内核创建虚拟的操作系统实例(内核和库),来隔离不同的进程和资源

image-20240604193916337

概念

Docker允许开发中将应用、依赖、函数库、配置-起打包,形成可移植镜像
Docker应用运行在容器中,使用沙箱机制,相互隔离
Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行

Docker的主要用途,目前有三大类。
  • 提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
  • 提供弹性的云服务。因为Docker容器可以随开随关,很适合动态扩容和缩容。
  • 组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。

Docker与虚拟机

  • 虚拟机(virtual machine)是带环境安装的另一种解决方案,它可以在一种操作系统里面运行另一种操作系统,比如在Windows系统里面运行Linux系统。
  • 应用程序对此毫无感知,因为虚拟机看.上去跟真实系统一模一 样,而对于底层.系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。

image-20240604194428346

虽然用户可以通过虚拟机还原软件的原始环境。但是,这个方案有几个缺点。

  • 资源占用多,虚拟机会独占一部分内存和硬盘空间
  • 冗余步骤多虚拟机是完整的操作系统,需要经过繁琐的配置
  • 启动慢,启动操作系统需要多久,启动虚拟机就需要多久。可能要等几分钟,应用程序才能真正运行。

Docker和虚拟机都是基于软件的平台虚拟化技术,其中:

  • 虚拟机属于完全虚拟化,即模拟完整的底层硬件环境特权指令的执行,客户操作系统无需进行修改。比如我们常用的VirtualBox, VMWare Workstation和Parallels Desktop等虚拟化软件。
  • Docker容器技术是操作系统级虚拟化,即直接通过内核创建虚拟的操作系统实例(内核和库),来隔离不同的进程和资源,多个容器可以在同一台机器上运行,共享操作系统内核,但各自作为独立的进程在用户空间中运行。
  • Docker容器不需要额外的虚拟机管理软件和虚拟机操作系统层,直接在宿主机操作系统层面上实现虚拟化,从而达到轻量级,高效的目的。

Docker的组成

Docker包括三个基本概念
  • 镜像 (Image)
  • 容器 (Container)
  • 仓库 (Repository)
  • 理解了这三个概念,就理解了Docker 的整个生命周期。
镜像
  • Docker把应用程序及其依赖,打包在image文件里面。只有通过这个文件,才能生成Docker容器。
  • image文件可以看作是容器的模板,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。
  • Docker根据image文件生成容器的实例。同一个image文件,可以生成多个同时运行的容器实例。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
  • image是二进制文件。实际开发中,一个image文件往往通过继承另一个image文件,加上一些个性化设置而生成。举例来说,你可以在Ubuntu的image基础上,往里面加入Apache服务器,形成你的image.
  • image文件是通用的,一台机器的image文件拷贝到另一台机器, 照样可以使用。一般来说,为了节省时间,我们应该尽量使用别人制作好的image文件,而不是自己制作。即使要定制,也应该基于别人的image文件进行加工,而不是从零开始制作。
  • 为了方便共享,image文件制作完成后,可以上传到网上的仓库。Docker 的官方仓库Docker Hub是最重要、最常用的image仓库。此外,出售自己制作的image文件也是可以的。
容器
  • 镜像(Image) 和容器(Container) 的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。
  • 简单的说,容器是独立运行的一个或一-组应用, 以及它们的运行态环境,容器可以被创建、启动、停止、删除、暂停等。
  • 容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的root文件系统、自己的网络配置、自己的进程空间,甚至自己的用户ID空间。
  • 容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作- -样。 这种特性使得容器封装的应用比直接在宿主运行更加安全。
仓库
  • 镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、 分发镜像的服务,Docker Registry就是这样的服务。

  • 一个Docker Registry中可以包含多个仓库(Repository) ; 每个仓库可以包含多个标签(Tag) ;每个标签对应一个镜像。

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

  • 以Ubuntu镜像为例,ubuntu是仓库的名字,其内包含有不同的版本标签,如,16.04, 18.04。我们可以通过ubuntu:16.04,或者ubuntu:18.04来具体指定所需哪个版本的镜像。如果忽略了标签,比如ubuntu,那将视为ubuntu:latest。

  • DockerHub: DockerHub是一个Docker镜像的托管平台。 这样的平台称为Docker Registry.

  • 国内也有类似于DockerHub的公开服务,比如网易云镜像服务、阿里云镜像库等。

image-20240604200056898

Docker架构

  • 客户端(client):通过命令或RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令。
  • 服务端(server): Docker守护进程,负责处理Docker指令,管理镜像、容器等。

image-20240604200600639

2. Docker安装与镜像操作

Docker安装

  • Docker分为CE和EE两大版本。CE 即社区版(免费,支持周期7个月)EE即企业版,强调安全,付费使用,支持周期24个月。
  • Docker CE支持64位版本CentOS 7,并且要求内核版本不低于3.10,CentOS 7满足最低内核的要求。
  1. 卸载旧版Docker(可选)

    yum remove docker docker-client  docker-client-latest  docker-common  docker-latest  docker-latest-logrotate  docker-logrotate docker-engine
    
  2. 安装yum工具

    yum install -y yum-utils
    
  3. 镜像配置

    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  4. 更新软件包索引

    yum makecache fast
    
  5. 下载安装Docker

    yum install docker-ce docker-ce-cli containerd.io
    
  6. 启动Docker

    systemctl start docker
    
  7. 查看Docker版本

    docker version
    
  8. 设置开机自启动Docker服务

    systemctl enable docker.service
    
  9. 镜像加速

    # 进入docker配置的目录
    cd /etc/docker/
    # 创建 daemon.json
    touch daemon.json
    # 编辑这个文件
    vim daemon.json
    # 输入这些内容,其中url改成自己的加速器地址,亦可使用该地址
    {
         
    	"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]
    }
    # 加载配置
    systemctl daemon-reload
    # 重启docker服务
    systemctl restart docker
    

镜像操作

镜像名称

  • 一个仓库会包含同-个软件不同版本的镜像
  • 镜像名称-般分两部分组成: [仓库名]:[标签],如果不给出标签,将以latest作为默认标签
  • 如: redis:6.0

镜像操作命令

image-20240604211809151

镜像操作示例

  • 访问DockerHub搜索镜像,https://hub.docker.com/, 搜索redis
  • 拉取镜像: docker pull redis
  • 查看本地镜像: docker images
  • 将镜像导出到磁盘: docker save -0文件名称镜像名称/ID
  • 删除本地镜像: docker rmi镜像名称/ID
  • 导入镜像: . docker load -i文件名称

3. Docker容器操作(比较重要)

Docker容器操作命令

  • docker run 新建并启动容器
  • docker start/stop/pause/uppaues 启动/停止/暂停/恢复容器
  • docker exec 进入容器执行命令
  • docker logs 查看容器运行日志
  • docker ps 查看容器运行状态
  • docker rm 删除指定容器

Nginx与Redis容器示例

Niginx容器示例
  • 拉取nginx镜像 docker pull nginx
  • 创建并启动容器 docker run --name myng
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值