Docker核心原理与实操

第一章、Docker基本概念
1、概念:Docker是一种容器技术,可以解决软件跨环境迁移问题。

2、实现原理:是一个分层复用的文件系统;每一层都是一个独立的软件; 在最底层复用Linux系统的bootfs;
3、组成(7部分):
-
仓库:用于存放镜像
-
本地守护进程:这个就是软件运行的进程
-
客户端:命令行中的docker 命令
-
镜像:就是一个制作好的操作系统文件,类似安装操作系统的iso --静态的
-
容器:就是镜像运行起来的运行态系统 ;可被创建启动停止 --动态的
-
docker-compose:用于批量管理容器的工具
-
dockerfile:使用脚本来制作镜像的工具
镜像和容器就像是面向对象编程中的 类和实例。
4、Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器
5、Docker架构

第二章、Docker常用命令
1、Docker守护进程/服务的操作命令【6个】
- systemctl start docker
- systemctl stop docker
- systemctl restart docker
- systemctl status docker
- systemctl enable docker //开机自启动
- systemctl disenable docker

2、Docker 镜像的操作命令【7个】
远程镜像
-
docker search 镜像关键字 搜索远程仓库中的镜像
- 也可以通过hub.docker.com/网站进行搜索
-
docker pull 镜像名称:镜像版本 下载镜像到本地
-
docker push 把本地的镜像上传到远程仓库
本地镜像
-
删: docker rmi 镜像名称:镜像版本
- docker rmi 主键
- 有容器则不能删除对应的镜像
-
查: docker images 查询本地有啥镜像
- docker images -q 指查询镜像的主键
-
导入:docker load -i 压缩文件名称
-
导出: docker sava -o 压缩文件名称 镜像名称:版本
3、Docker容器的操作命令【10个】
-
查看容器 docker ps 查看当前有那些运行的容器
- docker ps -a 查看当前本机有那些容器(运行和停止的容器)
-
创建容器 docker run 参数 镜像名称:版本 启动后执行的命令
-
交互式:创建后立即进入容器,如果推出容器,则容器自动关闭(exit)
- docker run -it 镜像名称:版本 /bin/bash 权限问题要加参数
-
docker run -it --privileged=true -u=root --name=mysqlTest -v /root/data:/root/data_container mysql:5.7 /bin/bash
-
-
守护式:创建容器后,不自动进入,容器在后台运行
- docker run -id 镜像名称:版本 /bin/bash
-
-
进入容器:docker exec -it 【容器的名称、容器的ID】 /bin/bash
-
删除容器:docker rm 【容器的名称、容器的ID】
- 运行中的容器不能删除
-
启动容器:docker start 【容器的名称、容器的ID】
-
停止容器:docker stop 【容器的名称、容器的ID】
-
重启容器:docker restart 【容器的名称、容器的ID】
-
查看容器详情:docker inspect 【容器的名称、容器的ID】
-
把容器提交成镜像:docker commit 【容器的名称、容器的ID】 镜像名称:版本
-
查看容器日志:docker logs -f 容器名称
容器是个动态的 stop后依然占用着资源 restart后依然可以重启;但是删除后就彻底没有了!
第三章、Docker容器的数据卷
1、数据卷概念
为了实现容器与外部交互,但又不可以直接,所以在宿主机单独搞一个数据卷,也就是一个目录,让容器内也搞一个目录,将容器内的目录挂载到宿主机的目录(数据卷),并且同步共享数据。从而实现容器内数据持久化,容器与其他容器交互,与外部机器交互。
数据卷本质:宿主机的目录/文件
容器三大作用:数据持久化:容器与外部机器通信;容器之间数据交互

2、数据卷配置
创建启动容器时,直接使用 -v 参数配置数据卷
docker run... -v 宿主机目录(文件):容器目录(文件)
注意:目录必须为绝对路径;若目录不存在则自动创建;可挂载多个数据卷,添加多个-v

将容器目录挂载到宿主机目录,实现数据同步共享,当删除容器后 宿主机的目录及数据依然还在!容器的都没了。当其他容器挂载到此目录 就可以获取宿主机该目录下的数据 也就是实现宿主机与容器的交互。
俩容器交互 也就是将俩容器都挂载到同一宿主机的同一目录。
一个容器在数据卷内的任何操作的数据 另外一个容器在数据卷挂载的目录都可以获取。
3、数据卷容器

数据卷容器扮演一个中介的角色,只是为了在将容器目录挂载到数据卷上 书写简单些!!!
在查看各个容器mounts时,本质上:挂载到的仍然是宿主机的目录!!!
- 配置数据卷容器c3
使用参数 -v /自定的本地目录名
docker run -it --privileged=true -u=root --name=c3 -v /volume mysql:5.7 /bin/bash
数据卷容器 自动 挂载到宿主机某个目录下 !想知道使用docker inspect c3在mounts下可看见
- 创建容器c1挂载到数据卷容器c3
使用参数 --volumes-from 数据卷容器名
docker run -it --privileged=true -u=root --name=c1 --volumes-from c3 mysql:5.7 /bin/bash
- 创建容器c1挂载到数据卷容器c3
docker run -it --privileged=true -u=root --name=c2 --volumes-from c3 mysql:5.7 /bin/bash
第四章、应用部署
1、部署MySQL


上述可能报错,正确使用以下绝对路径:
docker run -id \
> -p 3307:3306 \
> --name=c_mysql \
> -v /root/mysql/conf:/root/mysql/etc/mysql/conf.d \
> -v /root/mysql/logs:/root/mysql/logs \
> -v /root/mysql/data:/root/mysql/var/lib/mysql \
> -e MYSQL_ROOT_PASSWORD=123456 \
> mysql:5.7
docker exec -it c_mysql /bin/bash进入容器 就是打开MySQL了!!!!
直接登录: mysql -uroot -p123456
就是亲切地 >mysql 操作界面了
Navicat连接数据库 可能会面临很多问题:防火墙、权限、端口开放、、、
2、部署redis
1、创建容器
docker run -it --privileged=true -u=root --name=redis -p 6379:6379 \
-v /home/redis/data:/data \
-v /home/redis/conf/redis.conf:/etc/redis/redis.conf \
redis:latest /bin/bash
2、启动容器
docker exec -it redis /bin/bash
3、打开服务端
root@d34513b96283:/data# redis-server
4、进入客户端
root@d34513b96283:/data# redis-server
远程连接 还要设置redis.conf ;打开6379端口 防火墙
# 允许任何主机连接、访问
bind 127.0.0.1 改为 bind 0.0.0.0
# 关闭保护模式
protected-mode yes 改为 protected-mode no
# 允许启动后在后台运行,即关闭命令行窗口后仍能运行
daemonize no 改为 daemonize yes
注意配置文件 redis.conf 使用了挂载 -v后面就是宿主机目录 直接操作就行了 可能是空的 该咋设置就咋设置
配置文件修改后要重启docker!
第五章、dockerfile

不常用,了解即可

dockerfile本质-----是用脚本来制作镜像的工具。
-
常用命令(8条):
- FROM,指定当前镜像的上一个镜像名称和版本
- COPY,拷贝宿主机上的文件到镜像中,不解压
- RUN 在镜像中执行一条linux命令,mkdir /home/123
- ADD,拷贝宿主机上的文件到镜像中,并且解压缩
- ENTRYPOINT,镜像运行启动后,执行的命令,不可覆盖
- CMD,镜像运行启动后,执行的命令,可覆盖
- ENV,设置环境变量
- EXPOSE,镜像运行成容器后,自动暴露的端口
例如部署springboot项目 将jar包制作成镜像 直接运行


[root@localhost ~]# mkdir docker-files
[root@localhost ~]# cd docker-files
[root@localhost docker-files]# ll
总用量 0
[root@localhost docker-files]# vim centos_dockerfile
//编辑完文件[root@localhost docker-files]# docker build -f ./centos_dockerfile -t mycentos:1 .
最终build镜像文件时 -f 指定文件路径 -t指定最终构造的镜像文件名称及版本
好奇 并不是按照/usr 启动而且也并不能使用vim?
重新build镜像 又好了 哈!

第五章、docker服务编排
Docker Compose--多容器管理工具

相关文章:
Docker核心原理与实操
第一章、Docker基本概念 1、概念:Docker是一种容器技术,可以解决软件跨环境迁移问题。 2、实现原理:是一个分层复用的文件系统;每一层都是一个独立的软件; …...
虚幻引擎 UE5 增强输入系统
用人话讲!虚幻引擎 UE5 增强输入系统(蓝图篇)_酥妃大魔王i的博客-CSDN博客 UE5 -- EnhancedInput(增强输入系统) - 知乎 (zhihu.com) 简单认识 虚幻引擎中的增强输入 | 虚幻引擎5.1文档 (unrealengine.com) 文档有较详细介绍 标记一下方便…...
Mac 安装软件各种报错解决方案
Mac 安装软件各种报错解决方案 文章目录 Mac 安装软件各种报错解决方案一. 打开允许“允许任何来源”二. 无法打开"xxx",因为它不是从App Store下载三. 无法打开"xxx",因为 Apple无法检查其是否包含恶意软件。四. "xxx"已…...
leetcode做题笔记142. 环形链表 II
给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整…...
DuDuTalk:4G语音工牌,如何实现家庭上门维修服务过程的智能化管理?
随着上门按摩、上门养老、上门买菜、上门维修等互联网上门服务的兴起,越来越多的居民开始采用线上下单,享受企业安排人员上门到家的服务。而家庭维修作为到家服务里面典型的一个场景,已成为许多人不可或缺的一部分。然而,与此同时…...
Mybatis常见面试题总结
梳理面试过程中Mybatis相关的常见问题。为保证知识点覆盖,参考了《Mybatis从入门到精通》、《深入浅出Mybatis技术原理与实战》、《Mybatis技术内幕》等书籍。 Mybatis 简介 Mybatis 是一款优秀的持久层框架(ORM框架),它支持自定义SQL、存储过程以及高…...
数字IC设计之时序分析基础概念汇总
1 时钟Clock 理想的时钟模型是一个占空比为50%且周期固定的方波。时钟是FPGA中同步电路逻辑运行的一个基准。理想的时钟信号如下图: 2 时钟抖动Clock Jitter 理想的时钟信号是完美的方波,但是实际的方波是存在一些时钟抖动的。那么什么是时钟抖动呢?时钟抖动&#…...
1.centos7安装docker
本文目录: 1.docker 安装1.安装步骤2.安装是否成功校验3.docker加速配置4.hello world来袭,验证安装是否ok 2.卸载docker3.卸载较旧版本docker 使用docker必备的三个官方网站: docker官网:https://www.docker.com docker官方仓库&…...
基于elasticsearch-8.8.2 kibana-8.8.2 搭建一个文搜图系统demo
数据来源是由 图片url,图片descript,图片keywords 外加一个id 基于此首先创建 索引, keywords是一组由单词或词组 组成的一组数据,所以以数组形式压入数据: descript 是由两条语句组合成的数据(针对图片的两种不同描述) # 这里创建的keywords 数组元素类型为text,即可以模糊匹…...
第26节-PhotoShop基础课程-形状工具组-画板
文章目录 前言1.基础图形1.正方形(shift/alt/两者加起来)2.描边3.合并形状 将多个图放在一个图层4.对齐只能在不同图层5.修改6.重叠,相交 2.多边形1.边数2.星形 3.直线工具1.正常2.箭头 4.自定义形状 前言 类似画图板,矢量图形。…...
第一次课,通过进程信息和服务信息识别当前计算机运行程序(预习版)
题目: 检测的目标进程: ydebugg ; “ImmunityDebugger.exe” _500], rax Exe ; “ollydbg.exe” _4F8], rax hackerE ; “ProcessHacker.exe” _4F0], rax Exe ; “tcpview.exe” _4E8], rax sExe ; “autoruns.exe” _4E0], rax scExe ; “autorunsc.ex…...
ChatGPT 或其它 AI,能用在文书创作上吗?
新的申请季已经正式开始,一些热门项目的ED截止日期也不再遥远,因此很多准留学生们都已经开始了关于文书的创作。 而随着科技的不断发展,以ChatGPT为首的一众AI工具也作为一种辅助手段愈发融入了我们的生活。 那么不免就会有一些同学在准备申…...
Java中锁的分类
Java中锁的分类 这篇文章介绍各种锁的分类。介绍的内容如下: 公平锁/非公平锁可重入锁独享锁/共享锁互斥锁/读写锁乐观锁/悲观锁分段锁偏向锁/轻量级锁/重量级锁自旋锁 上面是很多锁的名词,这些分类并不是全是指锁的状态,有的指锁的特性&am…...
centos安装flink,通过windows访问webui
1. 安装flink 1.1. flink的下载 通过flink官网下载flink安装包 https://flink.apache.org/ 下载安装包 1.2 flink在centos上的安装 将下载好的flink-1.17.1-bin-scala_2.12.tgz安装包放到centos目录下 解压文件: [rootlocalhost ~]# tar -zxvf flink-1.17.…...
如何让两台手机相互远程控制?
你的两台手机是什么系统的?如果你的两台手机都是安卓系统,而且都是安卓7.0及以上版本的系统,那么恭喜你,这两台手机可以相互远程控制! 你可以利用两个软件实现将两台手机相互远程控制的想法。为了避免混淆,…...
预编译为什么能防止SQL注入?一看你就明白了。预编译原理详解
「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 预编译防止SQL注入 1、SQL执行过程2、预编译原理3、…...
【7z密码】7z压缩包密码忘记了,怎么办?i
7z压缩包设置了密码,解压的时候就需要输入正确对密码才能顺利解压出文件,正常当我们解压文件或者删除密码的时候,虽然方法多,但是都需要输入正确的密码才能完成。忘记密码就无法进行操作。 那么,忘记了7z压缩包的密码…...
部署云MYSQL(在线版)
在Methodot - 您的一站式云原生在线开发协作平台网站上可以部署免费的MYSQL,在应用商店里能看到可以搭建多种数据库:(前提是要注册登录,免费版只能是2人共享) 登陆好后,点击工作台,选择应用商店…...
Gin 框架 解决 跨域问题
Gin 框架解决跨域问题 一点废话 在学习 Axios 的时候发现 up 使用了一个网址来提供 json 数据。因为不想加什么公众号搞啥百度网盘的,然后又刚好会一点点 go,就想着自己用 gin 框架返回一个 json 到前端页面然后从这个页面获取 json 。 这是我的go代码…...
【Datawhale课程笔记-简单学点大模型】大模型的能力
大模型的能力 参考GITHUB:https://github.com/datawhalechina/so-large-lm/blob/main/第二章:大模型的能力.md 深入探讨GPT-3——这个具有代表性的大型语言模型的能力。我们的研究主要基于GPT-3论文中的基准测试,这些测试包括: …...
Hotkey Detective:3分钟找出Windows热键冲突元凶,重获键盘控制权
Hotkey Detective:3分钟找出Windows热键冲突元凶,重获键盘控制权 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-de…...
B2B制造业如何利用GEO优化获得精准询盘:实战指南
B2B制造业如何利用GEO优化获得精准询盘:实战指南 摘要 :随着AI搜索渗透率超过85%,B2B制造业的获客逻辑正在被重塑。本文详细介绍GEO(Generative Engine Optimization)优化技术如何帮助工业品、机械配件企业获得精准询盘…...
Git Bisect 实战:用二分法快速找到引入 Bug 的提交
前言 项目跑了一段时间以后,最麻烦的 Bug 往往不是一眼能看出来的语法错误,而是那种“之前明明是好的,现在突然坏了”的回归问题。 比如某个接口在上个月还能正常返回数据,最近发版后开始报错;某个页面之前可以打开&am…...
论文写得像流水账?资深教授推荐这几个AI写作辅助软件
论文写得像流水账?选题难、逻辑乱、语言差,是很多学生共同的困扰。其实,只要用对AI写作辅助工具,再配合科学的写作流程,就能大幅提升效率和质量。资深教授普遍推荐:千笔AI(中文全流程首选&#…...
Blender-Armatures
导航 (返回顶部) 1. Blender-Armatures 1.1 骨架位置1.2 分类1.3 骨骼结构 2. 编辑 2.1 骨骼扭转2.2 拆分 split2.3 分离骨骼 separate2.4 切换方向 3. 镜像编辑 3.1 镜像挤出3.2 命名惯例3.3 对称 4. 属性 4.1 属性结构表4.2 柔性骨骼 Bendy Bones4.3 姿态4.4 关系 5. 骨骼约束…...
用STM32F103C8T6驱动Ra-01SC模组实现点对点通信(附完整代码与接线图)
STM32与Ra-01SC模组实战:从零搭建LoRa点对点通信系统 在物联网和远程监测领域,LoRa技术以其低功耗、远距离的特性成为无线通信的热门选择。Ra-01SC模组作为一款高性价比的LoRa模块,配合STM32F103C8T6这款经典MCU,能够快速构建稳定…...
港澳通行证照片怎么手机拍?2026 手机拍摄规格要求和实用方法全解
准备办理港澳通行证却被照片规格搞得不知所措?其实用手机就能拍出符合要求的证件照,关键是掌握正确的拍摄方法和规格标准。这篇文章将详细讲解港澳通行证照片的手机拍摄方法,包括规格要求、拍摄步骤,以及如何后期处理让照片完美达…...
从Quill光标到用户头像:手把手教你为Yjs协同编辑器添加完整的在线用户列表(附状态同步技巧)
从Quill光标到用户头像:构建企业级协同编辑器的完整用户感知系统 在数字化办公场景中,协同编辑器的用户体验往往决定了团队协作效率的上限。当多个用户同时编辑同一份文档时,简单的光标显示已无法满足现代团队对协作透明度的需求。本文将深入…...
超越跑分:深入CoreMark源码,看它如何“拷问”RISC-V CPU的三大核心能力
超越跑分:深入CoreMark源码,看它如何“拷问”RISC-V CPU的三大核心能力 在嵌入式处理器性能评估领域,CoreMark早已成为行业标准测试工具。但大多数开发者仅关注最终得分,却鲜少探究这个不足3000行代码的基准测试程序如何精准"…...
别再只会用RC了!手把手教你用运放搭建一个75Hz低通滤波器(附Multisim仿真文件)
从RC到运放:实战75Hz低通滤波器设计与Multisim验证 在电子信号处理领域,滤波器设计是每个工程师必须掌握的硬核技能。当你需要从嘈杂的传感器信号中提取有效信息,或者在音频系统中消除恼人的高频噪声时,一个性能优异的低通滤波器往…...
