docker 基本介绍

简介: docker 是用 Go 语言实现的开源项目,可以让我们方便的创建和使用容器,docker 将程序以及程序所有的依赖都打包到 docker container,这样你的程序可以在任何环节都会有一致的表现,这里程序运行的依赖也就是容器就好比集装箱,容器所处的操作系统环境就好比货船或港口,程序的表现只和集装箱有关系(容器),和集装箱放在哪个货船或者哪个港口(操作系统)没有关系

一句话总结



dockerfile:类似于“package.json”


Image:类似于”Win7 纯净版.rar“


Container: 一个完整的操作系统


docker 是什么?



docker 是用 Go 语言实现的开源项目,可以让我们方便的创建和使用容器,docker 将程序以及程序所有的依赖都打包到 docker container,这样你的程序可以在任何环节都会有一致的表现,这里程序运行的依赖也就是容器就好比集装箱,容器所处的操作系统环境就好比货船或港口,程序的表现只和集装箱有关系(容器),和集装箱放在哪个货船或者哪个港口(操作系统)没有关系


容器技术只隔离应用程序的运行时环境但容器之间可以共享一个操作系统,这里的运行时环境指的是程序运行依赖的各种库以及配置


注意,容器是一种通用技术,docker 只是其中的一种实现


docker 的优点



  1. 环境隔离


  • docker 实现了资源隔离,实现一台机器运行多个容器互不影响。基于容器来开发、部署、运行应用程序


  1. 更快速地交付部署


  • 使用 docker ,开发者可以利用镜像快速构建一套标准的研发环境,开发完成后,测试和运维人员可以直接通过使用此镜像部署代码


  1. 更高效的资源利用


  • docker 的运行不需要额外的虚拟化管理程序的支持,它是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低


  1. 更易迁移扩展


  • docker 几乎可以在任意平台上运行


  1. 更简单的更新管理


  • 使用 dockerfile,只需要小小的配置修改,就可以代替以往大量的更新工作,并且所有修改都是以增量的方式进行分发和更新,从而实现自动化和高效的容器管理


  1. 重启更快


  • docker 的启动只需要几秒,虚拟机要几分钟


docker 的三个概念


docker 的整个生命周期由三部分组成:镜像(image)+ 容器(constainer)+ 仓库(repository)


每台宿主机(电脑),下载好了 docker 后,可以生成多个镜像,每个镜像,可以创建多个容器。发布到仓库时,以镜像为单位。可以理解成:一个容器就是一个独立的虚拟操作系统,互不影响,而镜像就是这个操作系统的安装包。想要生成一个容器,就要安装包(镜像)生成一次,这就是 Docker 的核心概念


镜像(Image)


类似于虚拟机上的镜像,是一个包含有文件系统的面向 docker 引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个 Ubuntu 镜像就是一个包含 Ubuntu 操作系统环境的模板(安装包),同理在该镜像上装上 Apache 软件,就可以称为 Apache 镜像


容器(Container)


类似于一个轻量级的沙盒,可以将其看作一个极简的 Linux 系统环境(包括 root 权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker 引擎利用容器来运行,隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是相互隔离的,互不影响。


注意:镜像本身是只读的,容器从镜像启动时,Docker 在镜像的上层创建一个可写层,镜像本身不变。


仓库(Repository)


类似于代码仓库,这里是镜像仓库,是 Docker 用来集中存放镜像文件的地方。


注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用 tag 进行区分,比如 Ubuntu 仓库存放有多个版本(12.04、14.04 等)的 Ubuntu 镜像


传统的虚拟机与容器对比



image.png

虚拟机和容器


可以看出,传统的虚拟机是每开一个虚拟机,相当于运行一个系统,这种是非常占用系统资源的,但容器(以 docker 为例)。也起到了应用之间的隔离效果


它的底层是通过 namespace(命名空间)和 control groups 来实现


其本质就是将重复的资源公有化,让资源分配更加合理


这样做除了资源分配合理外,还能做到应用程序的环境统一化


image.png

repository、image和container


基于 docker 的开发过程



开发者通过 dockerfile 生成(build)一个镜像(image),通过 docker run ... 生成一个容器(constainer),可以把这个镜像推送至远程仓库上(docker push),既可以供别人下载(docker pull)再 run 生成容器。而一些环境变量可以写进 dockerfile 中,这样就保持了环境的一致性,可移植到任何服务器上


技术实现原理



namespace 解决的问题是环境隔离问题


cgroup 解决计算机资源使用上的隔离


架构图



image.png

docker架构图


docker 是如何工作的



docker 使用的是常见的 CS 架构,也就是 client-server 模式,docker client 负责处理用户输入的各种命令,比如 docker build、docker run,真正工作的其实是 server,也就是 docker daemon(守护进程),值得注意的是,docker client 和 docker daemon 可以运行在同一台机器上


我们用几个命令来解释下 docker 工作流程:


docker build


当我们写完 dockerfile 交给 docker“编译”时使用这个命令,那么 client 在接收到请求后转发给 docker daemon,接着 docker daemon 根据 dockerfile 创建出“可执行程序”image


image.png

docker build


docker run


有了“可执行程序”image 后就可以运行程序了,接下来使用命令 docker run,docker daemon 接收到该命令后找到具体的 image,然后加载到内存可以执行,image 执行起来就是所谓的 container


image.png

docker run


docker pull


其实 docker build 和 docker run 是两个最核心的命令,会用这两个命令基本上 docker 就可以用起来,剩下的就是一些补充。


docker pull 是什么意思,学过 git 的同学都知道有 git pull,从远端仓库拉数据,你可以将你的 image 放到 docker hub 上,我们使用 docker pull,就是从 docker hub 上下载 image


这个命令的实现很简单,用户通过 docker client 发送命令,docker daemon 接受到命令后向 docker registry 发送 image 下载请求,下载后存放在本地,这样我们就可以使用 image 了


image.png

docker pull


相关文章
|
运维 Docker 容器
docker学习日记(一):Docker基本介绍
1.比较Docker和虚拟技术的不同: 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件 容器内的应用直接运行在宿主机的内容,容器是没有自己的内核,也没有虚拟我们的硬件,所以就轻便了 每个容器是相互隔离,每个容器内部都有一个属于自己的文件系统,互不影响。
65 0
|
应用服务中间件 Linux nginx
三天入门 Docker - 第二天:Dockerfile 基本介绍与使用
Dockerile 是由一组指令组成的文件,其中每条指令对应Linux中的一条命令,并且支持以舂开头的注释行;一般来说,Dockerfile结构大致分为四个部分:基础镜像、维护者信息、镜像操作指令和容器启动时的运行命令。
145 0
三天入门 Docker - 第二天:Dockerfile 基本介绍与使用
|
安全 应用服务中间件 Shell
三天入门 Docker - 第一天:Docker 基本介绍与使用
Docker是一个用于开发、发布和运行应用程序的开放平台。Docker可以将应用程序与基础架构9分离(即不再过于需要底层支持),以便我们可以快速交付软件。使用Docker,我们可以像管理应用程序一样管理基础架构。Docker 官方
209 0
三天入门 Docker - 第一天:Docker 基本介绍与使用
|
运维 安全 Devops
Docker学习重点(1)~docker基本介绍
Docker学习重点(1)~docker基本介绍
140 0
Docker学习重点(1)~docker基本介绍
|
26天前
|
Docker 容器
进入Docker容器中
进入Docker容器中
34 2
|
1月前
|
Java Go 开发者
Docker容器技术简介及其与Go语言的结合点
【2月更文挑战第23天】本文首先概述了Docker容器技术的核心概念和优势,接着探讨了Go语言与Docker容器技术的结合点。通过阐述Docker的轻量级、可移植性和版本控制等特性,以及Go语言在容器化应用中的优势,本文旨在说明两者结合能够实现更高效、灵活的应用开发和部署。
|
1月前
|
Oracle 关系型数据库 数据库
|
6天前
|
存储 运维 监控
构建高效稳定的Docker容器监控体系
【4月更文挑战第18天】 在现代微服务架构中,Docker容器已成为部署和运行应用的标准环境。随之而来的挑战是如何有效监控这些容器的性能与健康状况,确保系统的稳定性和可靠性。本文将探讨构建一个高效稳定的Docker容器监控体系的关键技术和方法,包括日志管理、性能指标收集以及异常检测机制,旨在为运维人员提供实用的指导和建议。
11 0
|
15天前
|
Linux Docker 容器
docker 容器常用命令
docker 容器常用命令
13 0
|
15天前
|
Linux Shell 虚拟化
linux 部署docker容器虚拟化平台(二)--------docker 镜像制作方法
linux 部署docker容器虚拟化平台(二)--------docker 镜像制作方法
26 0