当前位置: 首页 > 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…...

如何把 Mac Finder 用得更顺手?——高效文件管理定制指南

系统梳理提升 Mac Finder 体验的实用设置与技巧&#xff0c;助你用更高效的方式管理文件。文末引出进阶选择 Path Finder。 阅读原文请转到&#xff1a;https://jimmysong.io/blog/customize-finder-for-efficiency/ 作为一个用 Mac 多年的用户&#xff0c;我始终觉得 Finder 虽…...

Kafka 消息模式实战:从简单队列到流处理(二)

四、Kafka 流处理实战 4.1 Kafka Streams 简介 Kafka Streams 是 Kafka 提供的流处理库&#xff0c;它为开发者提供了一套简洁而强大的 API&#xff0c;用于构建实时流处理应用程序。Kafka Streams 基于 Kafka 的高吞吐量、分布式和容错特性&#xff0c;能够处理大规模的实时…...

详细讲解Flutter GetX的使用

Flutter GetX 框架详解&#xff1a;状态管理、路由与依赖注入 GetX 是 Flutter 生态中一款强大且轻量级的全功能框架&#xff0c;集成了状态管理、路由管理和依赖注入三大核心功能。其设计理念是简洁高效&#xff0c;通过最小的代码实现最大的功能&#xff0c;特别适合快速开发…...

oracle 归档日志与RECOVERY_FILE_DEST 视图

1. RECOVERY_FILE_DEST 视图的作用 RECOVERY_FILE_DEST 是 Oracle 数据库用于 管理快速恢复区&#xff08;Fast Recovery Area, FRA&#xff09; 的一个视图。FRA 是 Oracle 提供的一种集中存储恢复相关文件&#xff08;如归档日志、备份文件、闪回日志等&#xff09;的区域。…...

机器学习:load_predict_project

本文目录&#xff1a; 一、project目录二、utils里的两个工具包&#xff08;一&#xff09;common.py&#xff08;二&#xff09;log.py 三、src文件夹代码&#xff08;一&#xff09;模型训练&#xff08;train.py&#xff09;&#xff08;二&#xff09;模型预测&#xff08;…...

现代C++特性(一):基本数据类型扩展

文章目录 基础数据类型long long (C 11)numeric_limits()获取当前数据类型的最值warning C4309: “”: 截断常量值新字符类型char16_t和char32_tWindows编程常用字符类型wchar_tchar8_t (C 20) 基础数据类型 C中的基本类型是构建其他数据类型的基础&#xff0c;常见的基础类型…...

【JVM】三色标记法原理

在JVM中&#xff0c;三色标记法是GC过程中对象状态的判断依据&#xff0c;回收前给对象设置上不同的三种颜色&#xff0c;三色分为白色、灰色、黑色。根据颜色的不同&#xff0c;决定对象是否要被回收。 白色表示&#xff1a; 初始状态&#xff1a;所有对象未被 GC 访问。含义…...

Go 中的 Map 与字符处理指南

Go 中的 Map 与字符处理指南 在 Go 中&#xff0c;map 可以存储字符&#xff0c;但需要理解字符在 Go 中的表示方式。在 Go 语言中&#xff0c;"字符" 实际上有两种表示方法&#xff1a;byte&#xff08;ASCII 字符&#xff09;和 rune&#xff08;Unicode 字符&…...

React 第五十二节 Router中 useResolvedPath使用详解和注意事项示例

前言 useResolvedPath 是 React Router v6 提供的一个实用钩子&#xff0c;用于解析给定路径为完整路径对象。 它根据当前路由上下文解析相对路径&#xff0c;生成包含 pathname、search 和 hash 的完整路径对象。 一、useResolvedPath 核心用途 路径解析&#xff1a;将相对…...

Excel 发现此工作表中有一处或多处公式引用错误。请检查公式中的单元格引用、区域名称、已定义名称以及到其他工作簿的链接是否均正确无误。弹窗

Excel 提示“发现此工作表中有一处或多处公式引用错误”通常表示公式中存在无效引用。以下是系统化的检查步骤&#xff0c;帮助你定位和修复问题&#xff1a; 1. 检查单元格引用&#xff1a; 无效单元格引用&#xff1a;检查公式中的单元格地址&#xff08;如 A1、B10&…...