day-01 Docker

一、docker简介

        Docker 是一种开源的容器化平台,它可以帮助开发人员将应用程序及其依赖项打包成一个独立的、可移植的容器,而无需担心环境差异和依赖问题。通过使用 Docker,您可以更轻松地创建、分发和运行应用程序,无论是在开发、测试还是生产环境中。

        Docker 利用了 Linux 内核的特性,如 cgroups 和命名空间,来提供轻量级、隔离和可移植的容器。每个容器都是一个独立的运行时环境,具有自己的文件系统、进程空间和网络接口。这使得多个容器可以在同一台主机上同时运行,而互相之间不会产生冲突。

        使用 Docker,我们可以通过 Docker 镜像来定义应用程序的运行环境。镜像是一个只读的模板,它包含了运行应用程序所需的所有组件,包括操作系统、软件库和应用程序代码。可以基于现有的镜像构建自己的镜像,也可以将镜像上传到 Docker Hub 或私有的 Docker 仓库进行共享和发布。

除了提供容器化的运行环境,Docker 还提供了一套强大的命令行工具和 API,用于管理和操作容器。您可以使用这些工具来创建、启动、停止、删除和监控容器,以及管理应用程序的网络和存储等方面。

        总而言之,Docker 提供了一种便捷、可靠和高效的方式来打包、交付和运行应用程序,使得开发人员能够更加专注于应用程序的开发和部署,而无需担心环境配置和依赖问题。

1.docker与虚拟机的区别

        Docker 和传统虚拟机之间有以下几个主要区别:

  1. 架构差异:传统虚拟机使用 Hypervisor 在物理硬件上创建多个虚拟环境,并在每个虚拟机中运行完整的操作系统。而 Docker 则利用宿主机操作系统的内核来实现容器化,容器共享宿主机的操作系统,避免了运行多个完整操作系统的开销。

  2. 资源消耗:由于传统虚拟机需要运行完整的操作系统,因此每个虚拟机都需要独立分配一定的内存和计算资源。相比之下,Docker 容器直接运行在宿主机上,共享宿主机的资源,使得容器更加轻量级且资源消耗更少。

  3. 启动时间:传统虚拟机的启动时间较长,通常需要几分钟的时间来启动一个虚拟机。而 Docker 容器可以在几秒钟内启动,因为容器只需加载应用程序及其依赖项即可,无需启动操作系统。

  4. 部署速度:由于 Docker 容器具有轻量级和快速启动的特点,可以提供更快的应用程序部署速度。容器可以更快地部署、升级和扩展,从而提高了应用程序的迭代和交付效率。

  5. 系统隔离:传统虚拟机通过 Hypervisor 实现硬件级别的隔离,每个虚拟机都有自己独立的内核和资源。而 Docker 容器使用 Linux 内核的命名空间和 cgroups 功能来实现轻量级隔离,使得容器之间相互隔离但仍共享宿主机的内核。这种隔离方式在安全性和性能方面提供了一定的平衡。

        综上所述,Docker 和虚拟机在架构资源消耗启动时间部署速度系统隔离等方面存在较大区别(优势)。Docker 更加轻量级、快速和灵活,适合于应用程序的打包、交付和部署;而传统虚拟机则提供了更高的隔离性和多样化的操作系统支持,适合于运行不同操作系统的应用程序。根据具体需求,可以选择使用 Docker 或传统虚拟机来满足不同的场景和要求。

2.docker的组成 

        Docker 由以下几个核心组件组成:

  • Docker Engine:Docker 引擎是 Docker 的核心组件,负责管理容器的生命周期、构建和运行容器。它包括三个主要部分:Docker 守护进程(dockerd),API 接口和命令行工具(docker)。

  • Docker 镜像(Docker Images):Docker 镜像是用于创建容器的模板,包含了一个完整的文件系统,包括代码、运行时环境、系统工具、库文件等。可以通过 Dockerfile 或从 Docker Hub 等镜像仓库中获取现有的镜像,也可以自己构建定制化的镜像。

  • Docker 容器(Docker Containers):Docker 容器是基于 Docker 镜像创建的运行实例。每个容器都是独立且隔离的运行环境,包含了运行应用程序所需的所有依赖项。容器可以启动、停止、重启,并且可以与其他容器进行通信和交互。

  • Docker 仓库(Docker Registry):Docker 仓库用于存储和分享 Docker 镜像。Docker Hub 是最常用的公共 Docker 仓库,其中包含了大量的官方和社区维护的镜像供用户使用。除了公共仓库外,还可以搭建私有仓库,用于本地镜像的存储和管理。

  • Docker Compose:Docker Compose 是一个用于定义和运行多个容器应用的工具。通过编写一个 YAML 文件来定义多个容器之间的关系和配置,然后使用 docker-compose 命令进行一键式部署、启动和停止。

  • Docker Swarm:Docker Swarm 是 Docker 官方提供的容器集群管理工具,用于在多个主机上创建和管理容器集群。它可以将多个 Docker 主机组合成一个虚拟的计算资源池,自动调度和管理容器的部署和扩缩容。

除了以上核心组件外,还有一些辅助工具和服务,如 Docker Machine(用于在虚拟机或云端创建和管理 Docker 主机)、Docker Network(用于容器之间的网络连接)和第三方的监控和日志工具等,进一步增强了 Docker 的功能和生态系统。

综上所述,Docker 的主要组成部分包括 Docker 引擎、镜像、容器、仓库、Compose 和 Swarm 等。这些组件共同构成了 Docker 的基础架构,并提供了便捷、可移植和高效的容器化解决方案。

3.docker运行流程

Docker 的运行流程可以简要概括为以下几个步骤:

  1. 编写 Dockerfile:Dockerfile 是一个文本文件,用于定义 Docker 镜像的构建过程。在 Dockerfile 中,你可以指定基础镜像、添加和配置应用程序所需的依赖项、设置环境变量、复制文件等操作。

  2. 构建镜像:使用 Docker 命令行工具执行 docker build 命令,根据 Dockerfile 构建镜像。该命令会按照 Dockerfile 中的指令逐步执行,并生成一个新的镜像。在构建过程中,Docker 会下载所需的基础镜像和依赖项,并在每一步骤生成一个中间镜像。

  3. 运行容器:使用 docker run 命令来运行容器。该命令需要指定要运行的镜像名称或 ID,并可以通过参数设置容器的名称、端口映射、环境变量、挂载数据卷等配置选项。在运行时,Docker 会基于镜像创建一个新的容器实例,并启动其中的应用程序。

  4. 应用程序执行:一旦容器启动,Docker 将在容器内部运行应用程序。容器中的应用程序将具有自己的文件系统、进程空间和网络接口,与宿主机和其他容器隔离开。应用程序可以执行任何操作,运行所需的服务或应用逻辑。

  5. 交互和管理:Docker 提供了一系列命令和工具,用于与容器进行交互和管理。你可以使用 docker exec 命令在运行中的容器内执行命令,使用 docker logs 查看容器的日志输出,使用 docker stop 命令停止容器的运行等。同时,也可以使用 Docker Compose、Docker Swarm 等工具来管理多个容器的部署和协调。

  6. 停止和清理:当不再需要运行的容器时,可以使用 docker stop 命令停止容器的运行。如果需要移除容器,可以使用 docker rm 命令将其删除。对于不再使用的镜像,可以使用 docker rmi 命令进行清理。

        总结起来,Docker 的运行流程包括编写 Dockerfile 定义镜像构建过程使用 Docker 命令行工具构建镜像运行容器应用程序执行交互和管理容器最后停止和清理容器和镜像。这个流程使得 Docker 提供了一种便捷、可移植和轻量级的容器化解决方案。

4.docker数据卷

Docker 数据卷(Docker Volumes)是用于在容器和宿主机之间持久化存储数据的一种机制。它允许容器中的数据在容器生命周期内保留,并且独立于容器的停止和删除操作。

使用 Docker 数据卷的主要优势包括:

  1. 数据持久化:容器中的数据可以在容器终止、重启或删除后仍然保留,这样可以确保数据的持久性存储,不会因为容器的状态改变而丢失数据。

  2. 数据共享:多个容器可以共享同一个数据卷,使得容器之间可以交换和共享数据。这对于需要共享配置文件、日志目录或其他共享数据的应用程序非常有用。

  3. 数据备份和迁移:通过将数据卷映射到宿主机上的特定路径,可以轻松将数据从一个容器迁移到另一个容器或备份到宿主机的本地文件系统或远程存储等。

  4. 容器间通信:如果多个容器共享同一个数据卷,它们可以通过数据卷中的文件进行相互通信和数据交换。这在微服务架构和分布式应用程序中特别有用。

以下是几种创建和使用 Docker 数据卷的方式:

  1. docker run 命令:可以使用 -v--volume 参数来创建一个数据卷,并将其映射到容器中的指定路径。例如:docker run -v /path/on/host:/path/in/container image_name

  2. Docker Compose:可以通过编写 docker-compose.yml 文件,在服务定义中指定 volumes 字段来创建和管理数据卷。这样可以实现多个容器之间的共享数据卷。

  3. Dockerfile:在 Dockerfile 中使用 VOLUME 关键字可以指定将哪些目录作为数据卷,例如:VOLUME ["/var/data"]。当镜像被用于创建容器时,该目录会自动转换为数据卷。

  4. 匿名数据卷:如果不指定数据卷的路径,Docker 会自动生成一个匿名数据卷,并将其挂载到容器中的随机路径上。这种类型的数据卷通常用于临时或临时性数据。

  5. 具名数据卷:可以使用 docker volume create 命令手动创建一个具名数据卷,并将其映射到容器中。这样可以更加灵活地管理数据卷的生命周期和配置。

总之,Docker 数据卷提供了一种方便的方式来持久化存储容器中的数据,并实现容器间的数据共享和通信。通过合理地使用数据卷,可以使得容器应用程序更加灵活、可移植和可靠。

二、docker的简单使用

镜像相关指令:

  • docker pull <镜像名称>: 从镜像仓库中拉取一个镜像到本地。
  • docker images: 显示本地已经下载的镜像列表。
  • docker build <选项> <上下文路径>: 根据 Dockerfile 构建一个自定义镜像。
  • docker push <镜像名称>: 将本地的镜像推送到镜像仓库。
  • docker rmi <镜像名称>: 删除本地的一个镜像。
  • docker tag <源镜像名称>:<标签> <目标镜像名称>:<标签>: 给本地镜像打标签。

容器相关指令:

  • docker run <选项> <镜像名称>: 在容器中运行一个镜像。
  • docker ps: 显示正在运行的容器列表。
  • docker start <容器ID>: 启动已停止的容器。
  • docker stop <容器ID>: 停止运行中的容器。
  • docker restart <容器ID>: 重启容器。
  • docker rm <容器ID>: 删除已停止的容器。
  • docker exec <选项> <容器ID> <命令>: 在运行中的容器中执行命令。
  • docker logs <容器ID>: 查看容器的日志输出。
  • docker inspect <容器ID>: 查看容器的详细信息。

网络和存储指令:

  • docker network ls: 显示 Docker 网络列表。
  • docker network create <网络名称>: 创建一个自定义的 Docker 网络。
  • docker volume ls: 显示 Docker 数据卷列表。
  • docker volume create <卷名称>: 创建一个 Docker 数据卷。
  • docker volume rm <卷名称>: 删除一个 Docker 数据卷。

其他常用指令:

  • docker-compose up: 在当前目录中使用 Docker Compose 启动容器。
  • docker-compose down: 在当前目录中使用 Docker Compose 停止容器并删除相关资源。
  • docker version: 显示 Docker 的版本信息。
  • docker info: 显示 Docker 的系统信息。

三、dockerfile文件的编写

Dockerfile 是一个文本文件,用于定义 Docker 镜像的构建过程。通过编写 Dockerfile,可以指定基础镜像、添加和配置应用程序所需的依赖项、设置环境变量、复制文件等操作。以下是 Dockerfile 常见的指令和使用方法:

  1. FROM:指定基础镜像,格式为 FROM <image>[:<tag>]。例如:FROM ubuntu:latest

  2. LABEL:给镜像添加元数据,格式为 LABEL <key>=<value>。可以用来提供作者信息、版本号、描述等信息。

  3. RUN:在镜像中执行命令或脚本,格式为 RUN <command>。例如:RUN apt-get update && apt-get install -y curl

  4. COPYADD:将文件从构建上下文复制到镜像中。COPY 指令格式为 COPY <src> <dest>ADD 指令格式为 ADD <src> <dest>。其中 <src> 是构建上下文中的文件或目录路径,<dest> 是目标镜像中的路径。

  5. WORKDIR:设置工作目录,格式为 WORKDIR <path>。后续的命令会在该路径下执行。

  6. ENV:设置环境变量,格式为 ENV <key>=<value>。例如:ENV JAVA_HOME=/usr/lib/jvm/java-11

  7. EXPOSE:声明容器运行时要监听的端口号,格式为 EXPOSE <port> [<port>/<protocol>...]。例如:EXPOSE 8080/tcp

  8. CMDENTRYPOINT:设置容器启动后执行的命令或脚本。CMD 格式为 CMD ["<executable>", "<param1>", "<param2>", ...]ENTRYPOINT 格式为 ENTRYPOINT ["<command>", "<param1>", "<param2>", ...]。可以使用多个 CMDENTRYPOINT,但最终只有最后一个指令生效。

以上是 Dockerfile 中常用的指令,还有其他一些指令和参数可供使用,可以根据实际需求进行查阅和使用。编写完 Dockerfile 后,可以使用 docker build 命令根据 Dockerfile 构建镜像,例如:docker build -t my-image:tag .,其中 . 表示当前目录是构建上下文。

在构建过程中,Docker 会按照 Dockerfile 中的指令逐步执行,并生成一个新的镜像。每个指令都会在前一个指令的基础上进行修改,形成一条镜像层的链条。这种分层的结构使得镜像的构建和管理更加高效和灵活。

总之,Dockerfile 是用于定义 Docker 镜像构建过程的重要工具,通过编写指令来配置镜像的组件、配置和应用程序等。正确编写和使用 Dockerfile 可以大大简化镜像构建的流程,并提供可重复和可扩展的容器化解决方案。

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

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

相关文章

最新AI系统ChatGPT镜像源码+详细图文搭建教程/支持GPT4.0/AI绘画+MJ绘画/Dall-E2绘画/H5端/Prompt知识库/思维导图生成

一、AI系统 如何搭建部署AI创作ChatGPT系统呢&#xff1f;小编这里写一个详细图文教程吧&#xff01;SparkAi使用Nestjs和Vue3框架技术&#xff0c;持续集成AI能力到AIGC系统&#xff01; 1.1 程序核心功能 程序已支持ChatGPT3.5/GPT-4提问、AI绘画、Midjourney绘画&#xf…

uview ui 1.x ActonSheet项太多,设置滚动(亲测有效)

问题&#xff1a;ActionSheet滚动不了。 使用uview ui &#xff1a;u-action-sheet, 但是item太多&#xff0c;超出屏幕了&#xff0c; 查了一下文档&#xff0c;并没有设置滚动的地方。 官方文档&#xff1a;ActionSheet 操作菜单 | uView - 多平台快速开发的UI框架 - uni-a…

ChatGPT总结(持续更新)

目录 体验渠道 weTab CSDN-AI助手 其他插件 ChatGPT简介 ChatGPT主要用途 ChatGPT发展历程 GPT-4架构的特点和优势 ChatGPT的工作原理 神经网络和自然语言处理技术 Transformer模型 模型训练优化技巧 ChatGPT对程序员的帮助 与ChatGPT交互和提问技巧 ChatGPT未来…

Linux知识点 -- Linux多线程(三)

Linux知识点 – Linux多线程&#xff08;三&#xff09; 文章目录 Linux知识点 -- Linux多线程&#xff08;三&#xff09;一、线程同步1.概念理解2.条件变量3.使用条件变量进行线程同步 二、生产者消费者模型1.概念2.基于BlockingQueue的生产者消费者模型3.单生产者单消费者模…

Ansible学习笔记7

user模块&#xff1a; user模块用于管理用户账户和用户属性。 如果是windows要换一个win_user模块。 创建用户&#xff1a;present&#xff1a; [rootlocalhost ~]# ansible group1 -m user -a "nameaaa statepresent" 192.168.17.106 | CHANGED > {"ansi…

三、JVM监控及诊断工具-GUI篇

目录 一、工具概述二、jconsole&#xff08;了解即可&#xff09;1、基本概述2、启动3、三种连接方式4、作用 三、Visual VM 一、工具概述 二、jconsole&#xff08;了解即可&#xff09; 1、基本概述 从Java5开始&#xff0c;在JDK中自带的Java监控和管理控制台用于对JVM中内…

RabbitMQ工作模式-路由模式

官方文档参考&#xff1a;https://www.rabbitmq.com/tutorials/tutorial-four-python.html 使用direct类型的Exchange,发N条消息并使用不同的routingKey,消费者定义队列并将队列routingKey、Exchange绑定。此时使用direct模式Exchange必须要routingKey完成匹配的情况下消息才…

正中优配:什么叫融资融券

融资融券是股市中常见的一种买卖方法。融资是指投资者通过某些途径借到资金&#xff0c;用以购买股票。融券是指投资者借股票卖出&#xff0c;并承诺在未来某一时点将股票偿还。 融资融券的实质是一种杠杆买卖&#xff1a;投资者通过融资或融券&#xff0c;增加了自己的资金量…

【微服务部署】02-配置管理

文章目录 1.ConfigMap1.1 创建ConfigMap方式1.2 使用ConfigMap的方式1.3 ConfigMap使用要点建议 2 分布式配置中心解决方案2.1 什么时候选择配置中心2.2 Apollo配置中心系统的能力2.2.1 Apollo创建配置项目2.2.2 项目使用2.2.3 K8s中使用Apollo 1.ConfigMap ConfigMap是K8s提供…

深入理解Reactor模型的原理与应用

1、什么是Reactor模型 Reactor意思是“反应堆”&#xff0c;是一种事件驱动机制。 和普通函数调用的不同之处在于&#xff1a;应用程序不是主动的调用某个 API 完成处理&#xff0c;而是恰恰相反&#xff0c;Reactor逆置了事件处理流程&#xff0c;应用程序需要提供相应的接口并…

非科班菜鸡算法学习记录 | 代码随想录算法训练营第51天||309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费 股票总结

309.最佳买卖股票时机含冷冻期 309. Best Time to Buy and Sell Stock with Cooldown(英文力扣连接) 知识点&#xff1a;动规 状态&#xff1a;看思路ok 思路&#xff1a; 四个状态需要想&#xff0c;持有/不持有且过了冷却期/当天卖/正处于冷却期&#xff1b; 具体看注释…

如何用Python爬虫持续监控商品价格

目录 持续监控商品价格步骤 1. 选择合适的爬虫库&#xff1a; 2. 选择目标网站&#xff1a; 3. 编写爬虫代码&#xff1a; 4. 设定监控频率&#xff1a; 5. 存储和展示数据&#xff1a; 6. 设置报警机制&#xff1a; 7. 异常处理和稳定性考虑&#xff1a; 可能会遇到的…

李跳跳下载-《告别广告困扰,让李跳跳助力打造清爽浏览体验》

大家好&#xff0c;&#x1f44b;今天我想向大家介绍一款非常好用的应用程序——李跳跳 App &#x1f680;。 随着智能手机的普及&#xff0c;应用程序已经成为了我们日常生活中必不可少的一部分。但是&#xff0c;随之而来的是各种各样的广告&#xff0c;这些广告不仅浪费我们…

交换机端口安全实验

文章目录 一、实验的背景与目的二、实验拓扑三、实验需求四、实验解法1. PC配置IP地址部分2. 在SW1上开启802.1X身份验证3. 创建一个用户身份验证的用户。用户名为wangdaye&#xff0c;密码为1234564.创建一个端口隔离组&#xff0c;实现三台PC无法互相访问 摘要&#xff1a; 本…

vue中使用window.open打开assets文件夹下的pdf文件

需求&#xff1a;系统有个操作手册&#xff0c;点击会在浏览器新开个窗口并打开pdf文件。这个pdf文件存储在本地assets文件夹中。 文件结构&#xff1a; 注&#xff1a;直接使用window.open(文件路径)不能打开&#xff0c;需要在vue.config.js中配置所需文件 引入图中红框中的…

Ruoyi微服务启动流程

1、执行sql 执行sql ry-quarty.sql ry_2023706.sql 到ry-cloud 数据库 2、下载nacos 修改配置文件 修改连接地址 启动nacos 看到下面的配置文件即为成功 修改配置文件里面的数据库连接信息 3、修改nacos 为单机启动 4、启动项目即可 nacos自取 链接: https://pan.baidu…

云上办公系统项目

云上办公系统项目 1、云上办公系统1.1、介绍1.2、核心技术1.3、开发环境说明1.4、产品展示后台前台 1.5、 个人总结 2、后端环境搭建2.1、建库建表2.2、创建Maven项目pom文件guigu-oa-parentcommoncommon-utilservice-utilmodelservice-oa 配置数据源、服务器端口号application…

Python钢筋混凝土结构计算.pdf-已知弯矩确定混凝土梁截面尺寸

计算原理 确定混凝土梁截面的合理尺寸通常需要考虑弯矩、受力要求和约束条件等多个因素。以下是一种常见的计算公式&#xff0c;用于基于已知弯矩确定混凝土梁截面的合理尺寸&#xff1a; 请注意&#xff0c;以上公式仅提供了一种常见的计算方法&#xff0c;并且具体的规范和设…

脚本掌控,Linux上实现Spring Boot(JAR包)开机自启

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; 脚本掌控&#xff0c;Linux上实现Spring Boot&#xff08;JAR包&#x…

城市内涝积水监测预警系统 yolov8

城市内涝积水监测预警系统通过yolov8网络深度学习框架&#xff0c;算法一旦识别到道路出现积水&#xff0c;城市内涝积水监测预警系统会立即发出预警信号。并及时通知相关人员。YOLO检测速度非常快。标准版本的YOLO可以每秒处理 45 张图像&#xff1b;YOLO的极速版本每秒可以处…