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…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...

路由基础-路由表
本篇将会向读者介绍路由的基本概念。 前言 在一个典型的数据通信网络中,往往存在多个不同的IP网段,数据在不同的IP网段之间交互是需要借助三层设备的,这些设备具备路由能力,能够实现数据的跨网段转发。 路由是数据通信网络中最基…...