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的各种组件的…

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

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

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

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

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

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

YOLOv5-Backbone模块实现

YOLOv5-Backbone模块实现 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊 电脑系统&#xff1a;Windows11 显卡型号&#xff1a;NVIDIA Quadro P620 语言环境&#xff1a;python 3.9.7 编译器&#xff1a…

软件需求规格说明书文档,系统需求规格说明书下载,软件工程需求规格案例模板参考(word原件)

1 范围 1.1 系统概述 1.2 文档概述 1.3 术语及缩略语 2 引用文档 3 需求 3.1 要求的状态和方式 3.2 系统能力需求 3.3 系统外部接口需求 3.3.1 管理接口 3.3.2 业务接口 3.4 系统内部接口需求 3.5 系统内部数据需求 3.6 适应性需求 3.7 安全性需求 3.8 保密性需求 3.9 环境需求…

Linux - MySQL迁移至一主一从

Linux - MySQL迁移至一主一从 迁移准备安装MySQL ibd文件迁移原服务器操作目标服务器操作 一主一从增量同步异常解决结尾 首先部分单独安装MySQL&#xff0c;请参考Linux - MySQL安装&#xff0c;迁移数据量比较大约400G左右且网络不通故使用文件迁移&#xff0c;需开启一段时间…

29. Three.js案例-自定义平面图形

29. Three.js案例-自定义平面图形 实现效果 知识点 WebGLRenderer WebGLRenderer 是 Three.js 中用于渲染 3D 场景的核心类。它利用 WebGL 技术在浏览器中渲染 3D 图形。 构造器 THREE.WebGLRenderer(parameters : object) 参数类型描述parametersobject可选参数对象&…

大模型运用-Prompt Engineering(提示工程)

什么是提示工程 提示工程 提示工程也叫指令工程&#xff0c;涉及到如何设计、优化和管理这些Prompt&#xff0c;以确保AI模型能够准确、高效地执行用户的指令&#xff0c;如&#xff1a;讲个笑话、java写个排序算法等 使用目的 1.获得具体问题的具体结果。&#xff08;如&…

MTK Android12 更换开机LOGO和开机动画

1、路径&#xff1a; &#xff08;1&#xff09;device/mediatek/system/common/device.mk &#xff08;2&#xff09;vendor/audio-logo/animation/bootanimation.zip &#xff08;3&#xff09;vendor/audio-logo/products/resource-copy.mk &#xff08;4&#xff09;vendo…

嵌入式驱动开发详解16(音频驱动开发)

文章目录 前言WM8960简介I2S协议接口说明 SAI音频接口简介驱动框架简介设备树配置内核使能声卡设置与测试 后续参考文献 前言 该专栏主要是讲解嵌入式相关的驱动开发&#xff0c;但是由于ALSA驱动框架过于复杂&#xff0c;实现音频编解码芯片的驱动不是一个人能完成的&#xf…

learn-(Uni-app)输入框u-search父子组件与input输入框(防抖与搜索触发)

1.父子组件u-search &#xff08;1&#xff09;父组件 <!-- 父组件 --> <template> <div><searchBar change"change" search"search"></searchBar> </div> </template> <script> // 子组件搜索 import…

计算机进制的介绍

一.进制介绍 对于整数&#xff0c;有四种表示方式: 1&#xff09;二进制:0,1&#xff0c;满2进1。 在golang中&#xff0c;不能直接使用二进制来表示一个整数&#xff0c;它沿用了c的特点。 参考:Go语言标准库文档中文版 | Go语言中文网 | Golang中文社区 | Golang中国 //赋值…

Transformers参数高效微调之LoRA

简介 LoRA: Low-Rank Adaptation of Large Language Models是微软研究人员为处理微调大语言模型的问题而引入的一项新技术。具有数十亿个参数的强大模型&#xff08;例如 GPT-3&#xff09;为了适应特定任务或领域而进行微调的成本非常高。LoRA 建议冻结预先训练的模型权重并注…