docker容器使用初体验
我们写程序时,都会搭建相关的环境,比如写了一个web,使用了tomcat、nginx等,现在想要把程序部署到云服务器或者在其他电脑上运行,就需要重新部署一遍环境,尤其是项目开源后,上手成本大。
docker
介绍
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
(来源于菜鸟教程)
安装
docker依赖于linux内核,因此在windows系统中需要安装Hyper-V(类似于 VMWare 或 VirtualBox)或者WSL,然后进入docker desktop官网下载安装程序,双击运行即可。安装完成后可以在虚拟机中运行命令docker --version检查是否成功安装。
镜像和容器的区别
Docker 中镜像(Image)和容器(Container)是两个核心概念,它们有以下主要区别:
- 定义和用途:
- 镜像(Image):镜像是一个只读的文件系统快照,它包含了一个应用程序及其运行环境所需的所有内容,包括代码、库、依赖项、配置等。镜像是用于创建容器的模板,可以看作是一个静态的、不可更改的应用程序打包。
- 容器(Container):容器是一个运行时实例,它是基于镜像创建的,包含了应用程序及其所有依赖项的运行环境。容器可以被启动、停止、删除等,它提供了一个隔离的运行环境,使应用程序能够在不同的容器中运行,而不受主机环境的影响。
- 可变性:
- 镜像是不可更改的,一旦创建就不能修改。如果需要对应用程序或环境进行更改,必须创建一个新的镜像。
- 容器是可变的,可以在运行时进行修改。你可以进入容器、安装软件、修改配置等,然后保存为新的镜像,以便将更改保存下来。
- 生命周期:
- 镜像的生命周期是静态的,它存在于磁盘上并可以被多个容器实例使用。
- 容器的生命周期是动态的,它可以被创建、启动、停止和销毁。容器是临时的运行实体。
- 资源消耗:
- 镜像通常占用磁盘空间,并且资源消耗较低,因为它们是静态的。
- 容器占用系统资源(CPU、内存等),因为它们正在运行应用程序和服务。
总之,镜像是容器的模板,用于创建容器实例。容器是在镜像基础上运行的可执行实体,具有自己的运行时状态。Docker 的强大之处在于它允许你使用镜像来轻松创建、分发和管理容器,从而实现应用程序的隔离和可移植性。
dockerhub
Docker Hub 是一个在线的 Docker 镜像仓库和容器注册表服务。它是 Docker 公司提供的官方服务,用于帮助开发人员和运维团队存储、分享和获取 Docker 镜像。Docker Hub 允许用户上传、存储和管理 Docker 镜像。这些镜像可以包含操作系统、应用程序、服务和其他容器化的组件,供其他用户下载和使用,类似于Github仓库。
如果要上传一个镜像,就需要编写dockerfile脚本文件,在这个文件中写入环境配置的命令行。
docker和虚拟机区别
Docker 和虚拟机是两种不同的虚拟化技术,它们在应用、资源消耗、启动时间和隔离等方面有一些重要区别。以下是 Docker 和虚拟机之间的主要区别:
架构和隔离:
Docker:Docker 使用容器技术,容器共享主机操作系统的内核,但在容器内部提供隔离的用户空间。这意味着容器之间共享操作系统内核,使其轻量且启动迅速。容器之间的隔离通过 Linux 内核的命名空间和控制组技术实现。
虚拟机:虚拟机是完全虚拟化的技术,每个虚拟机都运行自己的操作系统内核。这意味着虚拟机需要更多的资源,并且启动速度较慢,因为它们需要模拟整个操作系统。
资源消耗:
Docker:由于容器共享主机操作系统的内核,所以 Docker 容器通常比虚拟机更轻量,需要较少的内存和存储资源。
虚拟机:虚拟机通常需要更多的资源,因为每个虚拟机都包含自己的操作系统内核和系统文件。
启动时间:
Docker:Docker 容器可以在几秒内启动,因为它们不需要启动整个操作系统内核。
虚拟机:虚拟机通常需要更长的时间来启动,因为它们需要模拟和启动整个操作系统。
应用部署和管理:
Docker:Docker 容器的部署和管理相对简单,可以使用 Docker Compose 和 Kubernetes 等工具来自动化管理多个容器。
虚拟机:虚拟机的部署和管理相对复杂,需要使用虚拟化管理工具来创建、配置和监视虚拟机。
跨平台支持:
Docker:Docker 容器可以在不同的操作系统上运行,前提是它们都支持 Docker。
虚拟机:虚拟机通常需要适用于特定虚拟化平台的映像,并且不太容易跨平台移植。
隔离性:
Docker:容器提供了一定程度的隔离,但不如虚拟机隔离得严格。容器之间可以共享操作系统内核,这意味着一些攻击可能会影响多个容器。
虚拟机:虚拟机提供了更强的隔离性,每个虚拟机都有独立的内核和资源,攻击一个虚拟机不会影响其他虚拟机。
根据你的需求和用例,你可以选择使用 Docker 或虚拟机来虚拟化和隔离应用程序。Docker 更适合轻量级、可扩展的应用程序,而虚拟机通常更适合需要更严格隔离或运行不同操作系统的应用程序。在实际应用中,有时也会同时使用 Docker 和虚拟机,以充分利用它们各自的优势。
更改镜像源
docker默认镜像源速度很慢,可以更改为以下镜像源:
{"registry-mirrors": ["https://registry.hub.docker.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn","https://registry.docker-cn.com"]
}
使用
可以将代码拉取到虚拟机本地,然后把代码上传到docker,进入容器,执行代码,参考以下命令
拉取代码
git clone https://github.com/oceanbase/miniob.git
挂载方式新建一个新容器,-v表示挂载,:前面表示本地文件目录,:后面表示你要在docker 容器中挂载的位置(随意,没有该目录也会新建)
docker run -it -v /usr/lyjps/miniob:/lyjps oceanbase/miniob
执行下面的命令进入容器,并创建bash终端,此时就可以使用Linux终端方式进行一些开发工作
docker exec -it miniob bash
相关文章:
docker容器使用初体验
我们写程序时,都会搭建相关的环境,比如写了一个web,使用了tomcat、nginx等,现在想要把程序部署到云服务器或者在其他电脑上运行,就需要重新部署一遍环境,尤其是项目开源后,上手成本大。 docker…...
React Hooks ——性能优化Hooks
什么是Hooks Hooks从语法上来说是一些函数。这些函数可以用于在函数组件中引入状态管理和生命周期方法。 React Hooks的优点 简洁 从语法上来说,写的代码少了上手非常简单 基于函数式编程理念,只需要掌握一些JavaScript基础知识与生命周期相关的知识不…...
C#学习系列相关之多线程(一)----常用多线程方法总结
一、多线程的用途 在介绍多线程的方法之前首先应当知道什么是多线程, 在一个进程内部可以执行多个任务,而这每一个任务我们就可以看成是一个线程。是程序使用CPU的基本单位。进程是拥有资源的基本单位, 线程是CPU调度的基本单位。多线程的作用…...
Vscode爆红Delete `␍`eslintprettier/prettier
一、先看报错 文件中爆红,提示 Delete ␍eslintprettier/prettier 二、解决方案 项目根目录下,.prettierrc.js 文件中: endOfLine: auto,三、重启VsCode 此时不在爆红,问题完美解决...
Mac安装Ecplise产品报错:dose not contain the JNI_CreateJavaVM symbol
1. 絮絮叨叨 工作中需要借助Ecplise Memory Analyzer (MAT)分析dump文件,直接下载、安装、运行MAT报错 询问同事后,同事说可以先安装Ecplise,再以插件的形式安装MAT下载、安装好Eclipse,点击运行仍然报错,且错误信息一…...
如何使用大语言模型来绘制图画
请创作一张科技感十足的图片,包含siri和iphone两个元素,请帮我挑选合适的style和background 好的,我会为你创作一张科技感十足的图片,包含siri和iphone两个元素。我会根据你的要求,选择一种适合的风格和背景。请稍等一…...
代码随想录算法训练营第23期day11 | 20. 有效的括号、1047. 删除字符串中的所有相邻重复项 、150. 逆波兰表达式求值
目录 一、(leetcode 20)有效的括号 二、(leetcode 1047)删除字符串中的所有相邻重复项 用栈存放 将字符串直接当成栈 三、(leetcode 150)逆波兰表达式求值 一、(leetcode 20)…...
数据结构-优先级队列(堆)
文章目录 目录 文章目录 前言 一 . 堆 二 . 堆的创建(以大根堆为例) 堆的向下调整(重难点) 堆的创建 堆的删除 向上调整 堆的插入 三 . 优先级队列 总结 前言 大家好,今天给大家讲解一下堆这个数据结构和它的实现 - 优先级队列 一 . 堆 堆(Heap࿰…...
C++11新特性(语法糖,新容器)
距离C11版本发布已经过去那么多年了,为什么还称为新特性呢?因为笔者前面探讨的内容,除了auto,范围for这些常用的,基本上是用着C98的内容,虽说C11已经发布很多年,却是目前被使用最广泛的版本。因…...
开机可用内存分析Tip
一、开机内存简介 开机内存指的是开机一段时间稳定后的可用内存。一般项目都会挑选同平台其他优秀竞品内存数据,这个也是衡量性能的一个重要标准。所以要进行开机内存检测,同时优化非法内存进程占用。 二、测试前期核查任务 开机内存测试前要进行测试机…...
【Python基础】4. 基本语句
文章目录 注释(Comment)解释伴随行文本编码问题 输入输出语句(Input & Output)输出语句普通输出格式化输出(3种)format 格式总结 输入语句 基本语句if 语句match 语句(Python3.10 新增&…...
兼顾友好与安全,隐私协议 Unijoin 助推新一轮 Web3 浪潮
区块链本身不仅崇尚去中心化,同时也崇尚公开透明,虽然这正在让 DAO 治理等变得更加公平,但它同时也是一把双刃剑,个人交易者尤其是一些巨鲸交易者的所以链上交易都被公之于众,这似乎并不是他们想要的结果。 所以从加密…...
TCP端口崩溃,msg:socket(): Too many open files
一、现象 linux系统中运行了一个TCP服务器,该服务器监听的TCP端口为10000。但是长时间运行时发现该端口会崩溃,TCP客户端连接该端口会失败: 可以看到进行三次握手时,TCP客户端向该TCP服务器的10000端口发送了SYN报文,…...
基于Laravel 5.6的运动健身类小程序前后端源码
基于Laravel 5.6的运动健身、健康类小程序前后端源码,一套比较基础的运动健康、健身类小程序源码。朋友自己无聊写的,比较基础,有需要的可以拿去修修改改升级开发一下。 使用宝塔安装,比较省事,PHP相关的扩展需要启用…...
NodeMCU ESP8266硬件开发板的熟悉
文章目录 硬件开发环境的熟悉基础介绍什么是 ESP8266 NodeMCU?NodeMCU芯片ESP12-E 模组开发板 ESP8266 版本引脚图Power GND I2CGPIOADCUARTSPIPWMControl 总结 硬件开发环境的熟悉 基础介绍 什么是 ESP8266 NodeMCU? ESP8266是乐鑫开发的一款低成本 …...
计算机毕业设计 基于SSM的在线预约导游系统的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...
Mac 挂载 Alist网盘
挂载服务器的Alist 网盘到 Mac mac,使用的是 CloundMounter 这个软件进行挂载 http://ip:port/dav/ 需要在末尾加上 /dav/ 在一些服务器上,为了提供WebDAV服务,需要在URL地址的末尾添加"/dav/“。这是因为WebDAV协议规定了一些标准的URL路径&#x…...
【多模态融合】TransFusion学习笔记(1)
工作上主要还是以纯lidar的算法开发,部署以及系统架构设计为主。对于多模态融合(这里主要是只指Lidar和Camer的融合)这方面研究甚少。最近借助和朋友们讨论论文的契机接触了一下这方面的知识,起步是晚了一点,但好歹是开了个头。下面就借助TransFusion论文…...
(二)正点原子STM32MP135移植——TF-A移植
目录 一、TF-A概述 二、编译官方代码 2.1 解压源码 2.2 打补丁 2.3 编译准备 (1)修改Makfile.sdk (2)设置环境变量 (3)编译 三、移植 3.1 复制官方文件 3.2 修改电源 3.3 修改TF卡和emmc 3.4 添…...
将二叉搜索树转化为排序的双向链表
链接: LCR 155. 将二叉搜索树转化为排序的双向链表 题解: /* // Definition for a Node. class Node { public:int val;Node* left;Node* right;Node() {}Node(int _val) {val _val;left NULL;right NULL;}Node(int _val, Node* _left…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
