一:docker概述

因为 Docker 轻便、快速的特性,可以使应用达到快速迭代的目的。每次小的变更,马上就可以看到效果,而不用将若干个小变更积攒到一定程度再变更。每次变更一小部分其实是一种非常安全的方式,在开发环境中能够快速提高工作效率。
Docker容器能够帮助开发人员、系统管理员、质量管理和版本控制工程师在一个生产环节中一起协同工作。制定一套容器标准能够使系统管理员更改容器的时候,程序员不需要关心容器的变化,而更专注自己的应用程序代码。从而隔离开了开发和管理,简化了开发和部署的成本。

1.什么是Docker

如果要方便的创建运行在云平台上的应用,必须要脱离底层的硬件,同时还需要任何时间地点可获取这些资源,这正是 Docker 所能提供的。Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。通过这种容器打包应用程序,意味着简化了重新部署、调试这些琐碎的重复工作,极大的提高了工作效率。
docker 是目前较为主流的容器技术。容器技术是一种轻量级的虚拟化技术,它可以让应用程序及其依赖项打包在一个独立的单元中运行,从而实现应用的隔离、可移植性和资源的高效利用。以下从概念、原理、与传统虚拟化技术的对比、优势、应用场景等方面详细介绍容器技术。
容器就像是一个独立的“盒子”,这个“盒子”里装着运行某个应用所需要的所有东西,包括代码、运行时环境、系统工具、系统库等。不同的容器之间相互隔离,每个容器都有自己独立的文件系统、进程空间、网络接口等,就好像它们是在不同的机器上运行一样,但实际上它们是共享宿主机的操作系统内核。


2:Docker 的优势


Docker 容器运行速度很快,启动和停止可以在秒级实现,比传统虚拟机要快很多;Docker 核心解决的问题是利用容器来实现类似虚拟机的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源因此,Docker 容器除了运行其中的应用之外,基本不消耗额外的系统资源,在保证应用性能的同时,又减小了系统开销,使得一台主机上同时运行数千个Docker 容器成为可能。
传统虚拟化技术(如 Vware、VirtualBox 等)是通过虚拟机管理程序(Hypervisor)在物理服务器上创建多个虚拟机(V),每个虚拟机都包含完整的操作系统。而容器技术是在操作系统层面进行虚拟化,多个容器共享宿主机的操作系统内核。
容器技术和传统虚拟化的主要区别在于:
资源占用:传统虚拟机需要为每个虚拟机分配独立的操作系统,这会占用大量的系统资源》而容器共享宿主机的内核,只包含应用及其依赖项,资源占用相对较少,启动速度也更快

隔离性:虚拟机提供了更高程度的隔离,因为每个虚拟机都有自己独立的操作系统;容器的隔离性相对较弱,但对于大多数应用场景来说已经足够,并且可以通过合理的配置和管理来增强隔离性。
性能:由于虚拟机存在额外的虚拟化层,会带来一定的性能开销;容器直接运行在宿主机的内核上,性能损耗较小,更接近原生应用的性能
Docker 操作方便,可以通过 Dockerfile 配置文件支持灵活的自动化创建和部署。表1将 Docker容器技术与传统虚拟机的特性进行了比较。

特性docker容器虚拟机
启动速度秒级分钟级
计算能力损耗几乎无损耗50%左右
性能接近原生弱于
系统支持量(单机)上千个几十个
隔离性资源限制完全隔离

容器技术的优势主要体现在以下几个方面:
隔离性:不同的容器之间相互隔离,一个容器的故障或异常不会影响其他容器的运行,提高
了应用的稳定性和安全性。
可移植性:容器将应用及其依赖项打包成一个独立的单元,使得应用可以在不同的环境中(如开发环境、测试环境、生产环境)无缝迁移和运行,避免了“在我的机器上能运行,但在你的机器上不行” 的问题。
资源高效利用:容器共享宿主机的操作系统内核,不需要为每个应用运行独立的操作系统,大大减少了资源的浪费,提高了服务器的利用率。
快速部署和扩展:容器的启动速度非常快,通常只需要几秒钟,而且可以根据需要快速创建和销毁容器,方便进行应用的快速部署和弹性扩展。

Docker之所以拥有众多优势,与操作系统虚拟化自身的特点是分不开的。传统虚拟机需要有额外的虚拟机管理程序和虚拟机操作系统层,而 Docker 容器则是直接在操作系统层面之上实现的虚拟化。图 2是 Docker 与传统虚拟机架构。

3:docker的应用场景

开发环境管理:开发人员可以使用容器来创建一致的开发环境,确保团队成员之间的环境一致性,提高开发效率。
持续集成和持续部署(CI/CD):在CI/CD流程中,容器可以帮助实现应用的快速打包、测试和部署,实现自动化的软件开发流程。
微服务架构:容器技术非常适合微服务架构,每个微服务可以打包成一个独立的容器,独立开发、测试和部署,提高系统的可伸缩性和容错性。
云计算:云服务提供商可以利用容器技术为用户提供更高效、灵活的计算资源,用户可以根据自己的需求快速创建和管理容器化的应用。


4:Docker 核心概念


(1)镜像


镜像、容器、仓库是 Docker 的三大核心概念。其中 Docker 的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向 Docker 容器引擎的只读模板。例如:一个镜像可以是一个完整的 cent05 操作系统环境,称为一个 centos 镜像;也可以是一个安装了 MySQL 的应用程序,称之为一个 MySQL镜像等等。
Docker 提供了简单的机制来创建和更新现有的镜像,用户也可以从网上下载已经创建好的镜像直接使用。


(2)容器


Docker 的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证安全性的平台。可以将容器看作是一个简易版的 Linux 环境,Docker 利用容器来运行和隔离应用。


(3)仓库


Docker 仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用 push 命令将它上传到公有仓库(Public)或者私有仓库(Private)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取。
仓库注册服务器(Registry)是存放仓库的地方,其中包含了多个仓库。每个仓库集中存放某一类镜像,并且使用不同的标签(tag)来区分它们。目前最大的公共仓库是 docker Hub,存放了数量庞大的镜像供用户下载使用。

二:docker安装

Docker 支持在主流的操作系统平台上进行使用,包括 windows 系统、Linux 系统、以及 Macos 系统等。目前最新的 RHEL、Centos 以及 ubuntu 系统官方软件源中都已经默认自带了 Docker 包,可直接安装使用,也可以用 Docker 自己的 YUM 源进行配置。
Centos 系统下安装 Docker 可以有两种方式:一种是使用 CURL 获得 Docker 的安装脚本进行安装,另一种是使用 YUM 仓库来安装 Docker。注意:目前 Docker 只能支持 64 位系统。

1.本安装方式使用阿里的软件仓库

(1)关闭系统防火墙

systemctl stop firewalld

setenforce 0

(2)下载docker的repo文件

cd /etc/yum.repos.d/

浏览器:阿里云镜像站:容器——docker-ce/linux/centos/docker-ce.repo   将文件保存至桌面,再拉取到yum.repos.d目录下

(3)替换仓库地址

sed -i 's/$releasever/8/g' docker-ce.repo

sed -i 's/$basearch/x86_64/g' docker-ce.repo

(4)更新索引文件并安装docker

dnf clean all

dnf makecache

dnf – y install docker-ce

(5)添加国内镜像站

cd /etc/docker/

vi daemon.json

{

“exec-opts”: [“native.cgroupdriver=systemd”],

“registry-mirrors”: [

"https://docker.m.daocloud.io",

"https://docker.imgdb.de",

"https://docker-0.unsee.tech",

"https://docker.hlmirror.com",

]

}

(6)开启docker服务

systemctl daemon-reload

systemctl start docker

systemctl enable docker

docker version

(7)优化内核参数

vi /etc/sysctl.conf

net.ipv4.ip_forward=1

net.bridge.bridge-nf-call-iptables=1           //添加

net.bridge.bridge-nf-call-ip6tables=1

sysctl -p

三.docker镜像操作

1.获取镜像


1. 拉取镜像(pull)

• 命令:docker pull [仓库名]/[镜像名]:[标签]

• 参数:

◦ 仓库名:镜像仓库地址(如 Docker Hub 的 library 或私有仓库)。

◦ 镜像名:镜像名称(如 nginx、python)。

◦ 标签:镜像版本(如 latest、3.9),默认拉取 latest。

2. 查看本地镜像(images)

• 命令:docker images

• 参数:

◦ -q:仅显示镜像 ID。

◦ --filter:按条件筛选(如 dangling=true 查看无标签镜像)。

3. 创建镜像(build)

• 命令:docker build -t [镜像名:标签] [Dockerfile路径]

• 参数:

◦ -t:指定镜像名称和标签。

◦ --build-arg:传递构建时变量(如 --build-arg HTTP_PROXY=xxx)。

◦ -f:指定 Dockerfile 路径(默认当前目录)。

4. 推送镜像(push)

• 命令:docker push [仓库名]/[镜像名]:[标签]

• 参数:同拉取镜像,需先登录仓库(docker login)。

5. 删除镜像(rmi)

• 命令:docker rmi [镜像ID/名称:标签]

• 参数:

◦ -f:强制删除(即使有容器依赖)。

◦ 批量删除:docker rmi $(docker images -q -f dangling=true)(删除无依赖镜像)。

四.容器(Container)操作

1. 运行容器(run)

• 命令:docker run [参数] [镜像名:标签] [命令]

• 核心参数:

◦ -d:后台运行(守护进程模式)。

◦ -p:端口映射(如 -p 8080:80,主机端口:容器端口)。

◦ -v:挂载目录(如 -v /主机路径:/容器路径)。

◦ -e:设置环境变量(如 -e MYSQL_ROOT_PASSWORD=123)。

◦ --name:指定容器名称。

◦ --rm:容器退出后自动删除。

◦ --network:指定网络模式(如 bridge、host)。

2. 查看容器(ps)

• 命令:docker ps [参数]

• 参数:

◦ -a:显示所有容器(包括已停止的)。

◦ -q:仅显示容器 ID。

◦ -l:显示最近创建的容器。

3. 启动/停止容器(start/stop)

• 命令:

◦ 启动:docker start [容器ID/名称]

◦ 停止:docker stop [容器ID/名称]

• 参数:

◦ stop 默等待 10 秒,-t 可指定超时时间(如 -t 30)。

4. 进入容器(exec/attach)

• 命令:

◦ docker exec -it [容器ID/名称] /bin/bash(推荐,不中断容器进程)

◦ docker attach [容器ID/名称](直接连接 stdin/out,中断可能停止容器)

• 参数:

◦ -i:保持标准输入打开。

◦ -t:分配伪终端。

5. 删除容器(rm)

• 命令:docker rm [容器ID/名称]

• 参数:

◦ -f:强制删除(即使正在运行)。

◦ 批量删除:docker rm $(docker ps -aq -f status=exited)(删除已退出容器)。

6. 查看容器日志(logs)

• 命令:docker logs [容器ID/名称]

• 参数:

◦ -f:实时跟踪日志(类似 tail -f)。

◦ --tail:显示最近 N 行日志(如 --tail 100)。

三、常用组合操作

• 创建并运行容器:
docker run -d --name nginx -p 80:80 nginx(后台运行 Nginx,映射 80 端口)。

• 基于容器创建镜像:
docker commit [容器ID] [新镜像名:标签](慎用,推荐通过 Dockerfile 构建)

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

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

相关文章

关于 RSA:RSA 加密算法过程

RSA 是一种非对称加密算法,用“公钥”加密,用“私钥”解密,保证数据传输安全。 比喻理解:锁和钥匙 想象一下: 公钥是“上锁的锁”,别人可以用它锁住箱子(加密),但打不开…

SM3算法C语言实现(无第三方库,带测试)

一、SM3算法介绍 SM3算法是中国国家密码管理局(OSCCA)于2010年发布的商用密码散列函数标准,属于我国自主设计的密码算法体系之一 ,标准文档下载地址为:SM3密码杂凑算法 。SM3算法输出长度为256位(32字节&a…

搜索二叉数(c++)

前言 在学习数据结构的时候我们学习过二叉树,那啥是搜索二叉树呢?我们知道单纯的二叉树没有增删查改的实际意义,因为没有任何限制条件的二叉树其实用处很局限。但是堆就不一样了,他就是一个二叉树加上了大小堆的限制条件&#xf…

vc MFC在opencv的Mat图像上显示中文:Mat转位MFC的CImage,画图写文字,再转回Mat

vc MFC在opencv的Mat图像上显示中文:Mat转位MFC的CImage,画图写文字,再转回Mat // Step 1 创建CImage获取dc int iImgW matImgSized.cols; int iImgH matImgSized.rows; int iChannel matImgSized.channels(); bool bCon matImgSized.is…

Docker环境部署

目录 一:Docker 概述 1.什么是 Docker 2:Docker 的优势 3.Docker 的应用场景 4:Docker 核心概念 二:Docker 安装 1:本安装方式使用阿里的软件仓库 三:Docker 镜像操作 1:获取镜像 2.查看镜像信息 3.查看镜像详细信息 4.修改镜像标签(老名字新名字) 5:删…

Axios 拦截器实现原理深度剖析:构建优雅的请求处理管道

在构建现代前端应用时,网络请求处理是关键环节。作为最流行的HTTP客户端库之一,Axios通过其拦截器机制(Interceptors)提供了强大的请求/响应处理能力。本文将深入Axios源码,揭示拦截器背后的精妙设计与实现原理。 一、…

宝塔安装nginx-http-flv-module,音视频直播,第二篇

1,先安装环境安装nginx 先卸载原有nigix nigix 大于等于 1.2.6 cd /www/server # 进入宝塔目录 yum install git -y git clone https://gitee.com/winshining/nginx-http-flv-module.git 使用源码安装nigix 在 自定义模块 区域点击「添加」,填写以下参…

低延迟4G专网:保障关键业务的实时通信

在工业互联网、智慧园区、应急通信等对“实时性”要求极高的场景中,网络延迟的高低,直接决定了业务运行的可靠性与安全性。IPLOOK依托多年核心网研发经验,推出的低延迟4G专网解决方案,正是为此类关键业务打造的“通信专线”&#…

NLP语言发展路径分享

自然语言处理初期发展历程 早期:离散表示 one-hot(只表达“有/无”,语义完全丢失)→ n-gram(局部上下文,但高维稀疏)→ TF-IDF(考虑词频与权重,但不能表达词关联&#x…

如何将文件从安卓设备传输到电脑?

将文件从 Android 手机传输到 PC 是例行公事吗?想让文件传输更轻松吗?幸运的是,您可以从本文中获得 7 种方法,其中包含详细的步骤,帮助您轻松了解如何将文件从 Android 传输到 PC,涵盖了从无线工具到传统 U…

【经验分享】浅谈京东商品SKU接口的技术实现原理

京东商品 SKU 接口的技术实现原理涉及数据建模、架构设计、接口协议、安全机制及性能优化等多个技术层面。以下从技术角度详细拆解其实现逻辑: 一、SKU 数据模型与存储架构 1. SKU 数据模型设计 核心字段定义: 基础属性:SKU ID、商品名称、…

虚拟机配置node.js(前端环境搭建)

1.在windows下安装node.js(以及npm) 修改npm镜像为阿里云的 npm install --registryhttps://registry.npmmirror.com 2.在Linux下安装node.js(Centos7 只支持16版本之前的) wget https://npmmirror.com/mirrors/node/v15.14.0/n…

多模态大语言模型arxiv论文略读(129)

Task Success Prediction for Open-Vocabulary Manipulation Based on Multi-Level Aligned Representations ➡️ 论文标题:Task Success Prediction for Open-Vocabulary Manipulation Based on Multi-Level Aligned Representations ➡️ 论文作者:M…

【Redis】Redis 关于 BigKey 的实践规约

目录 一、BigKey 的概念 1.1 普通 key 的设计规则 1.2 BigKey 的定义 1.3 BigKey 存在的问题 二、BigKey 的发现与解决方案 第一种方式:redis-cli --bigkeys 第二种方式:scan扫描 第三种方式:第三方工具 第四种方式:网络…

Golang 与 C/C++ 交互实践

在软件开发的实际场景中,我们常常会遇到需要将不同语言的优势结合起来的情况。Golang 凭借其高效的并发性能和简洁的语法,在网络编程和系统开发领域备受青睐;而 C/C 则以其强大的底层操作能力,在系统资源管理方面具有独特优势。那…

五子棋流量主小程序单模式多模式开源版

功能和特点: 核心游戏功能: 1515 标准棋盘 黑白棋交替落子 自动判断胜负和平局 悔棋功能 计时功能 UI 设计: 木纹风格棋盘 立体感棋子(使用阴影和渐变) 响应式布局,适配不同屏幕尺寸 胜利弹窗动画 交互体验…

Python古代文物成分分析与鉴别研究:灰色关联度、岭回归、K-means聚类、决策树分析

原文链接:tecdat.cn/?p42718分析师:Gan Tian 在文化遗产保护领域,古代玻璃制品的成分分析一直是研究中西方文化交流的关键课题。作为数据科学家,我们在处理某博物馆委托的古代玻璃文物保护咨询项目时,发现传统分析方法…

RabbitMQ消息队列实战指南

RabbitMQ 是什么? RabbitMQ是一个遵循AMQP协议的消息中间件,它从生产者接收消息并传递给消费者,在这个过程中,根据路由规则进行消息的路由、缓存和持久化。 AMQP,高级消息队列协议,是应用层协议的一个开放…

用Java将PDF转换成GIF

为什么要将 PDF 文件转换为 GIF 图片? PDF 是一种矢量图像格式(因此可以根据指定的尺寸进行渲染),而 GIF 是一种有损的、固定尺寸的位图文件,像素值固定。因此,将 PDF 转换为 GIF 文件时,我们需…

Redis之分布式锁(2)

上一篇文章我们介绍了什么是分布式锁和分布式锁的一些基本概念。这篇文章我们来讲解一下基于数据库如何实现分布式锁。 基于数据库实现分布式锁 基于数据库实现分布式锁可以分为两种方式,分别是基于数据库表和基于数据库排他锁。 基于数据库表 要实现分布式锁&…