Docker安装使用
文章目录
- Docker安装
- Docker的基础使用
- 搜索&拉取镜像
- Docker的生命周期
- 利用Docker切换不同OS
- Docker容器
- 镜像的保存&分享
- Docker存储
- Docker网络
Docker安装
- 更新apt索引
sudo apt-get update
- 添加Docker所需要的依赖
apt-get install ca-certificates curl gnupg lsb-release
- 添加Docker的GPG秘钥,这里我添加的是Tsinghua的
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/gpg |apt-key add -
- 添加Docker的软件源到apt中并且更新
sudo add-apt-repository "deb [arch=amd64] http://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
- 安装Docker
apt-get install docker-ce docker-ce-cli containerd.io
- 修改Daemon添加仓库源
vim /etc/docker/daemon.json
添加如下:
{"registry-mirrors": ["https://dockerproxy.com","https://docker.m.daocloud.io","https://cr.console.aliyun.com","https://ccr.ccs.tencentyun.com","https://hub-mirror.c.163.com","https://mirror.baidubce.com","https://docker.nju.edu.cn","https://docker.mirrors.sjtug.sjtu.edu.cn","https://github.com/ustclug/mirrorrequest","https://registry.docker-cn.com"]
}
- 载入Daemon并且启动Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
- 测试是否可以使用
sudo docker run hello-world
- 配置用户组,让其余用户也可以使用
sudo usermod -aG docker username
newgrp docker
Docker的基础使用
搜索&拉取镜像
通过docker search 镜像名可以直接搜索可以匹配到的相关镜像:
docker search nginx
找到之后就可以把镜像下载下载,使用docker pull命令即可:
docker pull nginx
此时可以通过docker image ls查看当前所拥有的所有镜像。
docker image ls
通过ls可以查看到镜像的具体ID,通过ID可以移除镜像:
docker rmi ID
Docker的生命周期
如上图所示
- 首先Dockerfile用户构建一个Image,然后这个Image和容器之间可以通过run和commit进行运行和提交。
- Images可以添加tag管理版本,容器自身可以通过各种操作管理状态。
- 最后就是Images与备份和Docker仓库之间的拉取和上传操作。
利用Docker切换不同OS
Docker的本质上是通过构建不同的容器来隔离环境,从而做到在一个操作系统上运行多种需求的技术。这里Docker的每个容器并不是一个OS,不具备一个OS所需要的所有部件。因此Docker比虚拟机要节省资源。
举例来说,Docker可以在一个Linux服务器上部署多种发行版。在实际操作中并不是把这些发行版全部下载了,只是下载了其软件包的部分,他们共用宿主主机的内核。因此大大节省了资源开销。
举个例子:拉取Centos和ubuntu镜像
docker pull centos:7.8.9.2003
通过-it以交互式进入到镜像中并且开启一个新的terminal
docker run -it your_centos_id bash
其中bash指定了我们使用bash作为shell,进入后通过cat /etc/redhat-release就可以查看当前系统,已经备切换到了centos中
cat /etc/redhat-release
通过exit就可以退出容器环境。从这里也可以了解到了Docker的原理,本质上类似于Python的虚拟环境这样的技术,而不是虚拟操作系统。
Docker容器
接下来开始使用Docker的容器,以Nginx为例子。
首先,通过docker run指令就可以启动一个容器
docker run -d -p 80:80 nginx
其中80:80指的是从容器内的80端口映射到容器外宿主机的80端口是-p的参数,-d是后台运行。后面可以使用nginx这个名称直接指定镜像也可以使用期内部的镜像ID制定。
docker run还有如下的参数:
- –rm: 容器停止后自动删除容器
- -it: 交互式运行容器,分配一个伪终端
- –env 或 -e: 设置环境变量
- –restart: 容器的重启策略
- –name: 给容器指定一个名称
使用上述的指令后nginx就运行在了docker容器并且在后台运行。通过ps指令可以查看当前的状态:
docker ps
这个时候通过80端口就可以访问到nginx了。如果此时你想要进入到Docker的容器的后台查看具体的情况,也就是从后台切到前台,可以使用exec指令:
docker exec -it c15692f358e6 bash
此时你就可以进入到这个正在运行的容器内部进行操作。exec还有很多其他的参数,主要用于给正在运行的容器执行一个新的命令,全部的表述为:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
参数有:
- -d, --detach: 在后台运行命令。
- -e, --env: 设置环境变量。
- –env-file: 从文件中读取环境变量。
- -i, --interactive: 保持标准输入打开。
- –privileged: 给这个命令额外的权限。
- –user, -u: 以指定用户的身份运行命令。
- -t, --tty: 分配一个伪终端。
这里涉及到Docker Image的原理,如图所示,一个Docker的Image是包含了很多的层,其中包含了可以写入的部分和不可写的部分。从下到上依次是各式各样的依赖,最后一层是可写层,也就是我们进入后台后所到的位置。在这里我们可以进行一些操作,也叫容器层。
Docker这样对镜像进行分层有很多好处,例如可以多个容器共享同一个底层镜像。节省资源,而需要进行修改时,Docker又会自动的对其进行复制。
所有的容器的修改都只发生在容器层,所有的底层Image都不会被修改或者删除,更像是软删除,软修改这样的操作。
随后介绍docker剩下的所有容器指令:
docker stop用于停止一个镜像
docker stop c15692f358e6
此时就停止了原本的nginx所在的容器,此时使用docker ps是看不到任何的容器的,但是并不意味着容器被销毁了,其实没有的。使用docker ps -a即可查看所有的容器:
docker ps -a
返现原本的nginx还是有的,只不过是处于exited状态。如果你想恢复容器使用,那么就是用docker start指令:
docker start c15692f358e6
同理你还可以使用restart指令进行重启,效果类似于stop + start。
如果当然,容器运行时会发生很多的错误,你可以使用docker logs来进行查看日志debug
docker logs c15692f358e6
最后如果你不想要一个容器,你可以通过rm指令直接删除:
docker rm c15692f358e6
类似Linux的rm你可以通过添加-f强制删除即使是在运行的容器
docker rm -f c15692f358e6
镜像的保存&分享
docker允许我们把自己本地的容器内的镜像进行打包,然后发送给其他人。类似于git。我们可以使用commit,save和load来完成这些工作。
首先,使用docker commit命令可以把镜像进行打包:
docker commit -a Zipper -m "Test Image" -p c15692f358e6 mynginx:v1.0
其中各个参数如下:
- -a 指定作者
- -m 详细信息
- -p 在commit时暂停运行镜像
其中,保存的最后的两个参数为 容器名 镜像名称,此时就生成了一个Mynginx:v1.0镜像。此时你使用 docker image ls指令就可以发现多了一个mynginx包
随后可以使用save指令把镜像打包为一个tar包
docker save -o mynginx.tar Mynginx:v1.0
类似的,你可以使用load指令把一个镜像压缩包导入到docker中
docker load -i ./mynginx.tar
Docker存储
Docker内的许多数据修改起来十分的困难,因为这些容器内可能连vim这类的基础命令都不存在。假如我们希望容器内能对外部的数据进行读取和写入,此时我们又不可能把数据全部迁移容器内,此时就会很麻烦。
所以,我们必须要能在外部的宿主系统上对一些容器内的数据进行修改操作,以方便我们在外部进行一些操作。于是Docker提供了目录挂载功能,方便我们把宿主机的容器挂载到容器中,让容器对其进行操作。
我们可以在docker启动的时候添加一个-v参数,使其把宿主机目录挂载到容器目录内
docker run -d -p 80:80 -v /app/html:/usr/share/nginx/html nginx
如上所示,我们就完成了一个挂载。
有时在初始化一个容器时,容器内的某个目录下有一些东西这些外部的宿主机目录是没有的,如果强行挂载会导致挂载失败容器直接无法启动。这是因为容器外的挂挂载目录缺少这些初始配置,而容器启动又依赖于这些初始配置。
所以此时我们就需要使用卷映射,他会在初始化时在宿主机的固定一个目录下初始化一个卷,把docker容器内的内容复制过来并且建立映射。卷映射使用-v,但是不再以/作为开头,而是只有一个卷名
docker run -d -p 80:80 -v nginxvol:/usr/share/nginx/ nginx
此时你就会在/var/lib/docker/volumes下找到一个叫做nginxvol,这个就是映射的内容。
Docker网络
有时候,我们可能部署多个容器,容器内的服务可能需要互相通信(例如前端和后端),这就需要配置容器之间的网络。docker每启动一个容器都会为容器分配一个唯一的ip,我们可以使用这个ip直接跨容器通信。
使用ifconfig即可查看:
ifconfig
但是直接使用ip会导致访问出现问题,例如在迁移时可能会导致ip变化。最保险的做法是通过域名来访问。我们可以使用docker network来创建docker网络
docker network create mynet
而在容器启动时可以使用docker run添加–network参数来选择我们使用的网络。当多个容器加入到同一个网络时,他们就可以互相的通信访问,直接使用容器名替代原本的ip进行访问。
相关文章:

Docker安装使用
文章目录 Docker安装Docker的基础使用搜索&拉取镜像 Docker的生命周期利用Docker切换不同OSDocker容器 镜像的保存&分享Docker存储Docker网络 Docker安装 更新apt索引 sudo apt-get update添加Docker所需要的依赖 apt-get install ca-certificates curl gnupg lsb-r…...
React 如何进行路由变化监听
一、使用react-router库(以react-router-dom为例) 1. 历史(history)对象监听 1.1 原理 react-router内部使用history对象来管理路由历史记录。可以通过访问history对象来监听路由变化。在基于类的组件中,可以通过组…...

Unity UGUI使用技巧与经验总结(不定期更新)
Text自动缩放参考连接: Unity -UGUI中Text文本框的自动调整,字体大小的自适应调节_unity添加的字体大小锁定-CSDN博客 Toggle按钮选择时,显示对应的UI界面: 为Toggle组件的On Value Change事件添加对需要显示的对象的SetActive…...

中国乡镇界shp全境arcgis格式shp数据乡镇名称下载后内容测评
下载乡镇界shp链接:https://download.csdn.net/download/zhongguonanren99/19354855 标题中的“中国乡镇界shp全境arcgis格式shp数据乡镇名称2012年”揭示了这个数据集的核心内容。它是一个地理信息系统(GIS)数据,具体来说是使用…...

第 31 章 - 源码篇 - Elasticsearch 写入流程深入分析
写入源码分析 接收与处理 请求首先会被 Netty4HttpServerTransport 接收,接着交由 RestController 进行路由分发。 private void tryAllHandlers(final RestRequest request, final RestChannel channel, final ThreadContext threadContext) throws Exception {…...

node.js下载、安装、设置国内镜像源(永久)(Windows11)
目录 node-v20.18.0-x64 工具下载安装设置国内镜像源(永久) node-v20.18.0-x64 工具 系统:Windows 11 下载 官网https://nodejs.org/zh-cn/download/package-manager 版本我是跟着老师选的node-v20.18.0-x64如图选择 Windows、x64、v2…...
小于n的最大数 - 贪心算法 - C++
字节经典面试题 给定一个整数n,并从1~9中给定若干个可以使用的数字,根据上述两个条件,得到每一位都为给定可使用数字的、最大的小于整数n的数,例如,给定可以使用的数字为 {2,3,8} 三个数:给定 n3589&#x…...

【顶刊TPAMI 2025】多头编码(MHE)之极限分类 Part 3:算法实现
目录 1 三种多头编码(MHE)实现1.1 多头乘积(MHP)1.2 多头级联(MHC)1.3 多头采样(MHS)1.4 标签分解策略 论文:Multi-Head Encoding for Extreme Label Classification 作者…...
解决CentOS 8 YUM源更新后报错问题:无法下载AppStream仓库元数据
背景介绍 在尝试更新CentOS 8的YUM源以使用阿里云镜像时,遇到了Failed to download metadata for repo appstream的错误。此错误通常出现在执行yum clean all && yum makecache命令之后,表明系统无法从指定的URL获取AppStream仓库的元数据。本文…...
[python3]Excel解析库-openpyxl
https://openpyxl.readthedocs.io/en/stable/ openpyxl 是一个用于读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的 Python 库。它允许开发者创建、修改和保存电子表格,而无需依赖 Microsoft Excel 软件本身。openpyxl 支持读取和写入 Excel 的工作簿(Work…...

Docker 远程访问完整配置教程以及核心参数理解
Docker 远程访问完整配置教程 以下是配置 Docker 支持远程访问的完整教程,包括参数说明、配置修改、云服务器安全组设置、主机防火墙配置,以及验证远程访问的详细步骤。 1. 理解 -H fd:// 参数的作用(理解了以后容易理解后面的操作ÿ…...

王老吉药业SRM系统上线 携手隆道共启战略合作新篇章
12月27日,广州王老吉药业股份有限公司(简称“王老吉药业”)SRM项目上线启动会,在王老吉科普教育基地——“吉园”隆重举行。广药集团纪委主任陈耕、王老吉药业总工程师黄晓丹、隆道公司总裁吴树贵、项目经理赵耀、供应商代表郭伟及…...
MyBatis 配置文件全解析
一、MyBatis 配置文件为何至关重要? 在 Java 后端开发领域,MyBatis 作为一款广受欢迎的持久层框架,极大地简化了数据库操作。而 MyBatis 配置文件,恰似整个框架的 “神经中枢”,掌控着其运行的方方面面,对…...

unity学习6:unity的3D项目的基本界面和菜单
目录 1 unity界面的基本认识 1.1 file 文件 1.2 edit 编辑/操作 1.3 Assets 1.4 gameobject 游戏对象 1.5 组件 1.6 windows 2 这些部分之间的关系 2.1 关联1: Assets & Project 2.2 关联2:gameobject & component 2.3 关联3…...

企业二要素如何用C#实现
一、什么是企业二要素? 企业二要素,通过输入统一社会信用代码、企业名称或统一社会信用代码、法人名称,验证两者是否匹配一致。 二、企业二要素适用哪些场景? 例如:信用与金融领域 1.信用评级:信用评级…...

中科院空天院无人机视觉语言导航新基准!AeroVerse:模拟、预训练、微调和评估空中无人机具身世界模型的测试基准
作者: Fanglong Yao, Yuanchang Yue, Youzhi Liu, Xian Sun, Kun Fu 单位:中国科学院空天信息创新研究院网络信息系统技术重点实验室,中国科学院大学电子电气与通信工程学院 原文链接: AeroVerse: UAV-Agent Benchmark Suite fo…...

Python安装(新手详细版)
前言 第一次接触Python,可能是爬虫或者是信息AI开发的小朋友,都说Python 语言简单,那么多学一些总是有好处的,下面从一个完全不懂的Python 的小白来安装Python 等一系列工作的记录,并且遇到的问题也会写出,…...

Oracle DG备库数据文件损坏修复方法(ORA-01578/ORA-01110)
今天负责报表的同事反馈在DG库查询时出现如下报错 ORA-01578:ORACLE数据块损坏(文件号6,块号 2494856)ORA-01110:数据文件6: /oradata/PMSDG/o1 mf users_molczgmn_.dbfORA-26040:数据块是使用 NOLOGGING 选项加载的 可以看到报错是数据文件损坏,提示了file id和b…...
安装Linux
在Linux系统上安装MySQL数据库,可以根据服务器是否有网络连接选择不同的安装方式。以下分别介绍在线安装(通过yum)和离线安装(手动下载.tar包)的详细步骤: 一、在线安装(通过yum) 检…...

【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(四)
****非斜体正文为原文献内容(也包含笔者的补充),灰色块中是对文章细节的进一步详细解释! 四、提示范式(Explanation for Prompting Paradigm) 随着语言模型规模的扩大,基于提示(prom…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...

通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
es6+和css3新增的特性有哪些
一:ECMAScript 新特性(ES6) ES6 (2015) - 革命性更新 1,记住的方法,从一个方法里面用到了哪些技术 1,let /const块级作用域声明2,**默认参数**:函数参数可以设置默认值。3&#x…...

负载均衡器》》LVS、Nginx、HAproxy 区别
虚拟主机 先4,后7...
[特殊字符] Spring Boot底层原理深度解析与高级面试题精析
一、Spring Boot底层原理详解 Spring Boot的核心设计哲学是约定优于配置和自动装配,通过简化传统Spring应用的初始化和配置流程,显著提升开发效率。其底层原理可拆解为以下核心机制: 自动装配(Auto-Configuration) 核…...
十二、【ESP32全栈开发指南: IDF开发环境下cJSON使用】
一、JSON简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有以下核心特性: 完全独立于编程语言的文本格式易于人阅读和编写易于机器解析和生成基于ECMAScript标准子集 1.1 JSON语法规则 {"name"…...
【Java基础】向上转型(Upcasting)和向下转型(Downcasting)
在面向对象编程中,转型(Casting) 是指改变对象的引用类型,主要涉及 继承关系 和 多态。 向上转型(Upcasting) ⬆️ 定义 将 子类对象 赋值给 父类引用(自动完成,无需强制转换&…...