docker入门(Linux环境下安装Docker,Docker构建镜像)

news2025/2/21 22:40:24

docker入门(利用docker部署web应用)

一:什么是Docker

1.1 官方解释

Docker is the world’s leading software containerization platform。
Docker公司开发,开源,托管在github跨平台,
支持Windows、Macos、Linux。

1.2 抽象解释

docker是一个用来装应用的容器,就像杯子可以装水,
笔筒可以放笔,书包可以放书,
可以把hello word放在docker中,
可以把网站放入docker中,
可以把任何想得到的程序放在docker中.

二:了解docker

2.1 集装箱-类似一个容器

没有集装箱之前运输货物,东西零散容易丢失,有了集装箱之后货物不容易丢失,我们可以把货物想象成程序,目前我们要把程序部署到一台新的机器上,可能会启动不起来,比如少一些配置文件什么的或者少了什么数据,有了docker的集装箱可以保证我们的程序不管运行在哪不会缺东西.

2.2 标准化 (运输-存储-API接口{命令行})

  1. 运输方式

docker运输东西有一个超级码头,任何地方需要货物都由鲸鱼先送到超级码头,然后再由鲸鱼从超级码头把货物送到目的地去.对应的技术来说,比如我们要把台式机的应用部署到笔记本上,我们可能选择用QQ发过去或者用U盘拷过去,docker就标准化了这个过程,我们只需在台式机上执行一个docker命令,把鲸鱼派过来,把程序送到超级码头去,再在笔记本上执行一个docker命令,然后由鲸鱼把程序从超级码头送到笔记本上去.

  1. 存储方式

当我们把程序存储到笔记本上时,我们需要一个目录,且我们要记住这个目录,因为下次我们可能还要修改,有了docker之后我们就不用记住了程序在哪里了,我们使用的时候只需要一条命令就行了.

  1. API接口

docker提供了一系列rest api的接口,包含了对docker也就是对我们的应用的一个启动停止查看删除等等,如当我们要启动tomcat时我们要执行startup命令,当我们要停止时要执行shutdown命令,如果不是tomcat,我们可能还需要一些别的命令.有了docker我们记docker的命令就可以对其进行操作.

2.3 集装箱之间隔离-(类似docker容器之间隔离)

我们在使用虚拟机时有自己的cpu,硬盘,内存,完全感觉不到外面主机的存在,docker也差不多,不过它更轻量,我们创建虚拟机可能要几分钟,但是docker只需要一秒.
最底层的技术时linux一种内核的限制机制,叫做LXC,LXC是一种轻量级的容器虚拟化技术.
最大效率的隔离了进程和资源.通过cgroup,namespace等限制,隔离进程组所使用的物理资源,比如CPU,MEMORY等等,这个机制在7,8年前已经加入到linux内核了,直到2013年docker出世的时候才火起来,大家可能奇怪为什么这么好的技术埋没这么多年都没人发现呢?
英雄造时势,时势造英雄,如果没有云计算,敏捷开发,高频度的弹性伸缩需求,没有IT行业这么多年长足的发展,也就没有docker.

三:docker解决的问题

3.1 系统环境不一致-

(比如,阿里云服务器上已经有了一个服务DDD的基础运行环境,类似jdk,redis,mysql的匹配版本,但是想迁移DDD服务到腾讯云服务器,但是明显,你要考虑在腾讯云服务器上是否满足DDD服务启动必要基础运行环境,类似jdk,redis,mysql等各种版本,如果不满足,还是要重新配置安装各种基础环境)

开发:我本地没问题.运维:服务器没问题. 这个问题就变成了皮球.
如果一个应用要正常的启动起来需要什么?比如java web应用.
需要一个操作系统,操作系统之上要jdk,tomcat,我们的代码,配置文件.
操作系统的改变可能会导致我们的应用开不起来,比如我们调用了某些系统命令.
jdk版本也可能导致程序的运行失败.比如class文件需要1.7编译,我们装了个1.6的jdk.
tomcat版本也能导致失败,比如旧的版本一些配置在新版本中不再支持.

代码的话就比如应用了C盘,D盘的一个文件,或者是用了系统的一些环境编码.
配置的话我们可能少了某个配置文件等等.

下面docker来了,它把操作系统,jdk,tomcat,代码,配置全部放到集装箱里.再打包放到鲸鱼上,由鲸鱼给我们送到服务器上,在我的机器上怎么运行,在别的机器上也怎么运行.不会有任何的问题.一句话就是docker解决了运行环境不一致所带来的问题.

3.2 服务器Docker部署的各个服务完全隔离,不会受到互相的运行内存以及磁盘存储影响

如果有根别人共用服务器的同学可能有这样的体会,
莫名其妙发现自己的程序挂了,一查原因要不是内存不够了,
要不是硬盘满了,还有就是发现某个服务变慢了,
甚至敲终端都比较卡,
但是linux本身就是一个多用户的操作系统本身就可以供多个用户使用,
docker的隔离性可以解决这个问题,
就算别人的程序还是死循环疯狂吃CPU,
还是封装疯狂打日志把硬盘占满,还是内存泄漏,把内存占满,
都不会导致我们的程序运行错误.
因为docker在启动的时候就限定好了,
它最大使用的CPU硬盘,如果超过了,
就会杀掉对应进程.

3.3 服务器Docker部署快速,通过自动化运维平台,提前配置好的命令行快速横向扩展,服务容器数量

大部分系统业务量并不是每天都比较平均的,特别是一些电商系统,
每天总有那么几天业务量是平时的几倍甚至几十倍,
如果按双11的规模去准备服务器那么对于平时的规模来说又是极大的浪费,
所以就在节日前临时扩展机器,过完节再把多余的节点下线,
这就给运维带来了非常大的工作量,
一到过节就在各个机器上部署各种各样的服务,
我们启动程序需要java,tocmat等等,
并且还可能起不来还要调试,
这是非常恶心的工作,有了docker一切都变得美好了,
只要点一下服务器就可以从10台变成100台甚至1000,1W台.
都是分分钟的事情.

为什么会这么快呢?都是用标准的方式把我们的程序运过来,
下载过来,再用标准的方式把它运行起来,
就可以做到只要在每台机器上都执行一两条命令,
就可以让程序正常跑起来,并且不用担心有问题.

四:理解-仓库-镜像-容器

4.1 Docker-仓库

(可以直接理解为Git远程仓库,可以从仓库推送push或者拉取pull自己想获得镜像)

我们的镜像是要在其它机器上运行,如何进行传输呢?

这就用到了docker仓库,我们要先把我们的镜像传到docker仓库中,
再由目的地把docker仓库拉过去,这就完成了这样的一次传输过程.

谁提供了这样的仓库呢?docker自己提供了,hub.docker.com,
但是非常慢,为了解决这个问题,国内很多公司也在做自己的仓库.

淘宝,腾讯这些大厂都会有,需要可以自行百度

4.2 Docker-镜像

(可以理解为已经可以直接部署的jar包)

镜像的英文名交image.
前面我们讲到了集装箱,鲸鱼拖着的每一个集装箱就是一个镜像.

从本质上来说镜像就是一系列文件,可以包括我们应用程序的文件,
也可以包括我们应用的运行环境的文件,
既然是文件,那么是以什么样的格式在本地保存的呢?
说到存储格式,就要提到linux的一个存储技术,
叫做联合文件系统,是一种分层的文件系统,
可以将不同的目录挂到同一个虚拟文件系统下.

比如test1下有三个文件夹,test2下有两个文件夹,
还有一个readme文件.
联合文件系统就是可以在一个文件夹(test)中
看到多个文件夹(test1,test2)中的内容.

如下图
在这里插入图片描述
通过这种方式可以实现文件的分层,test1可以把它看作第一层,test2可以把它看作第二层,每一层有每一层自己的文件,docker就是利用了这种分层的概念实现了镜像存储.

下图就是镜像的存储格式,这张图是分层的,最下面一层,上面也是一层层的好像集装箱罗列在一起.这就是镜像最直观的存储方式.下面是操作系统的引导,上面是linux操作系统,再上面是一些相关的软件,如果是我们自己的程序,就可以是tomcat,jdk,再往上是应用代码,每一层是我们自己都可以控制得,最上面一层先忽略不看,因为这是和容器有关的.注意一点,docker镜像系统的每一层都是只读的,然后把每一层加载完成之后这些文件都会被看成是同一个目录,相当于只有一个文件系统.docker的这种文件系统被称之为镜像.
在这里插入图片描述

4.3 Docker-容器

(可以理解为虚拟机-VM)

为了便于理解,大家可以把容器想象成虚拟机,
每个虚拟机都有自己的文件系统,可以把图1整个一部分看成是文件系统,
与虚拟机系统的区别是这里面的文件系统是一层一层的,
并且最下面的n层都是只读的,只有上面一层是可写的.
为什么要有可写的这层呢?大家的程序运行起来,
势必会要写一些日志,写一些文件,
或者对系统的某一些文件做一些修改,
所以容器在最上面一层创建了可读可写的文件系统.

在程序的运行过程中,如果要写镜像文件时,
因为镜像的每一层都是只读的,它会把文件的每一层拷到文件的最上层,
然后再对它进行修改,修改之后,
当我们的应用读一个文件时会从顶层进行查找,
如果没有才会找下一层.

由于容器的最上一层是可以修改的,
镜像是不能修改的,
这样就能保证镜像可以生成多个容器独立运行,
没有任何干扰.

待完善
todo Linux环境下安装Docker
todo Docker构建镜像

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

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

相关文章

【状态设计优化DP】ABC307 E

E - Distinct Adjacent (atcoder.jp) 题意: 思路: 组合问题,考虑DP或组合数 组合数不好考虑,我们去考虑DP 因为是个环,我们把环拆成一条链,然后加一个N1,颜色和起点1相同,在这条…

天台玻璃折叠门可实现室内外空间的无缝连接

天玻璃折叠门是指安装在天台上的可折叠开合的玻璃门,可用于将室外空间与室内空间进行隔离或连接。设计天台玻璃折叠门时需要注意以下几点: 1. 结构稳固性:选择坚固、稳定的材料和结构设计,确保门体在风力和其他外力作用下不易摇晃…

如何规范的设计数据库表

前言对于后端开发同学来说,访问数据库,是代码中必不可少的一个环节。系统中收集到用户的核心数据,为了安全性,我们一般会存储到数据库,比如:mysql,oracle等。后端开发的日常工作,需要…

制作搭建宠物商城小程序,打造便捷的宠物购物体验

随着宠物市场的不断发展,宠物商城小程序成为了满足宠物爱好者需求的重要工具。在现代社会,宠物已经成为人们生活中不可或缺的一部分。作为宠物爱好者,我们对于宠物食品、用品、医疗保健品等需求日益增长。而宠物商城小程序则为我们提供了一个…

python_day5_file

open()打开函数: f open(name,mode,encoding) name:要打开的目标文件名 mode:访问模式:只读r、写入w、追加a 等 encoding:编码格式,常为UTF-8 f open("D:\Test.txt", "r", encoding"UTF-8") print(type(f))r…

Dbeaver 显示字段备注信息

一、全局设置显示字段描述

@所有人,酷雷曼年中答卷,请查收!

2023 酷雷曼VR年中答卷 顺势而行 携手共赢 七月既至,年过已半。 半年来, 我们持续以优质的产品研发、 专业的客户服务、 不断交付的技术方案, 将那些关于VR的美好向往, 变成真实可感的确定, 让每一种相信&am…

Vue+element实现el-table行内编辑并校验

el-table行内编辑情况情况概要:之前在开发过程中对于element数据的新增,修改,删除。一般直接结合el-form使用。也就是新增的时候点新增然后出来一个弹框,里面嵌套一个表单,然后保存就好了。这次项目中要求所有的新增&a…

如何学习编写安全的PHP代码? - 易智编译EaseEditing

学习编写安全的PHP代码是保证应用程序安全的重要一环。下面是几个建议来帮助你学习编写安全的PHP代码: 学习安全编程原则: 了解常见的安全漏洞类型,如跨站脚本攻击(XSS)、SQL注入、跨站请求伪造(CSRF&…

如何刷新对黑客的认识?

黑客一般有10种类型 1、白帽黑客 白帽黑客是指通过实施渗透测试,识别网络安全漏洞,为政府及组织工作并获得授权或认证的黑客。他们也确保保护免受恶意网络犯罪。他们在政府提供的规章制度下工作,这就是为什么他们被称为道德黑客或网络安全专…

springboot项目中引入本地依赖jar包,并打包到lib文件夹中

1.springboot项目中引入本地依赖jar包,并打包到lib文件夹中 描述:下载了第三方相关jar包后,项目中引入本地jar,测试环境正常,打包线上报错提示为找到该jar 原因:应该在/WEB-INF/lib/xxx.jar,被…

vite-plugin-mock配置报错“localEnabled”不在类型”ViteMockOptions”中

vue3vite安装vite-plugin-mock之后配置报错: “localEnabled”不在类型”ViteMockOptions”中。 在vite.config.ts中共添加viteMockServe({ localEnabled: command ‘serve’, }),之后报了一下错误: 解决方法:与vite-plugin-mock版本有关&a…

揭示Android黑客之道:通过逆向工程揭开HTTPS流量

抓包是指在计算机网络中,通过监听网络流量并捕获通信数据包的过程。在网络通信中,数据以数据包的形式在网络上进行传输,每个数据包包含了源地址、目标地址、协议信息以及实际的数据内容。 抓包可以帮助我们了解网络通信的细节,包…

linux开发工具:Git

文章目录 1:Git简介2:Git简明指南2.1:创建新仓库2.2:检出仓库2.3:工作流2.4:添加和提交2.5:推送改动2.6:分支2.7:更新与合并2.8:标签2.9:替换本地…

STM32 主从蓝牙模块配置

前言: 最近在调试小车的时候,突然想要用两个蓝牙进行单片机和电脑的交互,之前一直用的都是从机的蓝牙。这里因为需要双机通信,所以也就顺便查询了一些资料,了解一下主从蓝牙模块的使用,以及双机通信的一些使…

在Linux中传输文件文件夹的10个scp命令

scp 命令的基本语法 下面的命令将读作 copy source_file_name进入destination_folder在destination_host使用username account。 > scp source_file_name usernamedestination_host:destination_folder里面有很多参数scp你可以使用的命令。以下是可能在日常使用中使用的参数…

【最短路+状压】CF1846 G

Problem - G - Codeforces 题意&#xff1a; 思路&#xff1a; Code&#xff1a; #include <bits/stdc.h>//#define int long longusing namespace std;const int mxn1e610; const int mxv1e610; const int mxe2e310; const int mod1e97; const int Inf0x3f3f3f3f;stru…

MOSS-RLHF实现大模型和人类价值观对齐

以 ChatGPT 为代表的大型语言模型&#xff08;LLM&#xff09;在各项任务上的高效表现彰显了其广阔发展前景。然而&#xff0c;大模型回复与人类价值偏好经常存在不一致问题。 如何让大模型更好的与人类价值观对齐&#xff0c;理解语言背后的含义&#xff0c;生成更具 “人情味…

elementPlus 树滚动到指定位置

根据当前选中id(colorsid)滚动到具体位置 参考如下&#xff1a; [element-ui] el-tree 滚动到指定选中的位置_element plus el-tree 滚轮定位_533_的博客-CSDN博客

open3d实现搜索在一个球内部的点云

目录 写在前面原理代码结果参考完 写在前面 1、本文内容 给定一个点云P和一个圆心为center&#xff0c;半径为r的球&#xff0c;搜索出P中属于球内的点 2、平台/环境 使用open3d, cmake&#xff0c;适用windows/linux 3、转载请注明出处&#xff1a; https://blog.csdn.net/q…