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论文中的基准测试,这些测试包括: …...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
