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…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...
GraphRAG优化新思路-开源的ROGRAG框架
目前的如微软开源的GraphRAG的工作流程都较为复杂,难以孤立地评估各个组件的贡献,传统的检索方法在处理复杂推理任务时可能不够有效,特别是在需要理解实体间关系或多跳知识的情况下。先说结论,看完后感觉这个框架性能上不会比Grap…...
