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>…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...
6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙
Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...
React核心概念:State是什么?如何用useState管理组件自己的数据?
系列回顾: 在上一篇《React入门第一步》中,我们已经成功创建并运行了第一个React项目。我们学会了用Vite初始化项目,并修改了App.jsx组件,让页面显示出我们想要的文字。但是,那个页面是“死”的,它只是静态…...
数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)
目录 🔍 若用递归计算每一项,会发生什么? Horners Rule(霍纳法则) 第一步:我们从最原始的泰勒公式出发 第二步:从形式上重新观察展开式 🌟 第三步:引出霍纳法则&…...
【java面试】微服务篇
【java面试】微服务篇 一、总体框架二、Springcloud(一)Springcloud五大组件(二)服务注册和发现1、Eureka2、Nacos (三)负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...
