最近在盘gitlab.0.先review了一下docker
# 正文
本猿所在产品的代码是保存到了一个本地gitlab实例上,实例是别的同事搭建的。最近又又又想了解一下,而且已经盘了一些了,所以写写记录一下。因为这个事儿没太多的进度压力,索性写到哪儿算哪儿,只要是新了解到的知识就都写,不一定一直说gitlab:随时跑题、跑完就回来、差不多就结束文章,只要帖子里有点儿东西就行。
要说盘gitlab,没有个环境用来练习是很难的,或者说都不会搭建环境,那就是没根儿。所以怎么搭建环境呢?公司的这个是2个docker容器,一个gitlab实例的,一个nginx的。好了,开始第一次跑题,说一下docker。docker一词的英文原意是码头工人、码头装卸工[e1],所以想先从单词原意入手得到个感性认识是没大有戏了。看看官网docker.com[e2],说docker是个平台,用来开发、移动、运行应用程序的,原话是:an open platform for developing, shipping, and running applications。当然优点必须很多。
docker这个平台是通过一个叫“容器”的东东提供打包和运行应用程序的环境。“容器”一词对应的英文是“container”,容器里已经包含了应用运行所需要的东西,所以就不用再依赖宿主机的了,原话是:Containers are lightweight and contain everything needed to run the application, so you don't need to rely on what's installed on the host。下一句是You can share containers while you work, and be sure that everyone you share with gets the same container that works in the same way。就是说,想要把开发成果部署在不同的环境,那就在不同的环境部署一下容器;如此,不同环境部署的开发成果就是一样的,避免一些类似“我这里能运行啊,你用的那个环境有问题吧”的拉扯。
比如我们可以把一个系统拆成很作组件:前端、数据库、底层服务等,一个组件做程一个容器;每个组件是一个独立的进程,它们在自己的、独立的环境中运行,和宿主机上别的东西隔离。实际上,通过vmware或pve这种平台在一套硬件资源上安装不同的虚拟机进而部署不同的应用也有这个效果;那么相比虚拟机,使用容器有什么好处呢?操作系统本身是有重量的:一个什么应用都不运行的操作系统也要消耗一定的磁盘、内存以及CPU算力,这算是一种“overheads”[e3];而容器技术就可以节省这些“overheads”,同时带来的一个好处就是重启时更快。我们看docker的图标很像一个载着很多集装箱的、鲸鱼形状的轮船[e4],大概就是把轮船的运力比作硬件资源、把容器比作集装箱吧。docker官网的说法更好懂:
接下来是我读docker官网文档时记录的一些笔记,我是用过一点儿docker了,觉得写成这个程度自己能看懂;但不一定对初识docker的人那么友好;所以,觉得不好懂就去docker.com上的文档吧,毕竟再好的翻译也不如原文。
/* 私房docker 笔记,开始 */
Docker是CS架构的,Docker Client给Docker Daemon发消息,然后Docker Daemon干创建容器、运行重启、部署容器这样的重活儿。Docker的前后端可以在同一台设备上,也可以在不同的设备上,它们通过一个REST API通讯,REST API通过UNIX套接字实现(本地or网口)。还有一个docker客户端叫Docker Compose,Docker Compose可以lets you work with applications consisting of a set of containers,就是把一堆容器的配置按语法写到文件里,然后Docker Compose就可以根据配置一次启动若干容器。
Docker Daemon名为dockerd[e5],它监听上文说到的REST API请求,然后管理像images、containers、networks、volumes这些Docker objects。而且,Docker Daemon还可以和其它的Docker Daemon服务交互。Docker Client就是我们以后会经常敲的docker命令,这是和Docker Daemon通讯的最基础的方式。比如我们从bash上执行了一个docker run <container-id>,以我的环境为例[e6],就是可执行程序/usr/bin/docker给dockerd进程发消息,然后让dockerd干活儿。
Docker Desktop是一个可以安装在Mac、windows或者linux系统上的程序,有这个就可以从办公电脑上创建并分享容器化的应用和微服务了。Docker Desktop包含了:
Docker daemon、Docker client、Docker Compose、Docker Content Trust、Kubernetes以及Credential Helper.
Docker registry是保存docker镜像的地方,Docker Hub是一个公开的Docker registry,所有人都可以从Docker Hub上查找并使用镜像。当执行docker pull或者docker run命令时,Docker就会从配置文件里的Docker registry拉取镜像;当然,也可以push镜像。
上边说到过Docker objects,包含镜像、容器、networks、volumes、plugins以及其它对象。挨个说说吧。镜像,images,是一个包含了创建容器命令的只读模板。通常,镜像是基于别的镜像来制作的,比如我们可以从docker hub上拉取ubuntu的镜像,安装上阿帕奇的web server和自己的应用、部署上自己的配置,然后打成新的镜像。dockerfile就是创建镜像时使用的,里面包含了一个创建镜像、运行镜像必要步骤的指令;原句是To build your own image, you create a Dockerfile with a simple syntax for defining the steps needed to create the image and run it;然后紧跟一句“Each instruction in a Dockerfile creates a layer in the image”,所以我觉得这里说的dockerfile里面保存的应该是“指令”,而不是字面上的“语法”。当修改了dockerfile并重新制作镜像时,Docker只会重建有修改的layer;这也是镜像/容器技术相比虚拟化技术更轻量、快速的原因之一。
说容器,它是一个可以运行的、镜像的实例:A container is a runnable instance of an image。可以创建、启动、停止、移动、删除容器。可以把容器连接到一个或多个网路,可以给容器挂载存储,还可以根据容器的当前状态创建新的image。
/* 私房docker 笔记,结束 */
好了,今天就这些吧。
# ENDNOTES
e1
e2.1
e2.2
e2.3
e3
e4
e5
e6
相关文章:
最近在盘gitlab.0.先review了一下docker
# 正文 本猿所在产品的代码是保存到了一个本地gitlab实例上,实例是别的同事搭建的。最近又又又想了解一下,而且已经盘了一些了,所以写写记录一下。因为这个事儿没太多的进度压力,索性写到哪儿算哪儿,只要是新了解到的…...
TCP封装数据帧
void *send_data(void *arg) //这是一个发送数据的线程 {int sockfd init_tcp_cli("192.168.0.148",50000) //传ip和port,port 50000是因为大概前五万都被其它服务所占用,50000后是私人ipif(sockfd < 0){return NULL;}unsigned char …...
基于Springboot+Vue的仓库管理系统
开发一个基于Spring Boot和Vue的仓库管理系统涉及到前端和后端的开发。本文呢,给出一个简单的开发步骤指南,用于指导初入的新手小白如何开始构建这样一个系统,如果**你想直接学习全部内容,可以直接拉到文末哦。** 开始之前呢给小…...
工厂人员定位管理系统方案(二)人员精确定位系统架构设计,适用于工厂智能管理
哈喽~这里是维小帮,提供多个场所的定位管理方案,如需获取工厂人员定位管理系统解决方案可前往文章最下方获取,如有项目合作及技术交流欢迎私信我们哦~撒花 在上一篇文章中,我们初步探讨了工厂人员定位管理系统的需求背景以及定位方…...
机器学习特征重要性之feature_importances_属性与permutation_importance方法
一、feature_importances_属性 在机器学习中,分类和回归算法的 feature_importances_ 属性用于衡量每个特征对模型预测的重要性。这个属性通常在基于树的算法中使用,通过 feature_importances_ 属性,您可以了解哪些特征对模型的预测最为重要…...
Go学习:多重赋值与匿名变量
目录 1. 变量的多重赋值 1.1 基本语法格式 1.2 交换变量值 2. 匿名变量的使用 1. 变量的多重赋值 1.1 基本语法格式 go语言中,可以将多个赋值语句 合并成 一句,比如: a : 10 b : 20 c : 30//a,b,c三个变量的赋值语句可以…...
解读Linux Bridge中的东西流向与南北流向
解读Linux Bridge中的东西流向与南北流向 在现代云计算和虚拟化环境中,网络流量的管理和优化变得越来越重要。Linux Bridge作为Linux内核提供的一个强大的二层交换机工具,在虚拟化和容器化应用中扮演着至关重要的角色。本文将深入探讨Linux Bridge中的两…...
spring mvn 国际化配置
目录 国际化配置测试测试自定义一个MessageSource类型的beanSpringApplicationUtil工具类MessageUtls工具类配置 国际化原理ResourceBundleMessageSource 国际化配置测试 测试 测试: 自定义一个MessageSource类型的bean import org.springframework.context.Mess…...
Windows下Dll在Unity中使用的一般方式
Windows下Dll在Unity中使用的一般方式 Unity中虽然已经有广泛的库和插件,但是相较于C的库生态而言,还是有一定的差距;因此本篇博文记录Windows下将C函数打包成动态链接库在Unity中使用的一般方法。 环境 Visual Studio 2019 , Uni…...
SQLite PRAGMA
SQLite的PRAGMA命令是一种特殊的命令,用于在SQLite环境中控制各种环境变量和状态标志。PRAGMA值可以被读取,也可以根据需求进行设置【0†source】。 PRAGMA命令的语法格式如下: 要查询当前的PRAGMA值,只需提供该PRAGMA的名字&am…...
Linux:进程控制
1.fork()函数初识 在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。 #include <unistd.h> pid_t fork(void); 返回值:自进程中返回0,父进程返回子进程id࿰…...
一些计算机零碎知识随写(25年1月)-1
我原以为世界上有技术的那批人不会那么闲,我错了,被脚本真实了。 今天正隔着画画呢,手机突然弹出几条安全告警通知。 急忙打开服务器,发现问题不简单,直接关服务器重装系统..... 首先,不要认为小网站&…...
spring mvc源码学习笔记之十
前面的文章介绍了用 WebApplicationInitializer 或者 AbstractAnnotationConfigDispatcherServletInitializer 来代替 web.xml 。 我们学 java web 的时候就知道,servlet 容器会自动加载 web.xml。 那么,疑问就来了,WebApplicationInitialize…...
网络安全-安全散列函数,信息摘要SHA-1,MD5原理
安全散列函数 单向散列函数或者安全散列函数之所以重要,不仅在于消息认证(消息摘要。数据指纹)。还有数字签名(加强版的消息认证)和验证数据的完整性。常见的单向散列函数有MD5和SHA 散列函数的要求 散列函数的目的是文件、消息或者其它数据…...
《解锁计算机视觉智慧:编程实现图片场景文字描述的开源宝藏》
《解锁计算机视觉智慧:编程实现图片场景文字描述的开源宝藏》 一、MiniGPT-4:小模型撬动大视觉理解(一)项目概览(二)核心亮点(三)上手体验 二、ClipCap-Chinese:中文场景…...
vue封装axios请求
在vue项目中我们发送请求一般是使用axios 我们可以封装axios来避免冗余代码 首先引入axios npm install axios创建环境配置文件 NODE_ENV development VITE_APP_TITLE dev VITE_APP_BASE_API /test VITE_SERVE "http://127.0.0.1"上面是创建dev配置文件 也可以…...
【前端动效】原生js实现拖拽排课效果
目录 1. 效果展示 2. 效果分析 2.1 关键点 2.2 实现方法 3. 代码实现 3.1 html部分 3.2 css部分 3.3 js部分 3.4 完整代码 4. 总结 1. 效果展示 如图所示,页面左侧有一个包含不同课程(如语文、数学等)的列表,页面右侧…...
Python Selenium库入门使用,图文详细。附网页爬虫、web自动化操作等实战操作。
文章目录 前言1 创建conda环境安装Selenium库2 浏览器驱动下载(以Chrome和Edge为例)3 基础使用(以Chrome为例演示)3.1 与浏览器相关的操作3.1.1 打开/关闭浏览器3.1.2 访问指定域名的网页3.1.3 控制浏览器的窗口大小3.1.4 前进/后…...
AI华佗?港中大、深圳大数据研究院提出医疗推理大模型HuatuoGPT-o1
编辑 | 白菜叶 OpenAI o1 的突破凸显了通过增强推理能力来提高自然语言大模型(LLM)的应用潜力。然而,大多数推理研究都集中在数学任务上,而医学等领域尚未得到充分探索。 医学领域虽然不同于数学,但鉴于医疗保健的高…...
openEuler22.03系统使用Kolla-ansible搭建OpenStack
Kolla-ansible 是一个利用 Ansible 自动化工具来搭建 OpenStack 云平台的开源项目,它通过容器化的方式部署 OpenStack 服务,能够简化安装过程、提高部署效率并增强系统的可维护性。 前置环境准备: 系统:openEuler-22.03-LTS-SP4 配置&…...
uni-app无限级树形组件简单实现
因为项目一些数据需要树形展示,但是官网组件没有。现在简单封装一个组件在app中使用,可以无线嵌套,展开,收缩,获取子节点数据等。 简单效果 组件TreeData <template><view class"tree"><te…...
初学stm32 --- ADC单通道采集
目录 ADC寄存器介绍(F1) ADC控制寄存器 1(ADC_CR1) ADC控制寄存器 2(ADC_CR2) ADC采样时间寄存器1(ADC_SMPR1) ADC采样时间寄存器2(ADC_SMPR2) ADC规则序列寄存器 1(ADC_SQR1) ADC规则序列寄存器 2(ADC_SQR2) ADC规则序列寄存器 3(ADC_SQR3) AD…...
css盒子水平垂直居中
目录 1采用flex弹性布局: 2子绝父相margin:负值: 3.子绝父相margin:auto: 4子绝父相transform: 5通过伪元素 6table布局 7grid弹性布局 文字 水平垂直居中链接:文字水平垂直居中-CSDN博客 以下为盒子…...
django基于Python的智能停车管理系统
1.系统概述 1.定义:Django 基于 Python 的智能停车管理系统是一个利用 Django 框架构建的软件系统,用于高效地管理停车场的各种事务,包括车辆进出记录、车位预订、收费管理等诸多功能。 2.目的:它的主要目的是提高停车场的运营效…...
Rabbit Rocket kafka 怎么实现消息有序消费和延迟消费的
在消息队列系统中,像 RabbitMQ、RocketMQ 和 Kafka 这样的系统,都支持不同的方式来实现消息的有序消费和延迟消费。下面我们分别探讨这些系统中如何实现这两种需求: 1. RabbitMQ:实现消息有序消费和延迟消费 有序消费࿱…...
Kafka 会丢消息吗?
目录 01 生产者(Producer) 02 消息代理(Broker) 03 消费者(Consumer) 来源:Kafka 会丢消息吗? Kafka 会丢失信息吗? 许多开发人员普遍认为,Kafka 的设计本身就能保证不会丢失消息。然而,Kafka 架构和配置的细微差别会导致消息的丢失。我们需要了解它如何以及何时…...
状态模式详解与应用
状态模式(State Pattern),是一种行为型设计模式。它允许一个对象在其内部状态改变时改变它的行为,使得对象看起来似乎修改了它的类。通过将不同的行为封装在不同的状态类中,状态模式可以避免大量的条件判断语句&#x…...
红队工具使用全解析:揭开网络安全神秘面纱一角
红队工具使用全解析:揭开网络安全神秘面纱一角 B站红队公益课:https://space.bilibili.com/350329294 学习网盘资源链接:https://pan.quark.cn/s/4079487939e8 嘿,各位网络安全爱好者们!在风云变幻的网络安全战场上&am…...
【Spring】Redis缓存+ehcache
文章目录 基于Spring的RedisehcacheRedis 缓存配置Cacheable 注解CacheEvict 注解缓存配置 基于Spring的Redisehcache Redis 缓存配置 在项目中添加 Redis 的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot…...
【硬件介绍】Type-C接口详解
一、Type-C接口概述 Type-C接口特点:以其独特的扁头设计和无需区分正反两面的便捷性而广受欢迎。这种设计大大提高了用户的使用体验,避免了传统USB接口需要多次尝试才能正确插入的问题。Type-C接口内部结构:内部上下两排引脚的设计虽然可能不…...
网络传输层TCP协议
传输层TCP协议 1. TCP协议介绍 TCP(Transmission Control Protocol,传输控制协议)是一个要对数据的传输进行详细控制的传输层协议。 TCP 与 UDP 的不同,在于TCP是有连接、可靠、面向字节流的。具体来说,TCP设置了一大…...
Git 基础——《Pro Git》
⭐获取 Git 仓库 获取 Git 仓库有两种方式: 将未进行版本控制的本地目录转换为 Git 仓库。从其他服务器克隆一个已存在的 Git 仓库。 在已存在目录中初始化 Git 仓库 进入目标目录 在 Linux 上:$ cd /home/user/my_project在 macOS 上:$ c…...
数据结构与算法之二叉树: LeetCode 654. 最大二叉树 (Ts版)
最大二叉树 https://leetcode.cn/problems/maximum-binary-tree/ 描述 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值递归地在最大值 左边 的 子数组前缀上 构建左子树递归地在最大值…...
学习记录:C++宏定义包含多条语句,使用注意事项
应该使用 do - while(0) 结构的情况 在条件语句(如 if - else、switch - case)或循环语句(如 for、while、do - while)中使用宏: 当宏定义包含多条语句且会在上述语句中使用时,使用 do - while(0) 可确保…...
PHP 使用 Redis
PHP 使用 Redis PHP 是一种广泛使用的服务器端编程语言,而 Redis 是一个高性能的键值对存储系统。将 PHP 与 Redis 结合使用,可以为 Web 应用程序提供快速的读写性能和丰富的数据结构。本文将详细介绍如何在 PHP 中使用 Redis,包括安装、连接、基本操作以及一些高级应用。 …...
项目开发实践——基于SpringBoot+Vue3实现的在线考试系统(五)
文章目录 一、学生管理模块功能实现1、添加学生功能实现1.1 页面设计1.2 前端功能实现1.3 后端功能实现1.4 效果展示2、学生管理功能实现2.1 页面设计2.2 前端功能实现2.3 后端功能实现2.3.1 后端查询接口实现2.3.2 后端编辑接口实现2.3.3 后端删除接口实现2.4 效果展示二、代码…...
下载并安装MySQL
在Linux系统上下载并安装数据库(以MySQL为例)的步骤如下: 一、下载MySQL 访问MySQL官网 打开浏览器,访问MySQL的官方网站:https://www.mysql.com/。 进入下载页面 在MySQL官网首页,找到并点击“Downloads…...
【C++入门】详解(中)
目录 💕1.函数的重载 💕2.引用的定义 💕3.引用的一些常见问题 💕4.引用——权限的放大/缩小/平移 💕5. 不存在的空引用 💕6.引用作为函数参数的速度之快(代码体现) Ǵ…...
计算机视觉算法实战——车道线检测
✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ 车道线检测是计算机视觉领域的一个重要研究方向,尤其在自动驾驶和高级驾驶辅助…...
基于http协议的天气爬虫
该系统将基于目前比较流行的网络爬虫技术, 对网站上的天气数据进行查询分析, 最终使客户能够通过简单的操作, 快速, 准确的获取目标天气数据。主要包括两部分的功能, 第一部分是天气数据查询, 包括时间段数…...
自然语言处理基础:全面概述
自然语言处理基础:全面概述 什么是NLP及其重要性、NLP的核心组件、NLU与NLG、NLU与NLG的集成、NLP的挑战以及NLP的未来 自然语言处理(NLP)是人工智能(AI)中最引人入胜且具有影响力的领域之一。它驱动着我们日常使用的…...
软件架构考试基础知识 002:进程的状态与其切换
进程状态转换的说明 在操作系统中,进程的状态表示其当前的执行情况和资源占用情况。进程状态的转换反映了操作系统如何管理和调度进程。以下是进程状态转换的说明: 1. 三态模型(Three-state Model) 三态模型是最基础的进程状态模…...
【Linux系列】Curl 参数详解与实践应用
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
VsCode对Arduino的开发配置
ps:我的情况是在对esp32进行编译、烧录时,找不到按钮,无法识别Arduino文件,适合已经有ini文件的情况。 1.在vscode中安装拓展 2.打开设置,点击右上角,转到settings.json文件 3.复制以下代码并保存 {"…...
【Pandas】pandas Series rtruediv
Pandas2.2 Series Binary operator functions 方法描述Series.add()用于对两个 Series 进行逐元素加法运算Series.sub()用于对两个 Series 进行逐元素减法运算Series.mul()用于对两个 Series 进行逐元素乘法运算Series.div()用于对两个 Series 进行逐元素除法运算Series.true…...
VUE3 自定义指令的介绍
自定义指令的概述 在 Vue 中,自定义指令是一种机制,允许开发者在模板中直接操作 DOM 元素,执行一些低级别的操作。Vue 提供了几个内置指令(如 v-if、v-for、v-model 等),但当我们需要一些特定功能时&#…...
RedisDB双机主从同步性能测试
安装redisDB 主节点 apt install redis-server修改配置 /etc/redis/redis.conf bind 0.0.0.0save "" # 禁止RDB持久化 #save 900 1 #save 300 10 #save 60 10000appendonly no # 禁止AOF持久化重启服务 systemctl restart redis-server从节点配置文件 bind 0.…...
【汇编】x86汇编编程寄存器资源心中有数
1. CPU状态及控制寄存器 TR,GDTR,LDTRcr0-cr3EFLAGS 等等 2. 业务计算寄存器(我起的名字) 业务寄存器用于访问内存、参数传递、数据传递、计算。 段寄存器6个: cs,ds,es,ss&…...
一.项目课题 <基于TCP的文件传输协议实现>
客户端代码 需要cJSON.c文件和cJSON.h文件 在这里插入代码片#include "myheadth.h" #include "myfun.h"#define TIME 10 int sockfd; void heartbeat(int signum) {cJSON* root cJSON_CreateObject();cJSON_AddStringToObject(root,"request"…...
【数据结构学习笔记】19:跳表(SkipList)
介绍 跳表是一个能在 O ( n l o g n ) O(nlogn) O(nlogn)时间完成查找、插入、删除的数据结构,相比于树形结构优点就是很好写(所以也用于实现Redis ZSet)。其核心思想就是维护一个元素有序的,能随机提升索引层数的链表。最下面一…...