【云原生 | Docker】Docker核心概念 应用上手最佳流程

在这里插入图片描述

🤵‍♂️ 个人主页: @AI_magician
📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。
👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱‍🏍
🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩,但一直很感兴趣!希望大佬带带)

在这里插入图片描述

该文章收录专栏
[✨— 《深入解析机器学习:从原理到应用的全面指南》 —✨]

核心概念

Docker 是一个开源的容器化平台,它在过去几年中取得了巨大的成功和广泛的应用。以下是 Docker 的发展历史和其使用的编程语言 Go 的相关信息:

  1. Docker 的起源:
    Docker 最初由 Solomon Hykes 在2013年创建,并在 Docker 公司(前身为 dotCloud)的支持下进行开发和推广。Docker 的设计目标是提供一种轻量级、便携式的容器化解决方案,以简化应用程序的部署和管理。

  2. Docker 的早期版本:
    Docker 最早的版本是基于 Linux 容器(LXC)技术开发的,它利用 Linux 内核的容器功能,实现了应用程序的隔离和资源管理。不过,这种实现方式存在一些限制和不足,因此 Docker 团队决定在 Docker 0.9 版本中引入自己的容器引擎,即 Docker Engine(后来被称为 Docker Daemon)。

  3. Go 语言的选择:
    Docker 团队选择使用 Go 作为开发 Docker 引擎的编程语言。Go 是由 Google 开发的一种静态类型、编译型语言,具有高效、简洁和并发编程的特性。选择 Go 作为开发语言使得 Docker 具备了良好的性能、可移植性和易于扩展的特点。

  4. Docker 的快速发展:
    Docker 在推出之后迅速获得了开发者和运维人员的关注,并在容器领域迅速崛起。Docker 引入了容器镜像和容器注册表的概念,使得应用程序的打包、分发和部署变得更加简单和可靠。Docker 提供了丰富的命令行工具和 API,以及各种生态系统工具和服务,进一步扩展了其功能和应用场景。

  5. 开源和社区发展:
    Docker 从一开始就采用了开源模式,并建立了一个活跃的社区。这使得开发者和用户能够贡献代码、提出问题、分享经验,并为 Docker 的发展做出贡献。Docker 社区不断推动技术的创新和改进,推出了许多有用的工具和项目,如 Docker Compose、Docker Swarm 和 Kubernetes 等。

  6. Docker 的生态系统:
    Docker 生态系统已经变得非常庞大和丰富,涵盖了各种工具、服务和项目。除了核心的 Docker 引擎和工具链外,还有许多第三方软件和服务提供商构建在 Docker 之上,为用户提供了更多的功能和集成选项。

以下是 Docker 的一些关键概念和组件:

  1. 镜像(Image):Docker 镜像是一个只读的模板,包含了运行应用程序所需的一切,包括代码、运行时环境、库文件、依赖项等。镜像可以用作创建容器的基础。

  2. 容器(Container):容器是从镜像创建的运行实例。每个容器都是一个隔离的环境,包含了运行应用程序所需的所有内容。容器可以被启动、停止、删除,并且可以与其他容器进行通信。

  3. Docker 引擎(Docker Engine):Docker 引擎是 Docker 的核心组件,负责管理容器的生命周期,包括创建、运行、停止和删除容器。它还提供了与 Docker 守护进程通信的 API。

  4. Docker Compose:Docker Compose 是一个用于定义和运行多个容器的工具。通过编写一个 YAML 文件来定义应用程序的服务、网络和卷等配置,然后使用 Docker Compose 命令来启动、停止和管理整个应用程序的容器群。

  5. Docker Hub:Docker Hub 是一个公共的 Docker 镜像仓库,可以在其中找到大量的官方和社区维护的镜像。开发者可以将自己的镜像推送到 Docker Hub 中,也可以从中拉取所需的镜像。

Docker 的优势包括:

  • 轻量级和可移植性:Docker 容器相对较小且独立于宿主操作系统,可以在不同的环境中以相同的方式运行,提供了良好的可移植性。
  • 简化部署和扩展:通过 Docker 镜像,开发者可以轻松地部署和扩展应用程序,无需担心环境差异和依赖项问题。
  • 高效资源利用:Docker 利用操作系统层的虚拟化技术,可以在单个主机上运行多个容器,并共享主机的内核,提供了更高的资源利用率。
  • 简化开发流程:开发者可以在容器中构建和测试应用程序,并将容器作为开发环境进行交付,确保开发和生产环境的一致性。

Dockfile概念

Dockerfile 是用于定义和构建 Docker 镜像的文本文件。它包含一系列指令,用于描述如何构建镜像、安装依赖、配置环境等。

以下是一些常见的 Dockerfile 指令和示例用法:

  1. FROM:指定基础镜像,即构建新镜像所基于的镜像。例如,使用 FROM ubuntu:latest 指定以最新版本的 Ubuntu 作为基础镜像。

  2. RUN:在镜像中执行命令。可以用于安装软件包、运行脚本等。例如,使用 RUN apt-get update && apt-get install -y package 安装软件包。

  3. COPY 和 ADD:用于将文件或目录复制到镜像中。COPY 用于复制本地文件或目录到镜像,而 ADD 不仅可以复制文件和目录,还可以解压压缩文件和远程 URL。例如,使用 COPY app.py /app/ 将本地的 app.py 文件复制到镜像的 /app/ 目录下。

  4. WORKDIR:设置工作目录,指定后续命令的工作路径。例如,使用 WORKDIR /app 设置工作目录为 /app。

  5. ENV:设置环境变量。可以用于配置容器的运行环境。例如,使用 ENV PATH=/usr/local/bin:$PATH 设置环境变量 PATH。

  6. EXPOSE:声明容器运行时需要监听的端口。例如,使用 EXPOSE 80 声明容器将监听80端口。

  7. CMD 和 ENTRYPOINT:设置容器启动时要执行的命令。CMD 可以设置默认的容器启动命令,而 ENTRYPOINT 则可以定义容器的入口点。例如,使用 CMD ["python", "app.py"] 设置容器默认执行的命令为运行 app.py。

通过编写 Dockerfile,开发者可以定义应用程序的构建过程、运行环境和启动命令等,使得应用程序可以在不同的 Docker 环境中以相同的方式运行。使用 Dockerfile,可以实现快速、可重复和可扩展的镜像构建过程。

接着通过 Dockerfile 构建镜像并运行容器的流程如下:

  1. 编写 Dockerfile:创建一个文本文件,并命名为 Dockerfile。在 Dockerfile 中,按照一定的语法规则编写一系列指令,描述镜像的构建过程、运行环境和启动命令等。

  2. 构建镜像:使用 docker build 命令来构建镜像。在命令行中进入 Dockerfile 所在目录,并执行以下命令:

    docker build -t <image_name> .
    ```其中,`<image_name>` 是你要为镜像指定的名称,可以根据需要自定义。`.` 表示当前目录,即 Dockerfile 所在的目录。在构建过程中,Docker 将按照 Dockerfile 中的指令逐步执行,并在每个指令的基础上创建一个镜像层。每个镜像层都包含了该指令所引入的更改和新增内容。
    
  3. 运行容器:构建完成后,可以使用 docker run 命令来运行容器,并基于构建的镜像创建新的容器实例。执行以下命令:

    docker run <image_name>
    `````<image_name>` 是你构建的镜像的名称。运行该命令后,Docker 将创建一个新的容器实例,并在容器内部执行 Dockerfile 中指定的启动命令。
    

此外,还有许多其他的 Dockerfile 指令和用法,可以根据具体需求进行深入学习和探索。Docker 官方提供了详细的文档和示例,供开发者参考和学习使用。

Docker-compose

在Docker中使用./mysql/data:/var/lib/mysql进行挂载,可以将MySQL数据目录挂载到主机上的特定目录。这样做的好处是,即使容器被删除或重新创建,MySQL的数据仍然保留在主机上,从而实现数据的持久化。

当您使用这种方式挂载MySQL数据目录时,表数据应该是可以同步的。因为表数据实际上存储在MySQL数据目录中的文件中,而挂载操作将主机上的目录与容器中的目录关联起来。因此,对于MySQL容器中的表数据的更改将在主机上的相应文件中进行反映,反之亦然。

但是,需要注意以下几点:

  1. 确保MySQL容器和主机上的目录结构一致。如果MySQL容器内部的数据目录结构与主机上的数据目录结构不匹配,可能会导致数据同步的问题。

  2. 确保MySQL容器和主机上的目录权限正确设置。MySQL容器需要对数据目录具有适当的读写权限,以便能够正确读取和写入数据。

  3. 在将数据目录挂载到主机上之前,确保MySQL容器已经停止运行,以避免对数据目录的并发访问问题。

总的来说,通过将MySQL数据目录挂载到主机上,您可以实现数据的持久化,并且表数据应该可以在容器和主机之间同步。但是,在实际操作中,仍然需要注意目录结构和权限等方面的设置,以确保数据的正确同步和访问。

在这里插入图片描述

						  🤞到这里,如果还有什么疑问🤞🎩欢迎私信博主问题哦,博主会尽自己能力为你解答疑惑的!🎩🥳如果对你有帮助,你的赞是对博主最大的支持!!🥳

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

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

相关文章

面试题:Java Switch 是如何支持 String 的,为什么不支持 long

目录 前言一、结论二、枚举类型是咋变成 int 类型的&#xff1f;三、String 类型是咋变成 int 类型的&#xff1f;四、它们的包装类型支持吗&#xff1f; 前言 我们知道Java Switch 支持byte、short、int类型&#xff0c;在JDK 1.5 时&#xff0c;支持了枚举类型&#xff0c;在…

STC15F100E单片机模拟串口

文章目录 一、芯片简介二、开发环境三、软件模拟串口参考 一、芯片简介 STC15F100系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机&#xff0c;新一代8051单片机&#xff0c;指令代码完全兼容传统8051&#xff0c;但是速度快6-12倍。 内部集成R/C时钟&#xff0c;5MHz…

25、pytest的测试报告插件allure

allure简介 在这里&#xff0c;你将找到使用allure创建、定制和理解测试报告所需的一切。开始让你的测试沟通更清晰&#xff0c;更有影响力。 Allure Report是一个实用程序&#xff0c;它处理由兼容的测试框架收集的测试结果并生成HTML报告。 安装allure 1、确保安装了Java…

【SSM源码】基于JAVA的高校竞赛和考级查询系统

该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等学习内容。 目录 一、项目介绍&#xff1a; 二、文档学习资料&#xff1a; 三、模块截图&#xff1a; 四、开发技术与运行环境&#xff1a; 五、代码展示&#xff1a; 六、数据库表截图&#xff1a…

MISRA C 2012 标准浅析

MISRA(The Motor Industry Software Reliability Association)&#xff0c;汽车工业软件可靠性联会&#xff1b; 1994年&#xff0c;英国成立。致力于协助汽车厂商开发安全可靠的软件的跨国协会&#xff0c;其成员包括&#xff1a;AB汽车电子、罗孚汽车、宾利汽车、福特汽车、捷…

js实现动态添加删除表格数据的两种方式

目录 1、通过创建节点实现 css代码 html代码 js代码 完整代码 2、通过渲染表格&#xff0c;事件委托实现 css代码 html代码 js代码 完整代码 效果图 1、通过创建节点实现 思路&#xff1a;先把整体的html结构写出来&#xff0c;table表格分为3部分&#xff0c;其中t…

HNU-电路与电子学-2021期末A卷(不含解析)

【写在前面】 电路与电子学好像是从2020级开设的课程&#xff0c;故实际上目前只有2020与2021两个年级考过期末考试。 本份卷子的参考性很高&#xff0c;这是2020级的期末考卷。题目都是很典型的&#xff0c;每一道题都值得仔细研究透。 特别注意&#xff1a;看得懂答案跟写得…

逆水行舟!浅谈24届双非本科秋招

逆水行舟&#xff01;浅谈24届双非本科的秋招 逆水行舟&#xff01;浅谈24届双非本科的秋招0、背景 -- 写下本文的初衷1、实习 -- 秋招的预备战役1.1 科大讯飞1.2 三七互娱 2、秋招 -- 一场没有硝烟的战争3、总结 -- 做好自己想做的事情 0、背景 – 写下本文的初衷 如题&#…

常用汇编指令集

寄存器 如上是OD展示的寄存器&#xff0c;逐条说明常用的寄存器和标志位含义&#xff1a; EIP&#xff1a;寄存器指向即将要执行的指令的地址&#xff08;EIP中的地址&#xff0c;就是下一步要执行指令的地址&#xff09; ESP&#xff1a;里面的内容永远指向堆栈的最顶端 EAX&…

一文详解集合竞价,建议收藏!

集合竞价是指对在规定的一段时间内接受买卖申报一次性集中撮合的竞价方式。沪深市场9:15-9:25及14:57-15:00为集合竞价的时间段。集合竞价的所有交易以同一个价格成交。集合竞价的成交价确定原则是&#xff1a; 1、可实现最大成交量的价格&#xff1b; 2、高于该价格的买入申…

mac苹果笔记本电脑如何强力删除卸载app软件?

苹果电脑怎样删除app&#xff1f;不是把app移到废纸篓就行了吗&#xff0c;十分简单呢&#xff01; 其实不然&#xff0c;因为在Mac电脑上&#xff0c;删除应用程序只是删除了应用程序的主要组件。大多数时候&#xff0c;系统会有一个相当长的目录&#xff0c;包含所有与应用程…

Java三种代理模式:静态代理、动态代理和CGLIB代理

Java三种代理模式&#xff1a;静态代理、动态代理和CGLIB代理 代理模式 代理模式是23种设计模式种的一种。代理模式是一种结构型设计模式&#xff0c;它允许为其他对象提供一个替代品或占位符&#xff0c;以控制对这个对象的访问。代理模式可以在不修改被代理对象的基础上&am…

C语言之多重循环

目录 二重循环 用break语句强制结束循环 显示图形 绘制等腰直角三角形 多重循环 continue语句 将循环语句的循环体作为循环语句&#xff0c;就可以进行二重、三重循环。这样的循环称为多重循环。 我们先来了解二重循环 二重循环 在之前我们学习到的循环中的程序都比较简…

Java---异常

文章目录 1. 异常概述2. try...catch3. Throwable成员方法4. 编译时异常和运行时异常区别5. 异常处理之throws6. 自定义异常7. throws和throw的区别 1. 异常概述 1. 异常&#xff1a;就是程序中出现了不正常的情况。 2. Error&#xff1a;严重问题&#xff0c;不需要处理。Exce…

【带头学C++】----- 九、类和对象 ---- 9.4 拷贝构造函数、赋值

目录 9.4 拷贝构造函数、赋值 9.4.1 定义拷贝构造函数 9.4.2 拷贝构造和无参构造、有参构造的关系 9.4.3 拷贝构造的几种调用形式 1、旧对象给新对象初始化&#xff0c;调用拷贝构造 2、给对象取别名不会调用拷贝构造 3、普通对象作为函数参数&#xff0c;调用函数时会发…

STM32-GPIO编程

一、GPIO 1.1 基本概念 GPIO&#xff08;General-purpose input/output&#xff09;通用输入输出接口 --GP 通用 --I input输入 --o output输出 通用输入输出接口GPIO是嵌入式系统、单片机开发过程中最常用的接口&#xff0c;用户可以通过编程灵活的对接口进行控制&#xff0c;…

ArcGIS提取DEM中的山脉范围

已知数据&#xff1a;DEM文件ASTGTM_N00E118E.img 使用软件&#xff1a;ArcMap 要求&#xff1a;对数据进行操作&#xff0c;提取数据文件中的山脉范围 下面开始操作&#xff1a; 1、 打开ArcMap将DEM文件ASTGTM_N00E118E.img添加到数据框。 2、 接下来我们打开spatial ana…

虚幻学习笔记8—蓝图操作其他虚幻模块

一、前言 蓝图不仅可以相互之间操作和通信&#xff0c;其他的资源、模块也有操作和通信的方法。文本主要针对蓝图和材质、Niagara、编辑器的通信进行讲解。 二、实现 2.1、蓝图和材质 1&#xff09;首先&#xff0c;在材质蓝图中按住“4鼠标左键”创建一个参数为四维向量的参…

Kafka中的auto-offset-reset配置

Kafka这个服务在启动时会依赖于Zookeeper&#xff0c;Kafka相关的部分数据也会存储在Zookeeper中。如果kafka或者Zookeeper中存在脏数据的话&#xff08;即错误数据&#xff09;&#xff0c;这个时候虽然生产者可以正常生产消息&#xff0c;但是消费者会出现无法正常消费消息的…

【小工具分享】分享一个小工具---可视化数据结构 (初学者建议收藏)

工具链接&#xff1a; 可视化数据结构 这里支持大量数据结构地演示&#xff0c;相当全面&#xff0c;对于初学数据结构或者想更直观感受某个数据结构地实现有很大帮助&#xff0c;能直观的看到该数据结构的增删改查&#xff0c;帮助我们理解某一数据结构的性能~ 下面我演示一下…