docker基础入门总结(代码片段)

langxian langxian     2022-12-04     372

关键词:

一、什么是Docker

   官方文档描述:“Docker is an open platform for developing, shipping, and running applications. Docker enables you to separate your applications from your infrastructure so you can deliver software quickly. With Docker, you can manage your infrastructure in the same ways you manage your applications. By taking advantage of Docker’s methodologies for shipping, testing, and deploying code quickly, you can significantly reduce the delay between writing code and running it in production.”

  一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。

  • Docker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及AUFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。 由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。Docke最初实现是基于LXC。
  • 容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。

  • 容器化软件适用于基于Linux和Windows的应用,在任何环境中都能够始终如一地运行。

  • 容器赋予了软件独立性,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。

  再来看看容器较为通俗的解释:
  如果需要通俗的描述容器的话,我觉得容器就是一个存放东西的地方,就像书包可以装各种文具、衣柜可以放各种衣服、鞋架可以放各种鞋子一样。我们现在所说的容器存放的东西可能更偏向于应用比如网站、程序甚至是系统环境。

              技术图片

二、为什么要用Docker

  • Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现“这段代码在我机器上没问题啊”这类问题;——一致的运行环境

  • 可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。——更快速的启动时间

  • 避免公用的服务器,资源会容易受到其他用户的影响。——隔离性

  • 善于处理集中爆发的服务器使用压力;——弹性伸缩,快速扩展

  • 可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。——迁移方便

  • 使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。——持续交付和部署

三、Docker容器与虚拟机的区别

   简单来说: 容器和虚拟机具有相似的资源隔离和分配优势,但功能有所不同,因为容器虚拟化的是操作系统,而不是硬件,因此容器更容易移植,效率也更高。

  传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

  两者对比图

        技术图片

  容器与虚拟机 (VM) 总结

          技术图片

  • 容器是一个应用层抽象,用于将代码和依赖资源打包在一起。 多个容器可以在同一台机器上运行,共享操作系统内核,但各自作为独立的进程在用户空间中运行 。与虚拟机相比, 容器占用的空间较少(容器镜像大小通常只有几十兆),瞬间就能完成启动 。

  • 虚拟机(VM)是一个物理硬件层抽象,用于将一台服务器变成多台服务器。 管理程序允许多个VM在一台机器上运行。每个VM都包含一整套操作系统、一个或多个应用、必要的二进制文件和库资源,因此占用大量空间。而且VM启动也十分缓慢 。 

  通过Docker官网,我们知道了这么多Docker的优势,但是大家也没有必要完全否定虚拟机技术,因为两者有不同的使用场景。虚拟机更擅长于彻底隔离整个运行环境。例如,云服务提供商通常采用虚拟机技术隔离不同的用户。而Docker通常用于隔离不同的应用 ,例如前端,后端以及数据库。就我目前项目而言,对于两者无所谓谁会取代谁,而是两者可以和谐共存。
  容器与虚拟机(VM)两者共存:

          技术图片

三、Docker的基本概念

  Docker 中包括三个基本的概念:

  • Image(镜像)
  • Container(容器)
  • Repository(仓库)

            技术图片

   Image(镜像)

  镜像是 Docker 运行容器的前提,仓库是存放镜像的场所,可见镜像更是 Docker 的核心。
  那么镜像到底是什么呢?Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。
  镜像不包含任何动态数据,其内容在构建之后也不会被改变。镜像(Image)就是一堆只读层(read-only layer)的统一视角,也许这个定义有些难以理解,下面的这张图能够帮助读者理解镜像的定义: 
              技术图片

  从左边我们看到了多个只读层,它们重叠在一起。除了最下面一层,其他层都会有一个指针指向下一层。这些层是 Docker 内部的实现细节,并且能够在主机的文件系统上访问到。
统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角。这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。我们可以在图片的右边看到这个视角的形式。

  镜像有多种生成方法:

  • 从无到有开始创建镜像

  • 下载并使用别人创建好的现成的镜像

  • 在现有镜像上创建新的镜像

   我们可以将镜像的内容和创建步骤描述在一个文本文件中,这个文件被称作 Dockerfile ,通过执行 docker build命令可以构建出 Docker 镜像。


  Container(容器)
  容器(Container)的定义和镜像(Image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。 

              技术图片

  由于容器的定义并没有提及是否要运行容器,所以实际上,容器 = 镜像 + 读写层。


  Repository(仓库)
  Docker 仓库是集中存放镜像文件的场所。镜像构建完成后,可以很容易的在当前宿主上运行。
  但是, 如果需要在其他服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry(仓库注册服务器)就是这样的服务。
  有时候会把仓库(Repository)和仓库注册服务器(Registry)混为一谈,并不严格区分。
  Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。
  实际上,一个 Docker Registry 中可以包含多个仓库(Repository),每个仓库可以包含多个标签(Tag),每个标签对应着一个镜像。
  所以说,镜像仓库是 Docker 用来集中存放镜像文件的地方,类似于我们之前常用的代码仓库。
  通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 。
  我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 Latest 作为默认标签。
  仓库又可以分为两种形式:

  • Public(公有仓库)
  • Private(私有仓库)

  Docker Registry 公有仓库是开放给用户使用、允许用户管理镜像的 Registry 服务。
  一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。
  除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry。Docker 官方提供了 Docker Registry 镜像,可以直接使用做为私有 Registry 服务。
  当用户创建了自己的镜像之后就可以使用 Push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 Pull 下来就可以了。
  以上我们主要把 Docker 的一些常见概念如 Image,Container,Repository 做了详细的阐述,也从传统虚拟化方式的角度阐述了 Docker 的优势。

四、Docker的架构

  我们从下图可以直观地看到 Docker 的架构: 
            技术图片

  Docker 使用 C/S 结构,即客户端/服务器体系结构。Docker 客户端与 Docker 服务器进行交互,Docker服务端负责构建、运行和分发 Docker 镜像。
  Docker 客户端和服务端可以运行在一台机器上,也可以通过 RESTful 、 Stock 或网络接口与远程 Docker 服务端进行通信。 
          技术图片

  这张图展示了 Docker 客户端、服务端和 Docker 仓库(即 Docker Hub 和 Docker Cloud ),默认情况下 Docker 会在 Docker 中央仓库寻找镜像文件。
  这种利用仓库管理镜像的设计理念类似于 Git ,当然这个仓库是可以通过修改配置来指定的,甚至我们可以创建我们自己的私有仓库。

五、Docker常用命令

  我们可以通过 docker -h 去查看命令的详细的帮助文档。在这里会讲一些日常我们可能会用的比较多的一些命令。 
              技术图片

例如,我们需要拉取一个 Docker 镜像,我们可以用如下命令:

docker pull image_name

image_name 为镜像的名称,而如果我们想从 Docker Hub 上去下载某个镜像,我们可以使用以下命令:

docker pull centos:latest

cento:lastest 是镜像的名称,Docker Daemon 发现本地没有我们需要的镜像,会自动去 Docker Hub 上去下载镜像,下载完成后,该镜像被默认保存到 /var/lib/docker 目录下。
接着我们如果想查看主机下存在多少镜像,我们可以用如下命令:

docker images

我们要想知道当前有哪些容器在运行,我们可以用如下命令:

docker ps -a

-a 是查看当前所有的容器,包括未运行的。我们该如何去对一个容器进行启动,重启和停止呢?
我们可以用如下命令:

docker start container_name/container_id

docker restart container_name/container_id

docker stop container_name/container_id

这个时候我们如果想进入到这个容器中,我们可以使用 attach 命令:

docker attach container_name/container_id

那如果我们想运行这个容器中的镜像的话,并且调用镜像里面的 bash ,我们可以使用如下命令:

docker run -t -i container_name/container_id /bin/bash

那如果这个时候,我们想删除指定镜像的话,由于 Image 被某个 Container 引用(拿来运行),如果不将这个引用的 Container 销毁(删除),那 Image 肯定是不能被删除。
我们首先得先去停止这个容器:

docker ps

docker stop container_name/container_id

然后我们用如下命令去删除这个容器:

docker rm container_name/container_id

然后这个时候我们再去删除这个镜像:

docker rmi image_name

常用的 Docker 相关的命令就讲到这里为止了,我们在后续的文章中还会反复地提到这些命令。

 

参考文献:

https://docs.docker.com/engine/docker-overview/

https://mp.weixin.qq.com/s/9--UJYVJXVr92RCX36R6Vg

 

                                --- END ---

docker入门基础篇(代码片段)

查看docker教学视频,请点击《狂神说java》:https://www.bilibili.com/video/BV1og4y1q7M4?p=1记得投币三连呀~~Docker学习Docker概述Docker安装Docker命令镜像命令容器命令操作命令......Docker镜像容器数据卷DockerFileDocker网络原理Idea整合DockerDockerCompose... 查看详情

docker容器技术基础入门(代码片段)

docker容器技术基础入门容器(Container)传统虚拟化与容器的区别:LinuxNamespacesCGroupsLXCdocker基本概念docker工作方式docker容器编排容器(Container)容器是一种基础工具;泛指任何可以用于容纳其他物品的工具,可以部分或完全封闭... 查看详情

docker容器技术基础入门(代码片段)

docker容器技术基础入门容器(Container)传统虚拟化与容器的区别Linux容器技术LinuxNamespacesCGroupsLXCdocker基本概念docker工作方式docker容器编排容器(Container)容器是一种基础工具;泛指任何可以用于容纳其他物品的工具,可以部分... 查看详情

docker基础实战教程:入门(代码片段)

Docker基础实战教程:入门前言HelloDocker!Docker使用的基本过程Docker使用基本实例拉取镜像获取镜像dockerpull命令背后的工作dockerpull的两个基本实例设置镜像加速器导入导出容器dockerexport和dockersave的区别前言Docker是一个操作系统... 查看详情

docker基础知识-入门篇(代码片段)

1.Docker简介和KVM区别1.1docker的三大理念构建运输运行ps:有点类似于java代码,一次构建到处运行1.2docker结构相关说明:image:和虚拟机的镜像类似container:用镜像创建的实例repository:类似于yum仓库dockerclient:命令行输入的docker命令dockerserv... 查看详情

docker入门教程基础命令(代码片段)

1.配置docker加速器[[email protected]docker]#tee/etc/docker/daemon.json<<-‘EOF‘"registry-mirrors":["https://registry.docker-cn.com"]EOF 1.11启动第一个容器dockerrun-d-p80:80nginxrun创建并运行一个容器-d后台运行 查看详情

docker基础入门安装以及常见命令(代码片段)

1、docker常见命令以及安装知识详解1、docker安装1、安装版本统一:Dockerversion18.03.0-ce,build0520e242、安装方式:使用dockerrepository安装3、sudoapt-getupdate4、InstallpackagestoallowapttousearepositoryoverHTTPSsudoapt-getinstallapt-trans 查看详情

docker基础命令总结(代码片段)

dockerinfo显示docker详细信息dockerpullbusybox拉取镜像dockerpullnginxdockerimagesnginx查看正在运行的镜像dockerrun--namenginx01-d-p8099:80nginx用nginx镜像启动一个容器,命名为nginx01并映射了8099端口这样我们就可以直接访问nginx了:firefox127.0.0.1:8099... 查看详情

docker的基础入门(代码片段)

docker的基本概念docker容器可以理解为在沙盒中运行的进程。这个沙盒包含了该进程运行所必须的资源,包括文件系统、系统类库、shell环境等等。但这个沙盒默认是不会运行任何程序的。你需要在沙盒中运行一个进程来启动某一... 查看详情

docker零基础快速入门(通俗易懂)(代码片段)

...里云博客专家、华为云享专家、网络安全领域优质创作者Docker一、安装Docker二、配置镜像加速器三、Docker服务命令四、Docker镜像命令五、Docker容器命令六、Docker容器数据卷七、Docker部署应用1、部署Tomcat2.1解决页面404问题2.2解决... 查看详情

docker基础知识及入门(代码片段)

什么是Docker?Docker是由dotcloud公司使用golang语言进行开发的,基于Linux内核的cgroup,namespace,以及OverlayFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,... 查看详情

轻松掌握docker使用-基础入门(代码片段)

前言Docker自2013年以来非常火热,很多人也津津乐道于它,网上也很多关于Docker的文章和学习教程。这里我再重新提及“docker的入门使用”无非是想整理一下以前学的知识,方便查阅和用于分享。  在学习Docker使用... 查看详情

轻松掌握docker使用-基础入门(代码片段)

前言Docker自2013年以来非常火热,很多人也津津乐道于它,网上也很多关于Docker的文章和学习教程。这里我再重新提及“docker的入门使用”无非是想整理一下以前学的知识,方便查阅和用于分享。  在学习Docker使用... 查看详情

docker学习总结(60)——docker-compose基础知识回顾总结(代码片段)

一、Docker-Compose的基本介绍Docker-Compose是Docker官方开源的项目,负责实现对Docker容器的快速编排,它是由python编写的。#说下Docker-Compose里的两个基本概念#服务(service):一个应用容器,也就是docker容器,#项目(project):由一组关联的容器组... 查看详情

docker学习总结(60)——docker-compose基础知识回顾总结(代码片段)

一、Docker-Compose的基本介绍Docker-Compose是Docker官方开源的项目,负责实现对Docker容器的快速编排,它是由python编写的。#说下Docker-Compose里的两个基本概念#服务(service):一个应用容器,也就是docker容器,#项目(project):由一组关联的容器组... 查看详情

docker基础入门详解(代码片段)

...问题、软件版本问题等等诸多因素,造成一些问题。Docker技术的出现就是为了解决因部署实施而带来的一系列问题。Docker技术实现了将开发环境、相关软件、配套环境等一系列研发环 查看详情

docker学习总结(77)——初学者最佳docker极速入门指南(代码片段)

...,而容器化则成为中间的必要桥梁。为了更好的理解 Docker 是什么,我们先来讲个讲个故事:我需要盖一个房子,于是我搬石头、砍木头、画图纸、盖房子。一顿操作,终于把这个房子盖好了。 结果,住了一段时间,... 查看详情

docker学习总结(77)——初学者最佳docker极速入门指南(代码片段)

...,而容器化则成为中间的必要桥梁。为了更好的理解 Docker 是什么,我们先来讲个讲个故事:我需要盖一个房子,于是我搬石头、砍木头、画图纸、盖房子。一顿操作,终于把这个房子盖好了。 结果,住了一段时间,... 查看详情