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

「快学Docker」Docker镜像和容器的创建与管理

「快学Docker」Docker镜像和容器的创建与管理

  • 引言
  • 什么是Docker镜像?
  • 镜像获取和使用
    • 镜像获取
    • 镜像使用
  • 什么是Docker容器?
  • Docker容器与主机之间的交互
  • 基于Dockerfile创建镜像
  • 基于镜像创建容器
  • 总结

引言

Docker镜像和容器是当今云计算领域中最受欢迎的技术之一。它们提供了一种轻量级、灵活且可移植的方式来构建、交付和运行应用程序。通过使用Docker,开发人员可以将应用程序及其依赖项打包到一个独立的、可移植的单元中,称为Docker镜像。这些镜像可以在任何支持Docker的环境中部署和运行。

什么是Docker镜像?

Docker镜像是一个轻量级、独立的可执行软件包,它包含了运行应用程序所需的所有依赖项,包括代码、运行时环境、库文件、系统工具和配置文件等。Docker镜像是Docker容器的基础,每个Docker容器都是从一个Docker镜像创建而来。

在这里插入图片描述

  • 隔离性和可移植性:Docker镜像通过容器化技术实现了应用程序与底层操作系统环境的隔离,使得应用程序可以在不同的主机上以相同的方式运行。镜像中包含了应用程序所需的所有组件和配置,因此可以轻松地在不同的环境中部署和迁移。

  • 分层结构:Docker镜像采用分层结构,每一层都是一个只读的文件系统,包含了应用程序所需的文件和设置。这种分层结构使得镜像的构建和更新更加高效,可以重复利用已有的层,只需构建和传输发生变化的部分,大大减小了镜像的体积。

  • 版本控制和共享:Docker镜像可以使用版本标签进行管理,不同版本的镜像可以根据需要进行切换和回滚。镜像可以通过Docker Hub等镜像仓库进行共享和分发,开发者可以方便地获取和使用他人创建的镜像,加快应用程序的开发和部署过程。

  • 简化部署和扩展:使用Docker镜像可以简化应用程序的部署和扩展过程。通过定义一个包含所有依赖项和配置的镜像,可以确保在不同的环境中具有一致的运行结果。同时,通过容器编排工具(如Docker Compose和Kubernetes),可以方便地管理多个容器的部署和扩展。

镜像获取和使用

镜像获取

  • 从Docker Hub获取:Docker Hub是一个公共的Docker镜像仓库,提供了大量的官方和社区创建的镜像。可以通过在终端中运行docker pull命令来获取镜像,例如docker pull image_name:tag,其中image_name是镜像名称,tag是镜像的版本标签。
  • 从私有镜像仓库获取:如果有自己的私有镜像仓库,可以根据其提供的方式获取镜像,通常也是使用docker pull命令。

镜像使用

  • 运行容器:获取镜像后,可以使用docker run命令来创建并运行一个容器,例如docker run image_name:tag。该命令会在本地创建一个容器实例,并基于指定的镜像运行应用程序。
  • 容器管理:可以使用docker ps命令查看当前正在运行的容器列表,使用docker stop命令停止容器的运行,使用docker start命令重新启动已停止的容器。
  • 容器配置:可以使用docker exec命令在运行的容器中执行命令,例如docker exec container_id command,其中container_id是容器的ID或名称,command是要执行的命令。
  • 容器删除:使用docker rm命令删除已停止的容器,例如docker rm container_id。

什么是Docker容器?

Docker容器是Docker的核心概念之一,它是基于Docker镜像创建的一个运行实例。容器提供了一个隔离的运行环境,使得应用程序可以在其中独立运行,并与其他容器和主机系统进行通信。

在这里插入图片描述

  • 隔离性:Docker容器利用Linux内核的容器化技术,如命名空间和控制组,实现了与主机系统和其他容器的隔离。每个容器都拥有自己的文件系统、进程空间、网络接口等资源,使得应用程序在容器中运行时不会相互干扰,也不会影响主机系统的稳定性。

  • 轻量级:与传统的虚拟机相比,Docker容器更加轻量级。容器共享主机系统的内核,不需要额外的操作系统启动和资源开销,因此启动速度更快,占用的系统资源更少。

  • 可移植性:Docker容器具有高度的可移植性,可以在不同的主机上以相同的方式运行。容器包含了应用程序的所有依赖项和配置,因此可以轻松地在开发、测试和生产环境中部署和迁移。

  • 简化管理:使用Docker容器可以简化应用程序的管理和部署过程。容器可以通过Docker镜像进行创建和启动,可以方便地进行扩展、更新和回滚。同时,通过容器编排工具(如Docker Compose和Kubernetes),可以管理多个容器的部署和协同工作。

Docker容器与主机之间的交互

在这里插入图片描述

  • 端口映射:Docker容器可以通过端口映射将容器内部的端口映射到主机上的端口,从而实现主机与容器之间的通信。例如,可以使用docker run命令的-p选项来指定端口映射,如docker run -p 8080:80 image_name,其中8080是主机上的端口,80是容器内部的端口。

  • 共享数据卷:Docker容器可以通过共享数据卷将容器内部的文件系统与主机上的文件系统进行共享,从而实现主机与容器之间的数据共享。例如,可以使用docker run命令的-v选项来指定数据卷,如docker run -v /host/path:/container/path image_name,其中/host/path是主机上的路径,/container/path是容器内部的路径。

  • 环境变量:Docker容器可以通过环境变量将容器内部的配置信息传递给主机或其他容器。例如,可以使用docker run命令的-e选项来设置环境变量,如docker run -e “ENV_VAR=value” image_name,其中ENV_VAR是环境变量名称,value是环境变量的值。

  • Docker API:Docker容器可以通过Docker API与主机或其他容器进行交互。Docker API是一组RESTful API,可以通过HTTP请求来管理Docker容器、镜像、网络等资源。例如,可以使用Docker客户端或第三方工具来调用Docker API,从而与容器进行交互。

基于Dockerfile创建镜像

  1. 编写Dockerfile文件:Dockerfile是一个文本文件,用于定义镜像的构建过程。在Dockerfile中可以指定基础镜像、安装软件包、配置环境变量、拷贝文件等操作。

  2. 构建镜像:使用docker build命令来构建镜像,该命令会自动读取当前目录下的Dockerfile文件,并根据文件中的指令进行构建。例如,可以使用docker build -t image_name .命令来构建镜像,其中image_name是镜像名称,.表示当前目录。

  3. 运行容器:使用docker run命令来运行容器,该命令会自动从本地镜像库中查找指定的镜像,并启动容器。例如,可以使用docker run -d --name container_name image_name命令来启动容器,其中-d选项表示以后台模式运行,–name选项表示指定容器名称。

基于Dockerfile创建镜像的过程中,可以通过以下指令来定义镜像的构建过程:

  1. FROM:指定基础镜像,例如FROM ubuntu:latest表示以最新版的Ubuntu镜像为基础。

  2. RUN:指定在镜像中运行的命令,例如RUN apt-get update && apt-get install -y nginx表示更新软件包并安装nginx。

  3. COPY/ADD:指定将本地文件拷贝到镜像中,例如COPY app.py /app/表示将本地的app.py文件拷贝到镜像中的/app/目录下。

  4. ENV:指定环境变量,例如ENV PORT=80表示设置环境变量PORT为80。

  5. WORKDIR:指定工作目录,例如WORKDIR /app表示将工作目录设置为/app。

  6. CMD:指定容器启动后执行的命令,例如CMD ["python", "app.py"]表示在容器启动后执行python app.py命令。

基于镜像创建容器

  1. 使用docker run命令:这是最常用的创建容器的方式。您可以使用docker run命令指定要使用的镜像名称和其他选项,例如端口映射、环境变量设置等。例如,以下命令将创建一个基于ubuntu镜像的容器:
docker run -it ubuntu
  1. 使用Docker Compose:Docker Compose是一个用于定义和运行多个容器应用程序的工具。通过编写一个YAML文件来描述应用程序的服务和配置,然后使用docker-compose up命令即可创建和管理多个容器。Docker Compose可以方便地定义容器之间的依赖关系、网络配置等。例如,以下是一个简单的Docker Compose文件示例:

version: '3'
services:web:image: nginx
  1. 使用容器编排工具(如Kubernetes):对于大规模的容器化应用程序,通常会使用容器编排工具来管理和编排多个容器。Kubernetes是目前最流行的容器编排工具之一,它提供了丰富的功能来管理容器的创建、调度、扩展和监控等。通过定义Pod、Deployment、Service等资源对象,您可以在Kubernetes集群中创建和管理容器。例如,以下是一个简单的Kubernetes Deployment示例:

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx

总结

通过深入了解Docker镜像和容器的创建与管理,您将能够更好地利用Docker技术来加速应用程序的开发、部署和运行。无论是在开发环境中快速搭建应用程序,还是在生产环境中实现高效的容器化部署,Docker镜像和容器都将成为您不可或缺的工具。

让我们开始探索Docker镜像和容器的奇妙世界吧!

相关文章:

「快学Docker」Docker镜像和容器的创建与管理

「快学Docker」Docker镜像和容器的创建与管理 引言什么是Docker镜像?镜像获取和使用镜像获取镜像使用 什么是Docker容器?Docker容器与主机之间的交互基于Dockerfile创建镜像基于镜像创建容器总结 引言 Docker镜像和容器是当今云计算领域中最受欢迎的技术…...

Zabbix出现 404Not FoundThe requested URL /zabbix was not found on this server.

目录 一、问题: 二、原因: 三、解决方法: 一、问题: Not Found The requested URL /zabbix was not found on this server. 二、原因: 未找到 在此服务器上找不到请求的 URL /zabbix。 /etc/httpd/conf.d 目录…...

【STM32】标准库的引入

一、为什么要会有标志外设库 1、传统单片机软件开发方式 (1)芯片厂商提供数据手册、示例代码、开发环境 (2)单片机软件工程师面向产品功能,查阅数据手册,参考官方示例代码进行开发 (3)硬件操作的方式是用C语言对寄存器进行读写以操作硬件 (4)主要工作量…...

Redis的淘汰策略

Redis是一种基于内存的高性能键值存储数据库,由于内存资源有限,当Redis中的数据量增大时,会导致内存占用过多,可能会影响系统的性能和稳定性。为了解决这个问题,Redis提供了一些淘汰策略来自动清理不再使用的key&#…...

Linux友人帐之日志与备份

一、日志 1.1概述 日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。日志对于安全来说也很重要,它记录了系统每天发生的各种事情&#…...

git中如何在父仓库提交子仓库的修改

子仓库在父仓库中进行了修改,你需要按照以下步骤提交子仓库的修改: 切换到子仓库目录:使用cd命令进入子仓库所在的目录。拉取子仓库的最新更改:使用git pull命令拉取子仓库的最新更改,确保你的本地是最新的版本。提交…...

【【萌新的SOC学习之SD卡DMA回路读写大数据的实验】】

萌新的SOC学习之SD卡读写大数据的实验 记得先设定 FIFO 的位宽和深度 还有DMA 的大小 其他基本结构设计参照上一个SD卡读写小数据的实验 #include "xparameters.h" //包含vivado所导出的信息包含vivado的基地址 #include "xil_printf.h" //调用打印函…...

在k8s中 ,数据包是怎么从外部流转进入到pod的?

在 Kubernetes 中,当您创建 NodePort 类型的服务时,流量不会直接从主机的 IP 和端口转发到特定 Pod 的 IP 和端口。相反,流量被转发到集群中的一个节点,然后从那里转发到相应的 Pod。 1、当您创建 NodePort 类型的服务时&#xf…...

微信小程序设置 wx.showModal 提示框中 确定和取消按钮的颜色

wx官方提供的 showModal 无疑是个非常优秀的选择提示工具 但是 我们还可以让他的颜色更贴近整体的小程序风格 cancelColor 可以改变取消按钮的颜色 confirmColor 则可以控制确定按钮的颜色 参考代码如下 wx.showModal({cancelColor: #0000FF,confirmColor: #45B250,content:…...

【Chrome】使用k8s、docker部署无头浏览器Headless,Java调用示例

什么是无头浏览器? 无头浏览器是一种没有图形用户界面的浏览器。无头浏览器不通过其图形用户界面(GUI)控制浏览器的操作,而是使用命令行。 为什么要用Chrome无头? Chrome Headless用于抓取(谷歌)、测试(开发者)和黑客(黑客)。搜索引擎&…...

springmvc http请求,支持get,post,附件传输和参数传输

主要解决http请求支持get,post,put,delete等常规方法,支持RequestParam,RequestBody,PathVariable等参数格式传输,支持传输附件同时传递参数等,主体代码如下: package mes.client.action;import cn.hutool.crypto.digest.DigestUt…...

linux性能分析(七)CPU性能篇(二)怎么理解平均负载

一 怎么理解平均负载 ① 如何查看平均复杂 查看系统负载的命令: top、uptime、w、cat /proc/loadavg、tload /proc/loadavg 思考: uptime每列输出的含义?重点: 当前时间、系统运行时间、正在登录用户数、平均负载 ② 思考&#xff1…...

PostgreSQL12中浮点数输出算法优化带来的小问题

最近碰到同事发来这样两个SQL,开发反馈输出的结果异常。 bill# select 0.1284*100::float;?column? --------------------12.839999999999998 (1 row)bill# select (0.1284*100)::float;float8 --------12.84 (1 row) 乍一看其实能看出明显的区别,由于…...

Hive安装配置笔记

版本说明 hadoop-3.3.6&#xff08;已安装&#xff09; mysql-8&#xff08;已安装&#xff09; hive-3.1.3 将hive解压到对应目录后做如下配置&#xff1a; 基本配置与操作 1、hive-site <configuration><!-- jdbc连接的URL --><property><name>ja…...

前端数据可视化之【Echarts下载使用】

目录 &#x1f31f;下载&#x1f31f;浏览器引入&#x1f31f;模块化引入 &#x1f31f;使用&#x1f31f;基本使用步骤 &#x1f31f;绘制一个简单的图表&#x1f31f;写在最后 &#x1f31f;下载 &#x1f31f;浏览器引入 官网下载界面&#xff1a;官方网站 或 Echarts中文…...

本机计算机上的mysql启动后停止

本机计算机上的mysql启动后停止 原因&#xff1a;mysql5.0和mysql8.0配置不同 把my.ini改成以下设置然后再重新 mysqld --initialize-insecure --usermysql然后再启动 net start mysqlmysql8.0 下面的路劲可自定义 [client] default-character-setutf8 [mysql] default-cha…...

Java中ReentrantLock测试线程的安全

使用场景 当需要在多线程环境下保证共享资源的安全访问时&#xff0c;可以使用Java中的ReentrantLock来实现线程安全。ReentrantLock是一个可重入的互斥锁&#xff0c;它提供了与synchronized关键字类似的功能&#xff0c;但更加灵活和扩展性强。 下面是一个使用ReentrantLoc…...

Vue-dvadmin-d2-crud-plus-常用配置-row-handle-columns-options

文章目录 1.row-handle columnHeader width minWidth fixed align renderHeader edit view remove remove.confirm remove.confirmTitle remove.confirmText custom 范例1 范例2 2.columns title key width minWidth fixed renderHeader sortable sortMethod sortBy sortOrders…...

【OpenCV实现图像的算数运算,性能测试和优化,改变颜色空间】

文章目录 OpenCV功能概要图像的算数运算性能测试和优化改变颜色空间对象追踪 OpenCV功能概要 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习库&#xff0c;提供了丰富的图像处理和计算机视觉算法。它支持多种编程语言&…...

多级缓存入门

文章目录 什么是多级缓存JVM进程缓存环境准备安装MySQL导入Demo工程导入商品查询页面 初识Caffeine Lua语法初识Lua第一个lua程序变量和循环Lua的数据类型声明变量循环 条件控制、函数函数条件控制 多级缓存安装OpenRestyOpenResty快速入门反向代理流程OpenResty监听请求编写it…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目&#xff0c;该项目是一个 Spring AI 快速入门的样例工程项目&#xff0c;旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计&#xff0c;每个模块都专注于特定的功能领域&#xff0c;便于学习和…...

Ubuntu系统多网卡多相机IP设置方法

目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机&#xff0c;交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息&#xff0c;系统版本&#xff1a;Ubuntu22.04.5 LTS&#xff1b;内核版本…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…...

数据库——redis

一、Redis 介绍 1. 概述 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的、高性能的内存键值数据库系统&#xff0c;具有以下核心特点&#xff1a; 内存存储架构&#xff1a;数据主要存储在内存中&#xff0c;提供微秒级的读写响应 多数据结构支持&…...