聊聊 Docker

news2024/11/16 17:29:56

聊聊 Docker

Docker 是什么?

定义

Docker

Docker 是一款 开源的应用容器引擎。

简单来说,就是 以容器虚拟化技术为基础的软件。可以把应用程序和所依赖的包一起打包到一个可移植的镜像中,发布到 Linux 或者 Windows 上运行。(代码 + 运行环境)

虚拟机与容器技术对比

虚拟机

虚拟机 可以高效使用计算机资源(比如可以解决同一种服务端口冲突、程序依赖版本库不同、进程受限制等问题) ,常见的虚拟机有: vmware、virtualbox

虚拟机的 底层原理 是基于 hypervisor(硬件抽象层) ,也叫 虚拟机监视器(VMM)

容器技术

是一种沙盒技术,相互之间不会有任何接口。将应用运行在容器中,容器之间隔离的。

容器技术更 关注应用本身,应用和所依赖环境的共享和复用。

LXC

Linux Container (简称 LXC),是一种内核轻量级的操作系统层虚拟化技术,容器化技术就是基于 LXC 实现的。

四个维度对比

四个维度对比

由此可见,为什么容器技术会出现,为什么容器技术会那么流行,是因为虚拟机有痛点的,容器技术就是为了解决这些痛点而生的。而 Docker 就是容器化技术的代表。

Docker 的应用场景

Docker 的应用场景

Docker 的实现原理与优势

Docker 的技术架构

Docker 是由 dotCloud 公司于 2013 年推出的产品,用 GO 语言编写的。

Docker 有两种发行版本 ,分别是 CE (Community Edition,社区版)和 EE (Enterprise Edition,企业版)。

Docker 是 C/S 架构。客户端(docker cli,执行程序),通过命令行和 API 形式与守护进程(docker daemon,提供 Docker 服务)进行通讯。

C/S 架构

通讯

举个具体的例子,在常见的虚拟机实现中,我们要搭建一套 LNMP 结构的服务,我们通常会建立一个虚拟机,在虚拟机中安装上 Linux 系统,之后分别安装 Nginx、MySQL 和 PHP。

而在 Docker 里,最佳的实践是分别基于 Nginx、MySQL 和 PHP 的镜像建立三个容器,分别运行 Nginx、MySQL 和 PHP ,而它们所在的虚拟操作系统也直接共享于宿主机的操作系统。

Docker 的实现原理

Linux 三大技术

Docker 的实现,主要归结于 Linux 的三大技术:命名空间(Namespaces)、控制组(Control Groups)和联合文件系统(Union FIle System)。
Docker 的实现归结于 Linux 三大技术

命名空间(Namespaces)

在编程语言中,命名空间的主要目的就是为了集合相同模块的类,区分不同模块间的同名类。
Linux 内核的命名空间,就是 能够将计算机资源进行切割划分,形成各自独立的空间。
如 User Namespace、Net Namespace、PID Namespace、Mount Namespace 等等。

命名空间(Namespaces)

利用 PID Namespace,Docker 就实现了容器中隔离程序运行中进程隔离这一目标。

控制组(Control Groups)

资源控制组的作用就是 控制计算机资源 。CGroups 主要做的是硬件资源的隔离。 除了资源的隔离,还有资源分配这个关键性的作用。

通过 CGroups,我们 可以指定任意一个隔离环境对任意资源的占用值或占用率 ,这对于很多分布式使用场景来说是非常有用的功能。

控制组(Control Groups)

联合文件系统(Union FIle System)

一种能够 同时挂载不同实际文件或文件夹到同一目录,形成一种联合文件结构的文件系统。

联合文件系统(Union FIle System)

Docker 用它解决虚拟环境对文件系统占用过量,实现虚拟环境快速启停等问题。

Docker 大幅减少了虚拟文件系统对物理存储空间的占用。(例子:Git,Git 中每进行一次提交,Git 并不是将我们所有的内容打包成一个版本,而只是将修改的部分进行记录,这样即使我们提交很多次后,代码库的空间占用也不会倍数增加)

Docker 的优势

  1. 应用的安全性、可移植性和节约成本;
  2. 让自动化部署更简单(持续集成CI和持续部署CD,快速交付);
  3. 加速应用架构现代化进程(如微服务架构);
  4. 充分利用服务器资源;
  5. 跨平台部署和动态伸缩(如使用K8s编排工具管理)。

Docker 的安装

macos 安装

安装教程:https://www.runoob.com/docker/macos-docker-install.html

windows 安装

安装教程:https://www.runoob.com/docker/windows-docker-install.html 或者
https://blog.58heshihu.com/index.php/archives/286/

Linux 安装

centos:https://www.runoob.com/docker/centos-docker-install.html
ubuntu:https://www.runoob.com/docker/ubuntu-docker-install.html

Docker 的四大核心组成

Docker 的四大核心组成

镜像(Image)

可以理解为 一个只读的文件包,其中包含了虚拟环境运行最原始文件系统的内容。

镜像(Image)

查看镜像列表:docker images

查看镜像列表:docker images

镜像命名格式:开发者 / 镜像名字:版本号

镜像命名格式:开发者 / 镜像名字:版本号

拉取: docker pull 镜像名称

拉取: docker pull 镜像名称

搜索: docker search 镜像名称 //从docker hub搜索

镜像详细信息: docker inspect 镜像名称/ID

删除镜像: docker rmi 镜像名称/ID

容器(Container)

简介

在容器技术中, 容器就是用来隔离虚拟环境的基础设施,而在 docker 里,它也被引申为隔离出来的虚拟环境。

容器包括

  • 一个 Docker 镜像
  • 一个程序运行环境
  • 一个指令集合

容器的生命周期

  • Created:容器已经被创建,容器所需的相关资源已经准备就绪,但容器中的程序还未处于运行状态
  • Running:容器正在运行,也就是容器中的应用正在运行
  • Paused:容器已暂停,表示容器中的所有程序都处于暂停 ( 不是停止 ) 状态
  • Stopped:容器处于停止状态,占用的资源和沙盒环境都依然存在,只是容器中的应用程序均已停止
  • Deleted:容器已删除,相关占用的资源及存储在 Docker 中的管理信息也都已释放和移除

常用命令

查看正在运行的容器列表:docker ps
所有容器:docker ps -a
创建启动容器:docker run --name redis -d redis:5.0.15
停止容器:docker stop 容器名字/ID
启动/重启容器:docker start/restart 容器名字/ID
删除容器:docker rm [-f] //-f强制,可以删除正在运行的容器
进入容器:docker exec -it redis bash //容器内部是虚拟出来的一个Linux
查看容器报错信息:docker logs 容器ID

网络(Network)

容器网络 实质上也是由 Docker 为应用程序所创造的虚拟环境的一部分,它能让应用从宿主机操作系统的网络环境中独立出来,形成容器自有的网络设备、IP 协议栈、端口套接字、IP 路由表、防火墙等等与网络相关的模块。

网络(Network)

  • 沙盒(Sandbox)提供了容器的虚拟网络栈,也就是之前所提到的端口套接字、IP 路由表、防火墙等的内容。其实现隔离了容器网络与宿主机网络,形成了完全独立的容器网络环境

  • 网络(Network)可以理解为 Docker 内部的虚拟子网,网络内的参与者相互可见并能够进行通讯。Docker 的这种虚拟网络也是于宿主机网络存在隔离关系的,其目的主要是形成容器间的安全通讯环境

  • 端点(Endpoint)是位于容器或网络隔离墙之上的洞,其主要目的是形成一个可以控制的突破封闭的网络环境的出入口。当容器的端点与网络的端点形成配对后,就如同在这两者之间搭建了桥梁,便能够进行数据传输了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KuxNurAy-1692625431644)(http://flt-pan.58heshihu.com/blog/typecho/llkx21og.png)]

Docker 容器网络一共有 5 种网络驱动 ,网络驱动,分别是: Bridge Driver(网桥 默认)、Host Driver、Overlay Driver(集群)、MacLan Driver、None Driver。

Docker 容器网络一共有 5 种网络驱动

容器之间以及宿主机与容器之间可以通过端口来进行访问。

常用命令

查看网络列表:docker network ls
容器加入网络:

docker run -d --name mysql -e MYSQL_RANDOM_ROOT_PASSWORD=yes --network network_name mysql:5.7
docker run -d --name php --link mysql --network network_name php:latest

端口映射:

docker run -d --name nginx -p 8080:80 nginx:1.12 //80为容器的端口,8080可为宿主机或别的容器的端口

数据卷(Volume)

在 Docker 中,通过 bind mount、volume、tmpfs mount 这几种方式进行数据共享或持久化的文件或目录,我们都称为数据卷 (Volume)。

数据卷(Volume)

Docker 的数据卷一共 有 3 中挂载方式 ,分别是: Bind Mount、Volume、Tmpfs Mount

  • Bind Mount 能够直接将宿主操作系统中的目录和文件挂载到容器内的文件系统中,通过指定容器外的路径和容器内的路径,就可以形成挂载映射关系,在容器内外对文件的读写,都是相互可见的

  • Volume 也是从宿主操作系统中挂载目录到容器内,只不过这个挂载的目录由 Docker 进行管理,我们只需要指定容器内的目录,不需要关心具体挂载到了宿主操作系统中的哪里

  • Tmpfs Mount 支持挂载系统内存中的一部分到容器的文件系统里,不过由于内存和容器的特征,它的存储并不是持久的,其中的内容会随着容器的停止而消失

bind mount方式:

docker run -d --name nginx_test -v /nginx/html:/usr/share/nginx/html nginx

查看容器挂在文件:

docker exec nginx_test ls /usr/share/nginx/html

利器 docker-compose

docker-compose 是用于定义和运行多容器 Docker 应用程序的工具(集成部署),使用 docker-compose 可以高效管理容器。

使用步骤:

1、Dockerfile 定义应用程序的环境(定制自己的镜像源)
2、docker-compose.yml 定义构成应用程序的服务,多个容器一起执行
3、docker-compose up 启动并运行整个应用程序
备注:Linux需单独安装docker-compose,macos和windows已经集成

实战案例 - 搭建 LNMP 环境

源码下载: https://github.com/zhangdejian/docker_lnmp.git

请参考我的另外一篇博客: https://learnku.com/articles/39417 (Dockerfile 方式定制 lnmp 环境)

Docker 的不足

  1. 必须在64位机器上运行,目前仅支持x86_64和AMD64;
  2. 系统的Linux内核必须是3.8或者更新;
  3. 内核必须支持cgroups和命名空间;
  4. docker对disk的管理比较有限;
  5. 网络管理相对简单,主要是机遇namespace隔离;
    6.container随着用户进程的停止而销毁,container中的log等用户数据不方便收集。

Docker 的学习资源

官网: https://docs.docker.com/engine/reference/run/
中文手册: https://docker_practice.gitee.io/zh-cn/basic_concept/image.html
菜鸟教程: https://www.runoob.com/docker/docker-tutorial.html
掘金社区: https://juejin.cn/tag/Docker
开源中国: https://www.oschina.net/question/tag/docker
SegmentFault: https://segmentfault.com/t/docker
推荐入门书籍:《Docker 技术入门与实战》、《Docker 进阶与实战》华为团队
优秀文章:
CentOS 安装 docker
Dockerfile 方式定制 lnmp 环境
Docker 搭建 Jenkins 实现自动部署
Docker+LNMP+Jenkins+ 码云实现 PHP 代码自动化部署
Docker 操作命令大全

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

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

相关文章

数据通信——传输层(传输层概述)

引言 终于到传输层了,网络层还有很多需要补充的,后期在慢慢填补了。 我们看哈!在物理层我们设计出来各种硬件,然后使它们在物理上相互连接,信号以比特流的形式进行发送;随后,在数据链路层&#…

Mybatis介绍和搭建(详细搭建步骤)

目录 一、mybatis介绍 官方简介 通俗易懂 二、搭建步骤 1.创建Maven项目 2.创建数据库并建表和相关类 3.创建全局配置文件,配置数据库连接信息 4.配置sql映射文件 5.测试 一、mybatis介绍 官方简介 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存…

C语言和JavaScript中的默认排序行为对比

前言 今天在js里使用sort时遇见了一个不理解的现象 即使用sort默认排序后 9 从排序前的第一位被排到了最后一位.一开始我对js sort的理解和c一样,然后通过查阅后发现并不是这样. 正文 排序是一项常见而重要的操作。不同的编程语言提供了不同的排序函数&#xf…

Vue开发中如何解决国际化语言切换问题

Vue开发中如何解决国际化语言切换问题 引言: 在如今的全球化时代,应用程序的国际化变得越来越重要。为了让不同地区的用户能够更好地使用应用程序,我们需要对内容进行本地化,以适应不同语言和文化环境。对于使用Vue进行开发的应用…

ROS2 中的分布式系统

一、说明 当您运行 ROS2 应用程序时,通常需要在不同机器的不同位置运行 ROS2 节点。由于 ROS2 在抽象的 DDS 层中使用节点之间的通信,因此我们可以非常轻松地安排通信。 为了充分理解 ROS2 的架构,我建议您熟悉本文。 出于本文的目的&#xf…

Java 计算生肖,java Data中获取年,根据生日日期获取生肖注解,根据输入时间获取生肖,自定义注解的方式获取生肖 根据年份时间获取十二生肖

最近,开发中需要增加生肖,但是不想增加字段,于是通过注解的方式,实现生日与生肖的转换。 话不多说,直接上代码,如下: 实体类中的字段,添加自定义注解(ToChineseZodiacSe…

各地区-不同行业-就业、失业、工资144个指标(1990-2021年)

一、数据介绍 数据名称:各地区-不同行业-就业、失业、工资144个指标 数据年份:1990-2021年(1990-2007缺失较多) 数据样本:994条 数据整理:自主整理 二、参考文献 [1]戚聿东,刘翠花,丁述磊.数字经济发展…

数据库系统课设——基于python+pyqt5+mysql的酒店管理系统(可直接运行)--GUI编程

几个月之前写的一个项目,通过这个项目,你能学到关于数据库的触发器知识,python的基本语法,python一些第三方库的使用,包括python如何将前后端连接起来(界面和数据),还有界面的设计等…

Python OCR 使用easyocr库将图片中的文章提取出来

Python OCR 使用easyocr库将图片中的文章提取出来 初环境内容步骤一:安装easyocr库步骤二:导入必要的库步骤三:创建OCR阅读器对象步骤四:指定要识别的图片路径步骤五:执行OCR识别并提取文章内容步骤六:遍历…

vscode如何关闭受限模式

受限模式旨在实现安全地浏览代码 第一步: 第二步:输入trust,找到Security.workspace.trust,取消勾选 第三步: 重启vscode.

企业都在用的热门客服系统

客户服务是现如今企业抢占市场的重要因素。客户越来越重视企业服务,而优质的客户服务也会为企业带来正向且长期的收益。而市场上这么多客户服务系统哪个好用? 企业选购好用的客户服务系统的时候要注意以下几点: 一、选购注意事项&#xff1…

TheGem主题 - 创意多用途和高性能WooCommerce WordPress主题/网站

TheGem主题概述 – 适合所有人的TheGem 作为设计元素、样式和功能的终极 Web 构建工具箱而设计和开发,TheGem主题将帮助您在几分钟内构建一个令人印象深刻的高性能网站,而无需触及一行代码。不要在编码上浪费时间,探索你的创造力&#xff01…

Python“牵手”1688商品详情数据采集方法,1688API申请步骤说明

1688平台API接口是为开发电商类应用程序而设计的一套完整的、跨浏览器、跨平台的接口规范。 1688API接口是指通过编程的方式,让开发者能够通过HTTP协议直接访问1688平台的数据,包括商品信息、店铺信息、物流信息,评论数据,店铺订…

rtmp直播

技术要求:nginxnginx-rtmpffmpegVLC 跟着大佬走的: 传送门 准备工作: 首先需要一台公网ip的服务器 这是使用天翼云的弹性云主机:免费试用1个月 天翼云官网 点击关机,更多里面选择重置密码, 默认用户名为…

EMQ 成功通过 SOC 2 Type I 认证,为全球客户的数据安全保驾护航

近日,EMQ 正式地通过了国际权威鉴证标准 SOC 2 审计,并荣获国际四大会计师事务所之一颁发的 SOC 2 Type I 鉴证报告,这使其成为全球物联网 MQTT 消息服务的安全践行者。此次认证进一步证实,EMQ 为其旗下的全托管 MQTT 消息云服务 EMQX Cloud 以及企业级 MQTT 物联网接入平台 EM…

老师如何制作电子成绩单?

随着科技的不断进步,电子成绩单已经成为现代教育管理的一项重要工具。相较于传统的纸质成绩单,易查分电子成绩单具有方便快捷等各种优势,为学生、家长和学校带来了诸多便利。这篇文章就给大家介绍易查分电子成绩单的制作与操作步骤。 一、电子…

分类预测 | MATLAB实现BWO-TCN-Attention数据分类预测

分类预测 | MATLAB实现BWO-TCN-Attention数据分类预测 目录 分类预测 | MATLAB实现BWO-TCN-Attention数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.BWO-TCN-Attention数据分类预测程序; 2.无Attention适用于MATLAB 2022b版及以上版本&#xf…

基于微信小程序的图书管理系统ljr9i

对图书管理的流程进行科学整理、归纳和功能的精简,通过软件工程的研究方法,结合当下流行的互联网技术,最终设计并实现了一个简单、易操作的图书管理小程序。内容包括系统的设计思路、系统模块和实现方法。系统使用过程主要涉及到管理员和用户…

供应链 | 大数据报童模型:基于机器学习的实践见解

论文解读:李欣 马玺渊 作者:Gah-Yi Ban, Cynthia Rudin 引用:Ban, Gah-Yi and Cynthia Rudin. The big data newsvendor: Practical insights from machine learning. Operations Research 67.1 (2019): 90-108. 文章链接:https…

零阶矩、一阶矩、二阶矩、…

数学中矩的概念来自物理学。在物理学中,矩是表示距离和物理量乘积的物理量,表征物体的空间分布。矩在统计学和图像中都有很重要作用,我们常用的Adam优化器其全称为自适应矩估计优化器。本文将介绍各阶矩的理解和不同场景的应用。 Key Words&a…