Docker -- 快速入门

镜像与容器

当我们使用Docker安装应用时,Docker会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包含应用运行所需要的环境,配置、系统函数库。Docker会在运行镜像时创建一个隔离环境,称为容器(container)

总结来说:docker的镜像做到了忽略操作系统环境,忽略系统本身的差异去直接部署,Docker会在运行镜像时创建一个隔离环境,docker类似于Windows系统,就相当于在电脑中有下了一个小系统,里面独立运行程序。

镜像仓库:存储和管理镜像的平台,Docker官方维护了一个公共仓库:DockerHub

主要流程:下载镜像运行,形成容器。

如何找到想要的镜像?

在docker服务端执行一个命令即可。

主要执行流程:

在docker客户端输入命令,docker daemon的守护进程会监听该命令,再去对应的镜像仓库去拉去镜像,下载到本地运行,运行时会为镜像区创建一个隔离的环境称之为容器,多个容器之间相互隔离,可以进行多实例部署,形成集群,相互之间没有干扰,也可以在一个服务上去部署多个不同应用的实例,不需要担心相互干扰的问题,搭建集群部署整个复杂的微服务应用非常方便。

总结:有了docker的镜像和容器,运维在部署时就忽略了系统的差异以及应用之间的干扰,节省了非常多的时间。

命令解读
 docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \ -e MYSQL_ROOT_PASSWORD=123 \mysql

第一行 docker run 是命令的起始,所有的docker命令都是以docker为前缀,后面的run是一个子命令,docker命令下有很多很多的子命令,

  • docker run :创建并运行一个容器,-d 是让容器在后台运行,命令结束后,MySQL的进程以及它的容器会持续保持一个运行状态,就不会用影响正常工作,因此 docker run -d 可以认为成一套配套的指令。

  • --name MySQL:给容器起个名字,必须唯一

  • -p 3306:3306:设置端口映射 宿主机端口:容器内端口。容器内端口取决于进程,不需要改动,宿主机的端口可以改变,如果要布置集群的话,就需要改变宿主机端口,防止端口冲突

举例说明:

例如配置一台虚拟机的IP地址为192.168.88.130,我们可以访问到该IP地址,是可以ping通的。

而配置在这台虚拟机上的容器是一个隔离的环境。

比如部署MySQL容器,MySQL启动端口为3306,但是容器是隔离环境,有自己独立的内存空间,有自己独立的文件系统,也有自己独立的网络空间。因此这个MySQL容器中的京城一旦启动,会有自己的IP地址,这个网络空间对外是不可访问的。

因此MySQL客户端无法直连该容器的端口,但是可以连接容器外的虚拟机,即宿主机,为了连接该容器,需要去做一个端口的映射,可以将宿主机的3306端口跟容器的3306端口做一个映射。

因为容器是由docker来控制的,内部完全可以做好这个映射,这样,当客户端访问外部宿主机的3306端口时,docker就会将请求转到容器的3306端口,这样就间接的访问到了容器。即MySQL客户端连接jdbc:mysql://192.168.88.130就能连接到宿主机的3306端口,请求就会转到容器内,这样就实现间接访问了。

这就是端口映射的作用。

  • -e KEY = VALUE:设置环境变量,环境变量是由镜像内部去执行容器时用到的,因此是由镜像来决定的,比如现在是MySQL的容器,MySQL官方规定将来需要怎样的环境变量,这是由镜像制作者去规定的。需要去镜像文档中查看。

  • mysql:指定运行的镜像的名字 docker run 一执行,docker的守护进程会帮助我们搜索和下载并且部署应用,而这些都需要靠容器名来指定。

镜像命名规范

  • 镜像名称一般分为两部分组成:[repository]:[tag]

    • 其中repository就是镜像名

    • tag是镜像的版本

  • 在没有指定tag时,默认是latest,代表最新版本的镜像

Docker基础

常见命令

Docker最常见的命令就是操作镜像、容器的命令,详情可见官方文档:Docker 文档

  • docker pull:拉去镜像,从镜像仓库中下载镜像到本地镜像中

  • docker images :查看所有本地镜像

  • docker rmi :删除指定本地镜像

  • docker build:自定义镜像:需要定义一个docker file 基于docker file文件使用 docker build来完成构建

  • docker save:将打包好的镜像通过save命令保存到本地变成压缩文件,和docker load配合可以将镜像传递,但是使用较少

  • docker load:将压缩好的镜像解压

  • docker push:将本地镜像推到镜像仓库,镜像仓库可以是公用,也可以私用,

以上都是镜像的相关操作

镜像最终要去创建对应的容器还要运行

  • docker run:创建容器并运行,该命令为自动化,如果发现镜像不存在,会先去拉取镜像,之后再自动创建容器,再去运行

  • docker stop:停止容器运行(停止的是容器内部的那个进程),容器还在。

  • docker start:启动容器,将容器内部的停止的进程再次启动

注意事项:docker run每执行一次就会创建一个容器并运行,而docker start只是启动已有容器中停止的进程,不会创建容器。

  • docker ps:查看容器的运行状态 ps(进程状态)

  • docker rm: 删除容器

  • docker logs:查看容器日志

  • docker exec:执行一些命令进入容器的内部,有时需要对容器做修改,可以通过该命令进入容器,进行一些处理

以上就是docker的常用命令了

image-20250614233106661

案例演示:查看DockerHub,拉取Nginx镜像,创建并运行Nginx容器

需求:

  • 在DockerHub中搜索Nginx镜像,查看镜像的名称

  • 拉取Nginx镜像

  • 查看本地镜像列表

  • 创建并运行Nginx容器

  • 查看容器

  • 停止容器

  • 再次启动容器

  • 进入Nginx容器

  • 删除容器

实现步骤:

首先去浏览器查看https://hub.docker.com/,寻找Nginx镜像

image-20250615163913240

执行命令

image-20250615164928989

测试压缩功能

解压功能

image-20250615221322960

创建并运行容器,并查看运行状态

image-20250615221827792

停止容器运行

image-20250615222006303

注意事项:默认情况下 docker ps 查看的是运行中的容器,如果想要查看所有容器状态,就需要去添加 -a 参数

image-20250615222144101

再次启动

image-20250615222350350

以上就是容器的一些基本操作

除此之外还可以查看日志

image-20250615222540449

如果想要一直查看该容器日志,就需要加上参数 - f

主要用在调试场景。

还可以进入容器的内部来操作:

image-20250615223052108

-it 指添加一个可输入的终端 后面跟容器名 进入容器内部后,使用bash命令来进行交互

在容器内部,docker容器模拟了一个计算机,有独立网络,内存,文件系统。

image-20250615223423724

就是独立的Linux系统。

注意事项:不能删除一个正在运行中的容器,可以选择停止运行容器后删除,或者加上 - f 强制删除。

以上就是在docker中常用的命令。

希望对大家有所帮助

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

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

相关文章

输入数量未知如何设置输入

在 C 的算法题中,如果你不知道输入数据有多少组(即测试用例的数量未知),通常的处理方式是使用 循环读取输入直到文件结束 (EOF)。这类题目常见于在线评测系统(如 LeetCode、牛客网、POJ 等&…

如何在Windows上使用qemu安装ubuntu24.04服务器?

2025年6月15日,周日晚上 在Windows上使用QEMU安装Ubuntu 24.04需要完成环境配置、镜像准备、虚拟机创建及系统安装等步骤。以下是综合多个搜索结果后的详细指南: 1. 安装QEMU环境 下载QEMU Windows版 从QEMU官网下载64位安装包(如qemu-w64-s…

前端开发面试题总结-vue2框架篇(二)

Vue2高频问答 一、为什么 Vue 的 data 属性必须声明为返回一个初始数据的函数? 回答重点: Vue 的 data 属性声明成一个返回初始数据的函数,是为了确保每个组件实例都有独立的状态。通过这种方式,避免了组件使用相同的数据对象导致的状态共…

Web第二次方向考核复盘

一、简答题 1. &#xff08;1&#xff09;为什么要清除浮动&#xff1f; 答&#xff1a;当子元素浮动时会脱离文档流&#xff0c;父元素无法正确计算子元素高度导致高度、边框异常显示。同时会影响后续文档流布局。 <style>.box1 {border: solid 2px #000;}.child1 {fl…

Linux入门(十八)read函数

read 读取控制台输入 基本语法 read 选项 参数 选项 -p 指定读取值时的提示符 -t 指定读取值时等待的时间&#xff08;秒&#xff09;&#xff0c;如果没有在指定的时间内输入&#xff0c;就不再等待了 参数 变量&#xff1a;指定读取值的变量名 实例&#xff1a; 1、读取控制…

Python 文件操作详解

文章目录 Python 文件操作详解一、文件操作的基本流程二、文件打开模式详解1. 基本模式2. 扩展模式3. 模式组合示例 三、文件操作方法大全1. 打开和关闭文件2. 读取文件内容3. 写入文件内容4. 文件指针操作 四、文件编码处理五、二进制文件操作六、常见文件操作场景1. 文件内容…

用AI配合MCP快速生成n8n工作流

在数字化时代的浪潮中&#xff0c;AI技术正以前所未有的速度改变着我们的生活和工作方式。从智能家居到智能办公&#xff0c;从数据分析到自动化流程&#xff0c;AI的应用场景无处不在。今天&#xff0c;我们将带你走进一个充满创新与效率的世界&#xff0c;探索如何通过AI大眼…

ArkUI-X框架LogInterface使用指南

ArkUI-X框架支持日志拦截能力&#xff0c;Android侧提供原生接口&#xff0c;用于注入LogInterface接口&#xff0c;框架日志及ts日志通过该接口输出&#xff0c;本文的核心内容是介绍如何在Android平台上有效利用ArkUI-X框架的LogInterface拦截日志。 Android平台创建ArkUI-X…

函数重载与函数模板

函数重载与函数模板 函数重载 函数组成 返回类型 函数名称(参数列表){函数体}函数签名&#xff1a;函数名称(参数列表) C 允许定义同名函数&#xff0c;前提是它们具有不同的签名。这被称为函数重载 。 C 编译器通过检查调用中参数的数量、类型和顺序来选择要调用的适当函…

NLP学习路线图(四十六):可解释性

在自然语言处理(NLP)技术重塑人机交互、信息检索甚至司法决策的今天,一个尖锐的问题愈发凸显:当模型在文本分类中判定你的贷款申请被拒,或在简历筛选中将你排除,你是否有权追问一句——“为什么?” 一、黑箱迷雾:NLP模型的不透明困境 现代NLP的核心驱动力——深度神经…

uniapp的app项目,在华为pad上运行,页面显示异常

最开始为了好调试&#xff0c;运行成h5在浏览器调试的&#xff0c;调完以后&#xff0c;放到pad上。。。天塌了&#xff0c;所有页面异常&#xff0c;感觉被放大了好多&#xff0c;而且页面很乱。。。 查了很多资料&#xff0c;说把px改为rpx&#xff0c;好&#xff0c;全部改…

Linux中的连接符

Linux中的&&连接符 和其它语言类似&#xff0c;在Shell中&#xff0c;&&是一个逻辑运算符&#xff0c;表示逻辑AND&#xff0c;用于连接多个条件表达式 不同的是&#xff0c;在Linux系统中&#xff0c;&&不仅可以连接条件表达式&#xff0c;而且还能连…

装饰模式Decorator Pattern

模式定义 动态地给对象增加额外的职责 对象结构型模式 模式结构 Component&#xff1a;抽象构件 ConcreteComponent&#xff1a; 具体构件 Decorator&#xff1a;抽象装饰类 ConcreteDecorator&#xff1a; 具体装饰类 抽象装饰类代码 public class Decorator extends Compo…

https说明

http是无状态的&#xff0c;https是在http应用层协议和tcp传输控制层之间加了一层&#xff0c;主要功能包括加密传输内容&#xff0c;校验信息是否完整&#xff0c;信息是否被篡改等。http的网络传输&#xff0c;源端应用层发送http请求&#xff0c;传输到源端的控制层&#xf…

实时操作系统(FreeRTOS、RT-Thread)RISC-V

FreeRTOS&#xff1a;FreeRTOS™ - FreeRTOS™ RT-Thread&#xff1a;rt-thread.org VxWorks&#xff1a; QNX Neutrino RTOS&#xff1a; RT-Linux&#xff1a; 一、 实时操作系统介绍 实时操作系统&#xff08;Real Time Operating System&#xff0c;简称RTOS&#xff…

Python3除标准库外更全面的XML解析方案

一、扩展解析库方案 lxml高性能解析 from lxml import etree doc etree.parse(data.xml) # XPath 2.0增强查询 nodes doc.xpath(//student[score>90]/name/text())优势&#xff1a;支持XPath 2.0语法和XSLT转换&#xff0c;比标准库快5-10倍 BeautifulSoup混合解析 fr…

同时装两个MySQL, 我在MySQL5的基础上, 安装MySQL8

目录 1. 前言 2. 下载MySQL 3. 安装MySQL 3.1 第一步:选择MySQL ​编辑 3.2 第二步:存储地址 3.3 第三步 3.4 第四步:完成基础配置 3.5 第五步 3.6 第六步:数据库密码 3.7 第七部:服务名 4. 环境变量 4.1 复制MySQL的bin地址 4.2 进入高级系统设置 4.3 PATH 4.4 更改…

Visual Studio 2022打包程序流程

Visual Studio 2022打包程序流程 打开管理拓展 安装Microsoft Visual Studio Installer Projects 关闭软件才能继续安装 安装完成后点击&#xff0c;解决方案&#xff0c;创建新项目 添加&#xff1a;setup project 打开软件的路径 复制路径 添加文件 粘贴刚才复制的路径&…

web3方法详解

web3.py 是一个功能强大的 Python 库,用于与以太坊区块链交互。它提供了多种模块和功能,涵盖账户管理、智能合约交互、交易发送、区块链数据查询等。以下是 web3.py 的主要功能模块及其用途: 1. Web3 核心模块 功能:提供基础连接、工具函数和核心功能。 常用方法: Web3(…

HTML5+JS实现一个简单的SVG 贝塞尔曲线可视化设计器,通过几个点移动位置,控制曲线的方向

三次贝塞尔曲线,二次贝塞尔曲线有什么区别 https://blog.csdn.net/xiaoyao961/article/details/148678265 SVG 贝塞尔曲线可视化设计器 下面是一个简单的贝塞尔曲线可视化设计器&#xff0c;使用 HTML5 和 JavaScript 实现。这个设计器允许你通过拖动控制点来实时调整贝塞尔曲…