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论文中的基准测试,这些测试包括: …...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...
【Java多线程从青铜到王者】单例设计模式(八)
wait和sleep的区别 我们的wait也是提供了一个还有超时时间的版本,sleep也是可以指定时间的,也就是说时间一到就会解除阻塞,继续执行 wait和sleep都能被提前唤醒(虽然时间还没有到也可以提前唤醒),wait能被notify提前唤醒…...
【Qt】控件 QWidget
控件 QWidget 一. 控件概述二. QWidget 的核心属性可用状态:enabled几何:geometrywindows frame 窗口框架的影响 窗口标题:windowTitle窗口图标:windowIconqrc 机制 窗口不透明度:windowOpacity光标:cursor…...
