Docker概述与基础入门

1. 什么是Docker?

Docker 是一个开源的平台,用于自动化应用程序的构建、部署和管理。它允许开发人员通过将应用程序及其依赖项打包成容器镜像,从而确保应用可以在任何环境中一致地运行。Docker 容器是轻量级的、可移植的、且具有高度隔离性的虚拟化环境。它们是运行在操作系统级别的,不同于传统的虚拟机(VM),Docker 容器共享主机的内核,因此具有更低的资源开销。

Docker的核心概念:
  • 镜像(Image):Docker 镜像是一个只读模板,用于创建容器。镜像包含了应用程序的运行环境、依赖项和配置文件。每个镜像都是由多个层次组成的,每一层通常都是基于另一个镜像构建的。镜像是创建容器的蓝图,可以通过 Dockerfile 来定义。

  • 容器(Container):容器是镜像的一个运行实例。容器包含了应用程序及其运行环境,并在隔离的环境中运行。每个容器在运行时都会有自己的文件系统、网络设置和进程。

  • Docker引擎(Docker Engine):Docker引擎是一个客户端-服务器架构的应用程序,它负责构建、运行、管理容器,并与Docker守护进程交互。Docker引擎包括两个主要组件:

    • 守护进程(Docker Daemon):负责管理容器的生命周期,包括创建、运行、停止和删除容器。
    • 客户端(Docker CLI):用户与 Docker 交互的命令行工具。用户通过客户端向 Docker 守护进程发送指令。
为什么选择Docker?
  • 跨平台性:Docker容器可以在任何支持Docker的操作系统上运行,无论是Linux、Windows还是macOS。这使得开发人员能够在本地开发并且能够保证应用程序能够在生产环境中无缝运行。
  • 快速启动:容器启动速度远远快于传统虚拟机,因为它们共享主机操作系统的内核,而不需要启动整个操作系统。
  • 隔离性:每个容器运行在独立的用户空间,互不干扰。这使得多个应用程序能够在同一台机器上运行,而不会相互影响。
  • 资源效率:Docker容器的资源开销较小,不需要虚拟化整个操作系统,因此比虚拟机更轻量级。
2. Docker的工作原理:容器与镜像

Docker的工作原理是基于容器化的理念,而容器本质上是操作系统层级的虚拟化。容器通过共享宿主操作系统的内核来提供隔离,避免了虚拟机所需的额外硬件资源,因此更为高效。

镜像(Image)与容器(Container)的关系:
  • 镜像 是静态的、不可变的,通常由多个层组成。每一层代表对应用的某个变更(如安装软件、修改配置等)。镜像是通过Dockerfile构建的。
  • 容器 是镜像的一个运行实例。容器在启动时从镜像创建,容器拥有独立的文件系统、网络、进程空间和资源限制,但它们与主机操作系统共享内核。容器在运行时可以修改文件系统,但修改不会影响镜像本身,容器退出后,文件系统会被清理。
Docker的工作流程:
  1. 创建镜像:使用Dockerfile定义应用程序的环境,构建镜像。Dockerfile是一个文本文件,包含了构建镜像的所有指令。你可以使用命令如docker build来构建镜像。

  2. 推送镜像到仓库:镜像构建完成后,你可以将其推送到 Docker Hub 或私有的 Docker 镜像仓库,便于其他人或其他环境使用。

  3. 创建容器:使用镜像创建容器。通过docker run命令,Docker会从镜像中创建一个容器实例,分配网络资源和文件系统,并启动应用程序。

  4. 运行与管理容器:容器可以启动、停止、重启、删除。docker startdocker stopdocker restartdocker rm等命令都用于容器的管理。

3. Docker与传统虚拟化的区别

传统的虚拟化技术如虚拟机(VM)通过在物理硬件上运行多个完整的操作系统来实现隔离。每个虚拟机都包含了完整的操作系统、应用程序以及必要的库文件,虚拟机之间是完全独立的。而Docker容器通过在操作系统层面进行隔离,多个容器共享宿主机的操作系统内核,因此比虚拟机更加轻量。

对比 Docker 与 虚拟机:
特性Docker虚拟机(VM)
资源使用较少,容器共享宿主机内核高,每个虚拟机需要独立的操作系统
启动时间几秒钟数分钟
性能接近原生性能相对较低,因需要虚拟化整个操作系统
隔离性容器共享操作系统内核,提供进程和文件系统的隔离完全隔离,每个虚拟机有自己的内核
资源管理通过cgroups与namespaces管理资源通过hypervisor管理资源
Docker的优势:
  • 轻量级:由于没有虚拟化操作系统,容器启动和销毁速度非常快。
  • 高效性:容器共享宿主机内核,减少了资源开销。
  • 更强的密度:同一台物理机上,可以运行更多的容器而不影响性能。
4. 安装与配置Docker(Windows、macOS、Linux)

Docker提供了适用于多个操作系统的安装包。无论是在Windows、macOS还是Linux系统上安装Docker,都有各自的安装方法和注意事项。

Windows与macOS安装
  • Windows安装

    • 需要启用Hyper-V(Windows 10 Professional及以上版本支持)。
    • 下载Docker Desktop for Windows,并执行安装程序。
    • 安装完成后,Docker Desktop会自动启动并运行Docker守护进程。
    • 通过命令行执行docker --version检查Docker是否正确安装。
  • macOS安装

    • 在macOS上安装Docker Desktop需要macOS 10.13或更高版本。
    • 下载Docker Desktop for Mac,安装并启动。
    • 安装完成后,可以通过命令行检查Docker是否正常运行。
Linux安装
  • 在Linux上,Docker的安装方法可能会因发行版的不同而有所区别。以Ubuntu为例,安装步骤如下:
    1. 更新包索引:sudo apt-get update
    2. 安装Docker依赖包:sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
    3. 添加Docker官方GPG密钥:curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    4. 添加Docker的APT仓库:sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    5. 安装Docker:sudo apt-get update && sudo apt-get install docker-ce
    6. 启动Docker并设置开机自启:sudo systemctl start docker && sudo systemctl enable docker
    7. 验证安装:docker --version
5. 第一个Docker容器:docker run hello-world

创建第一个Docker容器是验证Docker是否正确安装的重要步骤。执行以下命令:

docker run hello-world

该命令会下载hello-world镜像,并创建一个容器运行它。Docker会打印一条消息,告知你Docker已成功安装并运行。

6. 常用命令概览

了解Docker的基本命令是开发人员的必备技能。以下是一些常用的命令及其用途:

  • docker ps:列出所有正在运行的容器。

    docker ps
  • docker ps -a:列出所有容器(包括停止的容器)。

    docker ps -a
  • docker images:列出本地Docker镜像。

    docker images
  • docker exec:在运行中的容器中执行命令。

    docker exec -it <container_id> /bin/bash

    这个命令允许你进入容器并在其中执行交互式命令。

  • docker stop:停止容器。

    docker stop <container_id>
实践环节:安装Docker Desktop并创建容器
  • 步骤1:安装Docker Desktop(Windows/macOS)
    • 按照上述安装步骤,成功安装并启动Docker Desktop。
  • 步骤2:运行第一个容器
    • 使用docker run hello-world验证Docker是否正常工作。
  • 步骤3:使用docker ps, docker stop, docker rm管理容器
    • 通过docker ps查看当前正在运行的容器。
    • 使用docker stop停止容器。
    • 使用docker rm删除停止的容器。

小结:

在本章节中,我们从Docker的基本概念入手,介绍了容器与虚拟机的区别,理解了Docker的工作原理。我们还学习了如何在Windows、macOS和Linux平台上安装和配置Docker,并通过实际操作运行了第一个Docker容器。接下来,我们将继续深入探讨Docker的实际应用与管理技巧。

关于作者:

15年互联网开发、带过10-20人的团队,多次帮助公司从0到1完成项目开发,在TX等大厂都工作过。当下为退役状态,写此篇文章属个人爱好。本人开发期间收集了很多开发课程等资料,需要可联系我

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/64177.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 探险之旅:第三十六节 - 类型class之密封类Sealed Classes

嗨&#xff0c;探险家们&#xff01;欢迎再次搭乘我们的C#魔法列车&#xff0c;今天我们要去一个神秘又有点“傲娇”的地方——密封类&#xff08;Sealed Classes&#xff09;领地。系好安全带&#xff0c;咱们要深入“密封”的奇妙世界啦&#xff01; 什么是密封类&#xff1…

QTreeView 与 QTreeWidget 例子

1. 先举个例子 1班有3个学生&#xff1a;张三、李四、王五 4个学生属性&#xff1a;语文 数学 英语 性别。 语文 数学 英语使用QDoubleSpinBox* 编辑&#xff0c;范围为0到100,1位小数 性别使用QComboBox* 编辑&#xff0c;选项为&#xff1a;男、女 实现效果&#xff1a; 2…

UE5 C++ Subsystem 和 多线程

一.Subsystem先做一个简单的介绍&#xff0c;其实可以去看大钊的文章有一篇专门讲这个的。 GamePlay框架基础上的一个增强功能&#xff0c;属于GamePlay架构的范围。Subsystems是一套可以定义自动实例化和释放的类的框架。这个框架允许你从5类里选择一个来定义子类(只能在C定义…

Linux 添加spi-nor flash支持

1. spi-nor flash简介 在嵌入式ARM开发过程中通常会使用到spi-nor flash&#xff0c;主要用于固化u-boot镜像以支持spi方式启动系统。目前常用的spi-nor flash有gd25wq128e、w25q128等flash芯片&#xff0c;下述以gd25wq128e为例进行讲解。 2.调试通常遇到的问题 无法识别到…

C# 探险之旅:第三十七节 - 类型class之Object:万物之源的奇妙冒险

嘿&#xff0c;勇敢的探险家们&#xff01;欢迎再次踏上C#的神秘之旅。今天&#xff0c;我们将深入探索一个极其强大又无处不在的“大佬”——Object 类型。想象一下&#xff0c;它就像是C#世界里的“超级英雄祖先”&#xff0c;几乎所有的类型都得叫它一声“老祖宗”。 Objec…

LabVIEW实验站反馈控制系统

开发了一套基于LabVIEW的软X射线磁性圆二色实验站的反馈控制系统。这套系统主要用于实现对实验站高电压的精确控制&#xff0c;从而保持照射在样品上的流强稳定性&#xff0c;为分析样品吸收谱提供可靠基准&#xff0c;同时提供了易用的用户界面和强大的数据存储功能。 项目背景…

aws(学习笔记第十八课) 使用aws cdk(python)进行部署

aws(学习笔记第十八课) 使用aws cdk(python)进行部署 学习内容&#xff1a; 使用aws cdk(python)进行部署整体代码&#xff08;python的通常工程&#xff09;代码动作 1. 使用aws cdk(python)进行部署 aws cdk的整体架构 前面使用了cloudformation进行了json的aws的各种组件的…

FreeBSD vs Linux:哪个开源操作系统更强大

FreeBSD 和 Linux&#xff0c;哪一个更强大&#xff1f;这个问题没那么简单。它们各有春秋&#xff0c;不能一概而论。 来自我们 A-Team Systems 的专家们有数十年这两个系统的使用经验&#xff0c;所以&#xff0c;我们将详细阐述这两个系统的优势和劣势&#xff0c;供你选择…

网络基础 - TCP/IP 五层模型

文章目录 一、OSI 参考模型中各个分层的作用1、应用层2、表示层3、会话层4、传输层5、网络层6、数据链路层7、物理层 二、OSI 参考模型通信处理示例 一、OSI 参考模型中各个分层的作用 1、应用层 2、表示层 负责设备固有数据格式和网络标准数据格式间的转换 实际生活中&#…

C++中的接口继承和实现继承以及多态性与性能的平衡处理

接口继承 接口继承是指子类只继承基类的纯虚函数&#xff0c;即只继承基类的接口&#xff0c;而不继承基类的实现。子类必须实现基类中的所有纯虚函数&#xff0c;否则子类也将成为抽象类。在 C 中&#xff0c;接口继承主要通过抽象类来实现。抽象类是包含至少一个纯虚函数的类…

大数据相关标准——GB/T 38676-2020信息技术 大数据 存储与处理系统功能测试要求(山东省大数据职称考试)

大数据分析应用-初级 第一部分 基础知识 一、大数据法律法规、政策文件、相关标准 二、计算机基础知识 三、信息化基础知识 四、密码学 五、大数据安全 六、数据库系统 七、数据仓库. 第二部分 专业知识 一、大数据技术与应用 二、大数据分析模型 三、数据科学 大数据相关标准…

Mysql基础操作(1)

目录 简介 1. 数据库的创建与删除 1.1 创建数据库 1.2 删除数据库 2. 表的创建与删除 2.1 创建表 2.2 删除表 3. 数据插入 4. 数据查询 4.1 基本查询 4.2 条件查询 4.3 多条件查询 4.4 排序查询 4.5 分页查询 5. 数据更新 6. 数据删除 7. 总结 简介 MySQL 是一…

查看服务器或系统架构(amd64、arm64...)

要确定您的服务器或系统是基于i386、armhf、amd64还是arm64架构&#xff0c;可以通过一系列命令行工具来获取相关信息。以下是具体的方法和步骤&#xff1a; 1. 使用 uname 命令 uname -m 是最常用的方法之一&#xff0c;它可以快速地显示系统的硬件架构。根据输出的不同字符…

MySQL 调优技巧|索引什么时候失效?为什么?

写在前面 优化慢SQL&#xff0c;这是在工作或者面试中都不可避免的问题。这篇文章我们就来讲讲慢SQL的优化的一些方法&#xff01; 1. 升配 最简单的一步就是升配&#xff01;&#xff01;当然在降本增效的当下&#xff0c;很难能将这种单子审批下来了&#xff01; 2. 索引…

有线通信与无线通信技术的深度剖析与比较

有线通信与无线通信技术的深度剖析与比较 摘要&#xff1a; 本文详细阐述了有线通信技术和无线通信技术的原理、特点、应用场景、技术标准以及发展趋势等方面的内容&#xff0c;并对二者进行了深入的比较分析。通过全面探讨&#xff0c;旨在使读者清晰地理解这两种通信技术的差…

ARM/Linux嵌入式面经(五五):未岚大陆

文章目录 0、项目中既有flash又有E2,为什么不只使用一个?问题回答:1、uart通信与i2c通讯的硬件区别;2、说说你理解的pid算法;问题回答3、串口转usb怎么实现的?问题回答:4、软件采集的adc数据有没有滤波;问题回答5、是否使用过boot?你觉得使用boot的注意事项是什么?问…

《封装继承与多态》封装的优势

文章目录 封装在面向对象编程中的优势1. 提高代码的可读性和可维护性2. 提高代码的安全性3. 降低代码的复杂性案例举例 封装在敏捷开发和团队合作中的优势1. 促进敏捷开发2. 促进团队合作案例举例 封装在面向对象编程中的优势 封装是面向对象编程&#xff08;Object-Oriented …

高级Python游戏开发:创建一款多人对战坦克大战

在本教程中,我们将用Python的Pygame库开发一款高级的坦克大战游戏。这款游戏支持多人对战、碰撞检测、子弹射击以及地图障碍生成,适合作为学习Python高级游戏开发的练习项目。 一、游戏功能概述 多人对战模式:玩家可以操作坦克,在同一屏幕上互相攻击。子弹射击:坦克可以发…

【芯片设计- RTL 数字逻辑设计入门 番外篇 7.1 -- 基于ATE的IC测试原理】

文章目录 ATE 测试概述Opens/Shorts测试Leakage测试AC测试转自:漫谈大千世界 漫谈大千世界 2024年10月23日 23:17 湖北 ATE 测试概述 ATE(Automatic Test Equipment)是用于检测集成电路(IC)功能完整性的自动测试设备。它在半导体产业中扮演着至关重要的角色,主要用于检…

WPF+MVVM案例实战与特效(三十九)- 深度剖析一个弧形进度条的实现

文章目录 1、使用 Path 结合 ArcSegment 绘制圆弧1、属性解读2、静态圆弧3、动态圆弧4、运行效果5、圆弧两端点的形状2、总结1、使用 Path 结合 ArcSegment 绘制圆弧 1、属性解读 Path 是 WPF 中的一个标记元素,用于绘制复杂的几何路径形状,而 ArcSegment 用于描述 Path 中…