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

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...

一些实用的chrome扩展0x01
简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...