当前位置: 首页 > article >正文

docker学习笔记-初步接触

0. 什么是容器?

菜鸟教程《Docker教程》是这样说的:

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。


Docker官方是这样描述的:

容器是一个标准的软件单元,它将代码及其所有依赖关系打包,以便应用程序从一个计算环境快速可靠地运行到另一个计算环境。Docker容器映像是一个轻量级,独立的可执行软件包,包含运行应用程序所需的一切:代码,运行时,系统工具,系统库和设置。

容器映像在运行时成为容器,在Docker容器的中,映像在Docker Engine上运行时成为容器。适用于基于Linux和Windows的应用程序,无论基础架构如何,容器化软件都将始终运行相同。容器将软件与其环境隔离开来,并确保它可以统一运行,尽管开发和分段之间存在差异。

在Docker Engine上运行的Docker容器:

  • 标准: Docker创建了容器的行业标准,因此它们可以随处携带(高兼容性)
  • 轻量级:容器共享机器的操作系统内核,因此不需要每个应用程序的操作系统,从而提高服务器效率并降低服务器和许可成本
  • 安全:应用程序在容器中更安全,Docker提供业界最强大的默认隔离功能

Docker创建了简单的工具和通用打包方法,将所有应用程序依赖项捆绑在一个容器中,然后在Docker Engine上运行。Docker Engine使容器化应用程序能够在任何基础架构上一致地运行,为开发人员和运营团队解决“依赖性问题”,并消除“它在我的笔记本电脑上工作!”问题。


如果官方的这一段描述略显深奥,我想一张图可能会帮助我们的理解:

docker与VM对比图

这张图右边是一台主机安装多个虚拟机的情况:在同一台主机上(图中绿色部分,意为基础设施,在实际上代表了基础硬件/主机的操作系统),基于一个管理程序(虚拟化技术,负责虚拟机的调度、指令转换、资源管理等工作),不同虚拟机安装不同的操作系统,运行不同的应用程序,提供不同服务。最终实现了将一台服务器转换成了多台服务器。

图左边是docker容器的分层结构。容器是应用层的抽象,如上左图中的每一个应用程序都是一个容器,容器将代码和依赖关系抽象画,将代码和依赖关系打包在一起,基于docker,多个容器可以在同一台机器上运行,与其他容器共享操作系统内核,但是相互独立运行。

以下为暂时的个人理解:

简单的说,docker容器就是虚拟机的一个简化版本,在系统层次实现虚拟化,将每个应用程序和依赖关系都打包成为镜像。在部署时,docker给他分配独立的运行环境并提供其需要的依赖。

Container - docker glossary

docker容器是docker映像的运行时实例

一个docker容器包括:

  • 一个docker映像
  • 一个执行环境
  • 一个标准指令集合

1. docker基础

docker概念

docker是一个在容器中进行开发、部署和运行应用的平台。使用linux容器部署应用被称为“容器化(containerization)”。容器技术不是新兴技术,可以被用于简单的部署应用。

containerization: 容器化技术。现实中指的是将大量的商品包装到大型标准化容器中(即现实中的集装箱)。容器化技术与实际类似,将程序及其依赖封装为一个单独的集装箱,实现彼此之间相互独立的开发、部署和运行。

virtualization: 虚拟化技术,主要指将硬件资源进行虚拟化,实现动态调度和动态分配,表达出另一个抽象计算平台。这里的资源包括有:计算资源(cpu),存储资源(RAM, ROM),网络资源等。

容器化技术是一种虚拟化策略,是传统的基于管理程序的虚拟化的替代方案。基于容器的虚拟化技术知识在操作系统级别创建的单独的容器

容器化技术的优点:
  • 弹性:几乎所有复杂的应用程序可以被容器化
  • 轻量级:容器共同利用主机的内核
  • 可交替:可以即使部署和更新
  • 便携:可以本地构建、云端部署,或者在任何地方运行。
  • 可分发:可以增加或自动分发容器副本
  • 可堆叠:可以即时纵向堆叠服务

laurel-docker-containers

我一直认为漫画是一个比较好的学习方式。上图为docker官方文档中的一副漫画,包含docker的特性。我的理解也不全,希望有什么发现可以评论或联系我交流下。以下介绍我的一些理解。

  1. 左下角,集装箱中的乌龟独立拥有工作环境,且配置齐全,说明容器的弹性和独立性。两个乌龟之间通过纸杯电话交流,说明独立的两个环境之间可以完成通信。
  2. 中间下边,一只企鹅正在根据货单检查集装箱。企鹅代表着linux系统环境,意味着linux系统环境下可以接收docker容器,表达docker的便携性。
  3. 右边中间,有一群集装箱摞起来,表现docker的可堆叠特性
  4. 在集装箱上面,塔吊吊起了一个容器,章鱼🐙在将多个docker向容器堆上防止,表现docker可交替特性(可以及时部署和更新)
  5. 右上角,右边的那一艘船上搭载有很多容器,正如一台主机上可以搭载多个容器,表现docker的轻量级特性(共用内核)。
  6. 左边,有一个螃蟹正在将加密后封装好的容器放在车上,右边驶来一辆火车(看起来是高铁,标志我不太了解),远端也有船在运输容器,说明docker容器具有便携性和可分发特性。
  7. 左边仓库门上,有一个DevOps的横幅,devops是Development和Operations的组合词,代表开发人员和运维人员之间的合作。使用容器技术是自动化运维的技术之一,有助于开发和运维团队的合作,提升沟通效率,最终提升交付速度。
映像(Images)和容器(Containers)

当运行一个映像时,一个容器被部署。映像是一个可执行的包,包括了运行一个应用所需要的全部资源——代码、依赖库,环境变量和配置文件。

容器是一个映像的运行时实例,当执行映像的时候,映像被存储于内存中,成为带有状态的映像或一个用户进程。可以通过docker ps命令查看正在运行的容器,就像在linux系统中一样(linux中,ps为查看正在执行的进程)

容器(Container)和虚拟机(VM)

容器运行在原生linux中运行,与其他容器共享主机内核。容器运行一个独立的进程,不会大量的占用内存。

Container_diff_docker

不同的是,虚拟机(VM)使用虚拟化技术(hypervisor),通过虚拟访问主机资源运行访问’guest’访客操作系统。总之,虚拟机提供了很多资源,比大多数应用需要的都多。

https://img2018.cnblogs.com/blog/1543498/201909/1543498-20190919164017021-244412583.png

docker 基础命令

## Test Docker 
docker run hello world

## List Docker CLI commands
docker
docker container --help

## Display Docker version and info
docker --version
docker version
docker info

## Execute Docker image
docker run hello-world

## List Docker images
docker image ls

## List Docker containers (running, all, all in quiet mode)
docker container ls
docker container ls --all
docker container ls -aq

http://www.kler.cn/a/487861.html

相关文章:

  • openGauss系列 --启动和停止服务器
  • Cognitive architecture 又是个什么东东?
  • 备忘录记事工具 四款好用的电脑备忘录记事本分享
  • Vue.js组件开发-实现滚动加载下一页
  • Vue3(elementPlus) el-table替换/隐藏行箭头,点击整行展开
  • Flutter:打包apk,安卓版本更新(二)
  • 广芯电子推出BCT8933/BCT8937S/BCT89317/BCT89318 手机外放解决方案
  • [Transformer] The Structure of GPT, Generative Pretrained Transformer
  • REVERSE-COMPETITION-CCSSSC-2025
  • 朝天椒USB服务器在银泰证券虚拟化超融合场景的应用案例
  • Hadoop集群之间实现免密登录
  • ThinkPHP 8高效构建Web应用-响应处理
  • MyBatis 注解使用指南
  • 关于内网外网,ABC类地址,子网掩码划分
  • 【git】-初始git
  • 机器学习免费使用的数据集及网站链接
  • 获取Telegram的用户IP地址
  • 推荐一个边玩游戏边学编程网站
  • 【Git】配置相关操作
  • RS-232与RS-485介绍
  • kubernetes第七天
  • 如何将 DotNetFramework 项目打包成 NuGet 包并发布
  • 埋地碳钢设备间 雨水回用一体化设备 微型雨水处理站
  • micro-app【微前端系列教程】通信
  • 【Git】修改已提交人的用户名和邮箱
  • 智能工厂的设计软件 应用场景的一个例子: 为AI聊天工具添加一个知识系统 之21 项目主页:基于资源的交互系统--以RESTful 风格设计构建 聊天窗口