Linux Docker
Docker 的定义
Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖项打包成一个可移植的容器。容器是一种轻量级、独立的运行环境,与传统的虚拟机不同,容器共享主机操作系统的内核,通过隔离的文件系统、进程空间和网络接口来运行应用程序。
例如,你可以把一个 Web 应用(包括 Web 服务器、应用代码、数据库连接库等)打包到一个 Docker 容器中。这个容器可以在任何安装了 Docker 的主机上运行,而不用担心环境差异导致应用无法正常运行。
Docker 的核心组件
镜像(Image)
镜像是 Docker 容器的基础,它是一个只读的模板,包含了运行一个容器所需的文件系统、代码、运行时环境、库等所有内容。就像一个光盘,里面有安装软件所需的所有文件。例如,有一个官方的 Ubuntu 镜像,它包含了完整的 Ubuntu 操作系统文件系统和基础软件包。
镜像可以通过继承和分层来构建。比如,你可以在一个基础的 Python 镜像上添加自己的应用代码层,构建出一个包含特定 Python 应用的镜像。
容器(Container)
容器是镜像的运行实例。可以把容器想象成从光盘(镜像)中安装并启动的一个软件。它是一个独立的运行环境,有自己的进程空间、文件系统和网络接口。例如,你可以同时运行多个基于相同镜像的容器,每个容器都有自己独立的运行状态,就像同时运行多个相同软件的副本,它们之间互不干扰。
仓库(Repository)
仓库是用来存储和分发 Docker 镜像的地方,类似于代码仓库。Docker Hub 是最著名的公共仓库,它包含了大量由官方和社区用户创建的镜像。例如,你可以在 Docker Hub 上找到各种操作系统镜像、数据库镜像(如 MySQL、PostgreSQL)、编程语言运行时环境镜像(如 Python、Java)等。
相比虚拟机,容器的启动速度更快,占用的资源更少。容器共享主机操作系统的内核,不需要像虚拟机那样为每个实例运行一个完整的操作系统。例如,你可以在一台主机上运行成百上千个容器,而如果是虚拟机,资源消耗会大得多,运行的数量也会受到限制。
安装 Docker
在大多数 Linux 发行版上,可以通过包管理器来安装 Docker。
Ubuntu 和 Debian 系统:
首先更新软件包列表:
sudo apt-get update
安装 Docker 相关的包,包括docker.io(这是 Ubuntu 和 Debian 上 Docker 的软件包名称):
sudo apt-get install docker.io
启动 Docker 服务并设置开机自启:
sudo systemctl start docker
sudo systemctl enable docker
CentOS 和 RHEL 系统:
安装所需的依赖包:
sudo yum install -y yum - utils device - mapper - persistent - data lvm2
设置 Docker 仓库:
sudo yum - config - manager -- add - repo https://download.docker.com/linux/centos/docker - ce.repo
安装 Docker CE(社区版):
sudo yum install docker - ce docker - ce - cli containerd.io
启动并设置开机自启:
sudo systemctl start docker
sudo systemctl enable docker
基本的 Docker 操作命令(代码示例)
拉取镜像:
从 Docker Hub(公共仓库)拉取一个 Ubuntu 镜像,命令如下:
sudo docker pull ubuntu
这会从 Docker Hub 下载最新的 Ubuntu 镜像到本地。你可以指定镜像的标签来拉取特定版本,例如sudo docker pull ubuntu:18.04来拉取 Ubuntu 18.04 版本的镜像。
查看本地镜像:
使用以下命令来查看已经下载到本地的镜像:
sudo docker images
这个命令会列出本地镜像的仓库名、标签、镜像 ID、创建时间和大小等信息。
运行容器:
基于刚才拉取的 Ubuntu 镜像运行一个容器,例如:
sudo docker run -it ubuntu /bin/bash
这里-it参数表示以交互模式(-i)和伪终端(-t)运行容器,ubuntu是镜像名称,/bin/bash是在容器启动后要执行的命令,这个命令会在容器中打开一个 bash 终端,你可以在里面进行操作,就像在一个独立的 Ubuntu 系统中一样。
容器内操作示例:
假设你已经在容器中(通过上面的run命令进入),可以进行一些基本的操作。例如,更新软件包列表并安装一个软件,在 Ubuntu 容器中:
apt-get update
apt-get install -y curl
这里curl是一个示例软件,你可以根据需要安装其他软件。安装完成后,可以测试curl是否可以正常使用,例如:
curl https://www.example.com
退出容器:
在容器的终端中,输入exit即可退出容器。
查看正在运行的容器:
使用以下命令查看当前正在运行的容器:
sudo docker ps
这个命令会列出正在运行的容器的 ID、名称、使用的镜像、创建时间、状态等信息。如果要查看包括已经停止的容器,可以使用docker ps -a。
停止容器:
如果你想停止一个正在运行的容器,首先通过docker ps获取容器的 ID 或名称,然后使用以下命令停止:
sudo docker stop [容器ID或名称]
删除容器:
在容器停止后,可以使用以下命令删除容器:
sudo docker rm [容器ID或名称]
构建自定义镜像(使用 Dockerfile):
假设你有一个简单的 Python 应用,首先创建一个Dockerfile(这是一个文本文件,没有扩展名,名称必须是Dockerfile),内容如下:
# 基于Python官方镜像
FROM python:3.9
# 设置工作目录
WORKDIR /app
# 将当前目录下的所有文件复制到容器的/app目录下
COPY. /app
# 安装应用所需的依赖(假设使用requirements.txt)
RUN pip install -r requirements.txt
# 定义容器启动时要执行的命令
CMD ["python", "app.py"]
这个Dockerfile假设你的 Python 应用代码在当前目录下,并且有一个requirements.txt文件列出了应用所需的依赖。在Dockerfile所在的目录下,执行以下命令来构建镜像:
sudo docker build -t my - python - app:v1.
这里-t参数用于指定镜像的标签(名称和版本),my - python - app:v1是一个示例标签,你可以根据自己的需要修改。构建完成后,可以通过docker images查看新构建的镜像,然后按照前面的方法运行这个自定义镜像的容器。
相关文章:
Linux Docker
Docker 的定义 Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖项打包成一个可移植的容器。容器是一种轻量级、独立的运行环境,与传统的虚拟机不同,容器共享主机操作系统的内核,通过隔离的文件系统、进程空间和网…...
MSE学习
MSE简介 媒体源拓展(Media Source Extensions,简称 MSE)是一个由 W3C 制定的标准,它允许 JavaScript 代码通过 AJAX 请求获取媒体数据,并将其提供给 HTML 的 <video> 或 <audio> 元素进行播放。 MSE特点…...
0-基于蚁群优化和带注意力机制的循环神经网络的新型混合算法用于解决旅行商问题(HAL science)(完)
文章目录 AbstractI INTRODUCTIONII 旅行商问题的正式描述III STATE OF THE ARTIV 使用的混合化技术原理4.1 Principle of ACO4.2具有注意机制的自动编码器模型V 蚁群优化与具有注意机制的神经网络的混合5.1 基本思想5.2 解决步骤5.2.1 模型训练5.2.2 寻找解VI EXPERIMENTS6.1 …...
MIUI显示/隐藏5G开关的方法,信号弱时开启手机Wifi通话方法
5G网速虽快,手机功耗也大。 1.取消MIUI强制的5G,手动设置4G的方法! 【小米澎湃OS, Xiaomi HyperOS显示/隐藏5G开关的方法】 1.1.小米MIUI系统升级后,被强制连5G,手动设置开关被隐藏,如下图: 1…...
挑战20天刷完leecode100
2025.1.5 二分查找 1 搜索插入位置 就是简单的二分查找 注意开闭就行 这里有一句话就是nums是升序的 如果他不是严格递增 就是有相同的数字的情况下应该怎么写? int lower_bound(vector<int>& nums, int target) {int left 0, right (int) nums.size() - 1; …...
Java列表示例
示例1:使用ArrayList创建并操作列表 ArrayList是List接口最常用的实现之一,它内部使用数组来存储元素,因此对于随机访问具有很高的效率。但是,当涉及到频繁的插入或删除操作时,它的性能可能会受到影响,因为…...
Objective-C语言的网络编程
Objective-C语言的网络编程 引言 在现代软件开发中,网络编程逐渐成为一个不可或缺的部分,特别是在移动应用和分布式系统中。Objective-C 是一种主要用于 iOS 和 macOS 开发的编程语言,它在网络编程方面也有着丰富的支持。在这篇文章中&…...
安卓OCR使用(Google ML Kit)
OCR是一个很常用的功能,Google ML Kit提供了OCR能力,用起来也很简单,本文介绍一下使用方法。 1. 相关概念 名词概念解释TextBlock块一个段落Line行一行文本Element元素单词;对汉字来说,类似"开头 (分隔符)中间&…...
《机器学习》——贝叶斯算法
贝叶斯简介 贝叶斯公式,又称贝叶斯定理、贝叶斯法则,最初是用来描述两个事件的条件概率间的关系的公式,后来被人们发现具有很深刻的实际意义和应用价值。该公式的实际内涵是,支持某项属性的事件发生得愈多,则该属性成…...
【博主推荐】 Microi吾码开源低代码平台,快速建站,提高开发效率
🍬引言 🍬什么是低代码平台? 低代码平台(Low-Code Platform)是一种使开发人员和业务用户可以通过图形化界面和少量的编程来创建应用程序的开发工具。与传统的编程方式相比,低代码平台大大简化了开发过程&a…...
网站自动签到
我研究生生涯面临两个问题,一是写毕业论文,二是找工作,这两者又有很大的冲突。怎么解决这两个冲突呢?把python学好是一个路子,因此从今天我要开一个专栏就是学python 其实我的本意不是网站签到,我喜欢在起点…...
C 语言奇幻之旅 - 第16篇:C 语言项目实战
目录 引言1. 项目规划1.1 需求分析与设计1.1.1 项目目标1.1.2 功能需求1.1.3 技术实现方案 2. 代码实现2.1 模块化编程2.1.1 学生信息模块2.1.2 成绩管理模块 2.2 调试与测试2.2.1 调试2.2.2 测试2.2.4 测试结果 3. 项目总结3.1 代码优化与重构3.1.1 代码优化3.1.2 代码重构 3.…...
项目实战——使用python脚本完成指定OTA或者其他功能的自动化断电上电测试
前言 在嵌入式设备的OTA场景测试和其他断电上电测试过程中,有的场景发生在夜晚或者随时可能发生,这个时候不可能24h人工盯着,需要自动化抓取串口日志处罚断电上电操作。 下面的python脚本可以实现自动抓取串口指定关键词,然后触发…...
04、Redis深入数据结构
一、简单动态字符串SDS 无论是Redis中的key还是value,其基础数据类型都是字符串。如,Hash型value的field与value的类型,List型,Set型,ZSet型value的元素的类型等都是字符串。redis没有使用传统C中的字符串而是自定义了…...
【MySQL学习笔记】MySQL的索引
MySQL索引 1、索引概述2、 索引的数据结构2.1 BTree索引结构2.2 Hash索引结构2.3 InnoDB选择BTree的原因 3、索引分类4、索引的语法5、SQL性能分析5.1 SQL执行频率5.2 慢查询日志5.3 profile详情5.4 explain执行计划 6、索引使用规则6.1 最左前缀法则6.2 范围查询6.3索引失效情…...
利用ArcGIS快速准确地统计出地块的现状容积率
研究目的 根据建筑.dwg、建筑.dwg Annotation、建筑.dwg Polygon,地籍边界.shp等数据,利用GIS快速准确地统计出地块的现状容积率。 研究思路 加载数据图层:建筑.dwg Polygon、建筑.dwg Annotation,使用空间连接功能把建筑层数数…...
C++类的引入
C中类的前身 1> 面向对象三大特征:封装、继承、多态 2> 封装:将能够实现某一事物的所有万事万物都封装到一起,包括成员属性(成员变量),行为(功能函数)都封装在一起ÿ…...
【跨域问题】
跨域问题 官方概念: 当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域本质来说,是前端请求给到后端时候,请求头里面,有一个 Origin ,会带上 协议域名端口号等;后端接受到请求&…...
“深入浅出”系列之FFmpeg:(1)音视频开发基础
我的音视频开发大部分内容是跟着雷霄骅大佬学习的,所以笔记也是跟雷老师的博客写的。 一、音视频相关的基础知识 首先播放一个视频文件的流程如下所示: FFmpeg的作用就是将H.264格式的数据转换成YUV格式的数据,然后SDL将YUV显示到电脑屏幕上…...
Springboot3.4整合jsp
文章目录 环境 springboot3.4 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency> <!--用于编译jsp--> <!-- Tomcat Embed Jasper --> <dependency>…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
