当前位置: 首页 > news >正文

DOCKER镜像和容器

1.前言

​ 初见DOCKER,感觉和我们常用的虚拟机(VMware,viurebox)类似,是一个独立于宿主机的模块,可以解决程序在各个系统间的移植,但它真的仅仅是这样嘛?

2.容器的优缺点

1.1.容器优点

  • 敏捷性:相对于虚拟机没有“虚拟操作系统”、“Hypervtaor层”,占用资源更低,启动时间也更快。同时可以控制容器资源的分配;
  • 隔离性:与实体宿主环境无关,不会和其他服务产生库冲突,通过其高隔离的特性可以快速进行移植和部署;
  • 安全性:容器之间相互隔离,互相之间互不影响,即使一台容器受到攻击,也不会影响其他容器的运行;
  • 部署方便:搭建好开发环境后,可保存为镜像。需要使用时,直接使用镜像即可;
  • 部署安全:保证了开发和生产环境的一致,避免出现“我的环境是好的”的问题;

2.2.容器缺点

  • 网络数据和持久化磁盘数据由于是通过连接或映射实现的,因此对效率有一定的影响;

3.DOCKER部署安装

3.1.安装docker

sudo wget -qO- https://get.docker.com/ | sh

3.2.查看docker版本

docker version

3.3.开启和禁止开机服务自启动

sudo systemctl  enable   docker
sudo systemctl  disable  docker

3.4.启动和禁止服务

sudo systemctl start docker
sudo systemctl stop  docker

4.DOCKER使用

4.1.镜像

4.1.1.镜像名称

格式:[Namespace]/[Repository]:[Tag]
说明:Namespace	镜像的命名空间,用于区别构建镜像的组织或个人Repository	镜像的档案名称,通常采用服务名称Tag			用来区别镜像服务版本
例子:“dockerPgm/test:01.01.01.01”和“dockerPgm:01.01.01.38”

4.1.1.镜像搜索

从DockerHub中搜索基本的镜像,用来创建容器。格式:docker search [OPTIONS] TERM

格式:docker search [OPTIONS] TERM
OPTIONS说明:-f filter   Filter output based on conditions provided--format string   根据条件进行过滤输出--limit int       搜索结果的最大数量(默认为25个,最大100)--no-trunc        不要截断输出
例子:sudo docker search ubuntu

搜索结果

NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu/nginx                     Nginx, a high-performance reverse proxy & we…   33             
ubuntu/mysql                     MySQL open source fast, stable, multi-thread…   24           
ubuntu/apache2                   Apache, a secure & extensible open-source HT…   23                   
ubuntu/prometheus                Prometheus is a systems and service monitori…   23                   
kasmweb/ubuntu-bionic-desktop    Ubuntu productivity desktop for Kasm Workspa…   17           
说明:NAME		名称DESCRJPTION 创建者提供的对镜像的简单描述。STARS		镜像在宫方镜像仓库中收到用户给出的星星的数量,表示镜像受欢迎的程度OFFICIAL	镜像是否由 Docker 官方提供AUTOMATED	镜像是否使用了自动构建

4.1.2. 镜像拉取

格式:docker pull [OPTIONS] NAME[:TAG|@DIGEST]
OPTIONS说明:-a, --all-tags                下载档案中所有TAG的镜像--disable-content-trust   跳过镜像验证(默认为true)--platform string         若服务支持多平台,则设置目标平台-q, --quiet                   关闭冗余输出
例子:sudo docker pull ubuntu:20.04

4.1.3.镜像查看

格式:docker image ls [OPTIONS] [REPOSITORY[:TAG]]
OPTIONS说明:-a, --all             显示所有镜像(默认为隐藏中间镜像)--digests         显示数字-f, --filter filter   根据条件过滤输出--format string   使用使用一个Go模板来更好的列出镜像--no-trunc        不要截断输出-q, --quiet           只显示镜像ID
例子:sudo docker image ls

4.1.4.镜像删除

格式:docker image rm [OPTIONS] IMAGE [IMAGE...]
OPTIONS说明:-f, --force    强制移除镜像--no-prune   不要删除未带标记的父项例子:sudo docker image rm [镜像ID或名称]

4.1.5.镜像创建

​ Dockerfile是一个可自动创建Docker镜像的配置文件。那么我们首先需要创建一个Dockerfile文件,内容参考如下:

#格式:FROM image,FROM image:tag,FROM image@digest
#说明:FROM必须是第一个非注释指令。一个Dockerfile中可能有多个FROM,用来创建复合镜像,但需要在每个新的FROM命令之前,记录提交输出的最后一个镜像ID。
#例子:基于ubuntu:20.04构建镜像
FROM ubuntu:22.04#设置镜像的作者信息,可用于提供镜像的帮助,内容可以包括作者名称,邮件或帮助链接
MAINTAINER	dockerPgm<dockerPgm@163.com>#格式:LABEL <key>=<value> [<key>=<value> ...]或LABEL <key>[ <value>]
#说明:可以使用docker inspect命令来查看镜像的标签信息
#功能:为镜像提供元数据
#LABEL com.example.vendor="ACME Incorporated"#格式:ARG [=]
#说明:构建镜像时,可在使用“--build-arg <varname>=<value>”传入参数,也可以定义时,赋予初始值。
#注意:不建议使用构建镜像时,命令传递密码数据,因为其他用户可以通过“docker history”查看到。Docker存在一些预定义ARG,如:HTTP_PROXY http_proxy HTTPS_PROXY https_proxy FTP_PROXY ftp_proxy NO_PROXY no_proxy
#ARG DIR_HOME#格式:ENV <key> <value>
#说明:作用于构建的镜像和后续的容器(ENV定义的变量会覆盖ARG定义的变量),也可以在运行容器时使用“--env <key>=<value>”进行覆盖
ENV DIR_HOME="/dockerPgm/"#格式:WORKDIR /path/to/workdir
#说明:可以多次使用,如果使用相对路径,则相对上次的路径
#功能:设置工作目录
WORKDIR ${DIR_HOME}#格式:COPY <src> <dest>或COPY ["<src>",... "<dest>"]
#说明:如果源文件是压缩文件(tar,gzip,bzip2等),不会在目的文件目录解压。新目录的权限为0755,UID和GID均为0
#构建镜像时,增加文件到容器的目录
#COPY dockerPgm/start.sh          	    ${DIR_HOME}#格式:ADD <src> <dest>或ADD ["<src>",... "<dest>"]
#说明:如果源文件是压缩文件(tar,gzip,bzip2等),将在目的文件目录进行解压。新目录的权限为0755,UID和GID均为0
#构建镜像时,增加文件到容器的目录
ADD dockerPgm/start.sh      ${DIR_HOME}
ADD dockerPgm/test.pkg      ${DIR_HOME}#格式:RUN <command> 或 RUN ["executable", "param1", "param2"]
#说明:构建镜像时,执行的指令
RUN bash ${DIR_HOME}/test.pkg#格式:EXPOSE <port> [<port>...]
#功能:通知DOCKER,容器运行时监听的端口
EXPOSE 10000#格式:VOLUME ["/data"]
#功能:创建和挂载数据卷,数据存储在主机的/var/lib/docker/volumes/dockerPgm_etc/_data目录
#VOLUME  /etc/dockerPgm/#格式:USER [user | user:group | uid | uid:gid | user:gid | uid:group ]
#说明:默认用户为root。Dockerfile中可以多次设置,且只影响后续指令
#功能:设置用于运行后续命令的用户名或UID
#USER root#格式:ENTRYPOINT param1 param2 或 ENTRYPOINT ["executable", "param1", "param2"]
#说明:ENTRYPOINT中的参数无法被覆盖重写,但CMD的可以。可以在运行容器时,使用-d进行参数传递,当然也可以通过CMD指令进行传递
#功能:指明程序入口点
#ENTRYPOINT  ["/usr/local/nginx/sbin/nginx"]#格式:CMD <command> 、CMD ["executable", "param1", "param2"]和CMD ["param1", "param2"]
#说明:CMD ["param1", "param2"]是为ENTRYPOINT提供默认参数。在Dockerfile文件中只有最后一个CMD生效;
#功能:为正在运行的容器提供默认值
CMD ${DIR_HOME}/start.sh#格式:STOPSIGNAL <signal>
#功能:停止容器时,Docker传递的停止信号,默认值SIGTERM。可以在docker-create和docker-run时,使用--stop-signal选项来重置该值
#STOPSIGNAL SIGKILL#格式:ONBUILD [INSTRUCTION]
#功能:当镜像作为构建其他进行的基础镜像时触发

创建start.sh文件,用于启动主进程:

#! /bin/bash
CURPATH=`pwd`
#启动NGINX
/usr/local/nginx/sbin/nginx &
#进入命令行
/bin/bash

构建镜像指令:

格式:docker build [OPTIONS] PATH | URL | -
OPTIONS说明:--add-host list           添加主机到IP映射--build-arg list          设置镜像构建时的ARG变量--cache-from strings      指定作为缓冲源的镜像--cgroup-parent string    指定容器的(可选)父组--compress                使用gzip压缩构建内容--cpu-period int          限制镜像CPU CFS周期--cpu-quota int           限制镜像CPU CFS配额-c, --cpu-shares int          CPU共享(相对权重)--cpuset-cpus string      允许执行的CPU(0-3, 0,1)--cpuset-mems string      允许执行的mem(0-3, 0,1)--disable-content-trust   忽略镜像验证(默认为true)-f, --file string             Dockerfile文件名称 (默认'PATH/Dockerfile')--force-rm                移除中间容器--iidfile string          写入镜像ID的文件--isolation string        容器隔离技术--label list              设置镜像的标签变量-m, --memory bytes            内存限制--memory-swap bytes       交换内存限制=内存+交换: '-1'表示关闭交换限制--network string          设定在镜像构建时,RUN指令的网络模式 (默认 "default")--no-cache                在构建映像时,请不要使用高速缓存--pull                    尝试拉取一个最新版本的镜像-q, --quiet                   抑制镜像构建过程的信息输出,并在构建成功时显示镜像ID--rm                      构建成功后,删除中间容器 (默认true)--security-opt strings    安全选项--shm-size bytes          共享内存/dev/shm分区大小-t, --tag list                指定名称和标记格式,如'name:tag'--target string           设置构建阶段的目标--ulimit ulimit           限制选项 (默认 [])
例子:sudo docker build -f Dockerfile -t dockerPgm:01.01.01.38 .

4.1.6.镜像迁移

​ 镜像导出(可以导出多个镜像)

sudo docker save -o dockerPgm.tar ubuntu:22.04 dockerPgm:01.01.01.38

​ 镜像导入

sudo docker load -i dockerPgm.tar 

4.1.7.Docker Hub登录

sudo docker login -u <username> -p <password> <server> server	默认采用 Docker Daemon 中的默认值。

4.1.8.docker image指令

格式:docker image COMMANDCommands选项:build       基于Dockerfile文件构建镜像history     显示镜像的构建历史信息import      从TAR包(tarball)中导入内容来创建一个文件系统镜像inspect     显示镜像的更详细信息load        从TAR包或STDIN中加载镜像ls          列出镜像prune       删除未使用的镜像pull        拉取一个镜像或档案push        推送一个镜像或档案rm          删除镜像save        将一个或多个镜像保存到TAR包文件 (默认硫化到STDOUT)tag         创建一个TAG

4.2.容器

4.2.1.容器创建

​ 创建一个容器,但并不运行:容器名称为dockerPgm_db,基于镜像ubuntu:20.04,且挂载了/etc/dockerPgm和/usr/local/msresource两个数据卷,数据卷名称分别为dockerPgm_etc和msresource。使用数据卷可以将数据持久化到主机硬盘。

sudo docker create --name dockerPgm_db -v dockerPgm_etc:/etc/dockerPgm -v msresource:/usr/local/msresource   ubuntu:20.04--name	定义被创建容器的名称;-v		创建数据卷,格式<名称>:<容器内路径>。若不指定名称,将随机分配一个64位的名称;

4.2.2.容器运行

​ 创建并运行一个容器:容器名称为dockerPgm,基于镜像dockerPgm:01.01.01.38;对外开发端口为8070,8090,8010,8020,映射的端口为8070;使用数据卷容器dockerPgm_db;

sudo docker run -it --name dockerPgm -p:8070:8060 -p 8090:8090 -p 8010:8010 -p 8020:8020 --volumes-from dockerPgm_db dockerPgm:01.01.01.38-t 		让 Docker 这个容器分配一个伪终端;-i		打开了交互模式;-d		让容器运行在后台;--name	定义被创建容器的名称;-p		指定端口映射<对外端口>:<容器内端口>--volumes-from	指定使用的数据卷容器

4.2.4.进入容器

sudo docker exec -it  容器名称|容器ID bash

4.2.4.容器退出

exit

4.2.4.容器查看

sudo docker ps无参数	  列出正在运行的容器;-a		列出所有容器;-l		列出最后创建的容器;-n <n>	列出n个最近创建的容器;-f "key=value"	进行多种形式的过滤

4.2.5.容器删除

sudo docker rm  -v [容器ID或名称]

4.2.6.启动和关闭容器

sudo docker start dockerPgm
sudo docker stop dockerPgm
sudo docker restart dockerPgm

4.2.7.暂停和恢复容器

sudo docker pause   dockerPgm
sudo docker unpause dockerPgm

4.2.8.查看容器进程信息

sudo docker top   dockerPgm

4.2.9.查看容器信息

sudo docker inspect   dockerPgm

4.2.10.查看容器日志

sudo docker logs   dockerPgm

4.2.11.衔接到容器

sudo docker attach dockerPgm

4.2.12.导出和导入容器

sudo docker export -o dockerPgm_con.tar dockerPgm
sudo import dockerPgm_con.tar dockerPgm
注意:导入的容器出现在本地镜像库里,还需要去创建和运行容器

4.2.13.提交容器变更

sudo docker commit -m "设置root的密码为XXXX" dockerPgm smartavs/dockerPgm:01

相关文章:

DOCKER镜像和容器

1.前言 ​ 初见DOCKER&#xff0c;感觉和我们常用的虚拟机&#xff08;VMware&#xff0c;viurebox&#xff09;类似&#xff0c;是一个独立于宿主机的模块&#xff0c;可以解决程序在各个系统间的移植&#xff0c;但它真的仅仅是这样嘛&#xff1f; 2.容器的优缺点 1.1.容器…...

探索网页原型设计:构建出色的用户体验

在当今数字化时代&#xff0c;用户对网页体验的要求日益提高。在网页设计过程中&#xff0c;扮演着至关重要的角色。通过网页原型设计&#xff0c;产品经理能够更好地展示和传达网页的整体布局、导航结构、元素位置和交互效果&#xff0c;从而使团队成员更清晰地了解设计意图&a…...

48,排序算法merge

功能描述&#xff1a; 两个容器元素合并&#xff0c;并储存到另一容器中 函数原型&#xff1a; merge(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest); //容器元素合并&#xff0c;并存储到另一个容器中 //注意&#xff1a;两个容器必须是有序的…...

【MySQL】复合查询

复合查询目录 一、基本查询二、多表查询三、自连接四、子查询4.1 单行子查询4.2 多行子查询4.3 多列子查询4.4 在from子句中使用子查询4.5 合并查询4.5.1 union4.5.2 union all 五、实战OJ 一、基本查询 --查询工资高于500或岗位为MANAGER的雇员&#xff0c;同时还要满足他们的…...

JavaScript中的this指向及绑定规则

在JavaScript中&#xff0c;this是一个特殊的关键字&#xff0c;用于表示函数执行的上下文对象&#xff0c;也就是当前函数被调用时所在的对象。由于JavaScript的函数调用方式多种多样&#xff0c;this的指向也因此而变化。本文将介绍JavaScript中this的指向及绑定规则&#xf…...

css中预编译理解,它们之间区别

css预编译&#xff1f; css预编译器用一种专门的编程语言&#xff0c;它可以对web页面样式然后再编译成正常css文件&#xff0c;可以更加方便和高效的编写css代表。主要作用就是为css提供了变量&#xff0c;函数&#xff0c;嵌套&#xff0c;继承&#xff0c;混合等功能&#…...

如何使用Java处理JSON数据?

在Java中&#xff0c;您可以使用许多库来处理JSON数据。以下是使用一种常见的库 Gson 的示例&#xff1a; 首先&#xff0c;确保您已经将 Gson 库添加到您的项目中。您可以在 Maven 中添加以下依赖项&#xff1a; <dependency><groupId>com.google.code.gson<…...

java设计模式-观察者模式

什么是观察者模式 观察者模式&#xff08;Observer&#xff09;是软件设计中的一种行为模式。 它定义了对象之间的一对多关系&#xff0c;其中如果一个对象改变了状态&#xff0c;所有依赖它的对象都会自动被通知并更新。 这种模式包含了两种主要的角色&#xff0c;即被观察…...

HiveSQL SparkSQL中常用知识点记录

目录 0. 相关文章链接 1. hive中多表full join主键重复问题 2. Hive中选出最新一个分区中新增和变化的数据 3. Hive中使用sort_array函数解决collet_list列表排序混乱问题 4. SQL中对小数位数很多的数值转换成文本的时候不使用科学计数法 5. HiveSQL & SparkSQL中炸裂…...

mac不识别移动硬盘导致无法拷贝资源

背景 硬盘插入到Mac电脑上之后&#xff0c;mac不识别移动硬盘导致无法拷贝资源。 移动硬盘在Mac上无法被识别的原因可能有很多&#xff0c;多数情况下&#xff0c;是硬盘的格式与Mac电脑不兼容。 文件系统格式不兼容 macOS使用的文件系统是HFS或APFS&#xff0c;如果移动硬盘是…...

Opencv的Mat内容学习

来源&#xff1a;Opencv的Mat内容小记 - 知乎 (zhihu.com) 1.Mat是一种图像容器&#xff0c;是二维向量。 灰度图的Mat一般存放<uchar>类型 RGB彩色图像一般存放<Vec3b>类型。 (1)单通道灰度图数据存放样式&#xff1a; (2)RGB三通道彩色图存放形式不同&#x…...

MySQL~数据库的设计

二、数据库的设计 1、多表之间的关系 1.1 三种分类 一对一&#xff1a; 分析&#xff1a;一个人只有一个身份证&#xff0c;一个身份证只能对应一个人 如&#xff1a;人和身份证 一对多&#xff1a; 如&#xff1a;部门和员工 分析&#xff1a;一个部门有多个员工&#xff…...

开源了!最强原创图解八股文面试网来袭

强烈推荐 Github上业内新晋的一匹黑马—Java图解八股文面试网—Java2Top.cn&#xff0c;图解 Java 大厂面试题&#xff0c;深入全面&#xff0c;真的强烈推荐~ 这是一个二本逆袭阿里的大佬根据自己秋招上岸所看过的相关专栏&#xff0c;面经&#xff0c;课程&#xff0c;结合自…...

微信小程序开发6

一、分包-基础概念 1.1、什么是分包 分包指的是把一个完整的小程序项目&#xff0c;按照需求划分为不同的子包&#xff0c;在构建时打包成不同的分包&#xff0c;用户在使用时按需进行加载。 1.2、分包的好处 对小程序进行分包的好处主要有以下两点&#xff1a; 可以优化小程序…...

JS 根据身份证号获取年龄、性别、出生日期

先说一代身份证和二代身份证的区别: 1.编号位数不同&#xff0c;第一代身份证为15位号码&#xff0c;第二代证是18位号码 2.编码规则不同&#xff0c;第一代身份证在前6位号码后没有完整出生年份&#xff0c;而二代的有完整的出生年份&#xff0c;一代身份证将年份前二位省略…...

Python+Mongo+LSTM(GTP生成)

下面是一个简单的示例来展示如何使用Python和MongoDB来生成LSTM预测算法。 首先&#xff0c;我们需要安装pymongo和tensorflow库&#xff0c;可以使用以下命令进行安装&#xff1a; pip install pymongo tensorflow接下来&#xff0c;我们连接到MongoDB数据库并获取需要进行预…...

关于idea如何成功运行web项目

导入项目 如图 依次选择 file - new - Project from Existing Sources 选择存放的项目目录地址 如图 导入完成 点击ok 如图 依次选择 Create project from existing sources 点击next如图 &#xff0c;此处默认即可 点击 next如图 点击next有该提示 是因为之前导入过…...

python读取json文件

import json# 文件路径(同目录文件名即可,不同目录需要绝对路径) path 1.json# 读取JSON文件 with open(path, r, encodingutf-8) as file:data json.load(file)#data为字典 print(data) print(type(data))...

迁移学习、微调、计算机视觉理论(第十一次组会ppt)

@TOC 数据增广 迁移学习 微调 目标检测和边界框 区域卷积神经网络R—CNN...

特殊矩阵的压缩存储

1 数组的存储结构 1.1 一维数组 各数组元素大小相同&#xff0c;且物理上连续存放。第i个元素的地址位置是&#xff1a;a[i] LOC i*sizeof(ElemType) (LOC为起始地址) 1.2 二维数组 对于多维数组有行优先、列优先的存储方法 行优先&#xff1a;先行后列&#xff0c;先存储…...

【网络原理】 (1) (应用层 传输层 UDP协议 TCP协议 TCP协议段格式 TCP内部工作机制 确认应答 超时重传 连接管理)

文章目录 应用层传输层UDP协议TCP协议TCP协议段格式TCP内部工作机制确认应答超时重传 网络原理部分我们主要学习TCP/IP协议栈这里的关键协议(TCP 和 IP),按照四层分别介绍.(物理层,我们不涉及). 应用层 我们需要学会自定义一个应用层协议. 自定义协议的原因? 当前的软件(应用…...

【SQL语句】

目录 一、SQL语句类型 1.DDL 2.DML 3.DLL 4.DQL 二、数据库操作 1.查看 2.创建 2.1 默认字符集 2.2 指定字符集 3.进入 4.删除 5.更改 5.1 库名称 5.2 字符集 三、数据表操作 1.数据类型 1.1 数值类型&#xff08;常见&#xff0c;下同&#xff09; 1.1.1 T…...

自动驾驶和机器人学习和总结专栏汇总

汇总如下&#xff1a; 一. 器件选型心得&#xff08;系统设计&#xff09;--1_goldqiu的博客-CSDN博客 一. 器件选型心得&#xff08;系统设计&#xff09;--2_goldqiu的博客-CSDN博客 二. 多传感器时间同步方案&#xff08;时序闭环&#xff09;--1 三. 多传感器标定方案&…...

【C++初阶】C++基础(下)——引用、内联函数、auto关键字、基于范围的for循环、指针空值nullptr

目录 1. 引用 1.1 引用概念 1.2 引用特性 1.3 常引用 1.4 使用场景 1.5 传值、传引用效率比较 1.6 引用和指针的区别 2. 内联函数 2.1 概念 2.2 特性 3.auto关键字&#xff08;C11&#xff09; 3.1 类型别名思考 3.2 auto简介 3.3 auto的使用细则 3.4 auto不能推…...

OSI 7层模型 TCPIP四层模型

》Ref&#xff1a; 1. 这个写的嘎嘎好&#xff0c;解释了为啥4层7层5层&#xff0c;还有数据包封装的问题:数据包在网络中的传输过程详解_数据包传输_张孟浩_jay的博客-CSDN博客 2. HTTP协议 与 TCP协议 的区别&#xff0c;作为web程序员必须要懂 - 知乎 (zhihu.com) 3. 数据…...

iOS-持久化

目的 1.快速展示&#xff0c;提升体验 已经加载过的数据&#xff0c;用户下次查看时&#xff0c;不需要再次从网络&#xff08;磁盘&#xff09;加载&#xff0c;直接展示给用户 2.节省用户流量&#xff08;节省服务器资源&#xff09; 对于较大的资源数据进行缓存&#xf…...

PC音频框架学习

1.整体链路 下行播放&#xff1a; App下发音源→CPU Audio Engine 信号处理→DSP数字信号处理→Codec DAC→PA→SPK 上行录音&#xff1a; MIC拾音→集成运放→Codec ADC→DSP数字信号处理→CPU Audio Engine 信号处理→App 2.硬件 CPU PCH DSP(可选) Codec PA SPKbox MIC…...

机器学习:提取问题答案

模型BERT 任务&#xff1a;提取问题和答案 问题的起始位置和结束位置。 数据集 数据集 DRCDODSQA 先分词&#xff0c;然后tokenize 文章长度是不同的&#xff0c;bert的token的长度有限制&#xff0c;一般是512&#xff0c; self-attention的计算量是 O ( n 2 ) O(n^2) O(n…...

【Ansible】

目录 一、Ansible简介二、ansible 环境安装部署1、管理端安装 ansible 三、ansible 命令行模块&#xff08;重点&#xff09;1&#xff0e;command 模块2&#xff0e;shell 模块3、cron 模块4&#xff0e;user 模块5&#xff0e;group 模块6&#xff0e;copy 模块&#xff08;重…...

分布式版本控制系统git详解

git 是目前世界上最先进的分布式版本控制系统 补充说明 git命令 很多人都知道&#xff0c;Linus在1991年创建了开源的Linux&#xff0c;从此&#xff0c;Linux系统不断发展&#xff0c;已经成为最大的服务器系统软件了。 Linus虽然创建了Linux&#xff0c;但Linux的壮大是靠…...