【Docker】Docker快速入门

Docker学习笔记

一、Docker概述

为什么会出现Docker?

安卓开发流程:apk(java开发的)发布到应用商店,用户安装apk即可使用。

后端开发流程: jar(java开发的)带上环境发布到Docker仓库,用户从Docker仓库拉取镜像并部署。

总结:Docker解决了环境部署的问题。

总结:Docker通过隔离机制,可以将服务器利用到极致!

Docker和虚拟机的区别是什么?

在这里插入图片描述

一、虚拟机
1.传统的虚拟机是通过在物理机上安装虚拟化软件VMware来创建和管理虚拟机。每个虚拟机都运行着一个完整的操作系统,需要分配一定的CPU、内存和磁盘空间,因此需要占用较多的系统资源。
2.因为每个虚拟机都需要启动独立的操作系统,所以虚拟机的创建、启动和关闭操作比较耗时,需要几分钟甚至更长时间才能完成。
3.隔离性较好。
二、Docker
1.Docker采用了轻量级的虚拟化技术-容器,相比于虚拟机,容器共享宿主机的操作系统和硬件资源。
2.因为每个容器只包含应用程序所需文件和库,而不需要启动独立的操作系统,所以容器的创建和启动速度非常快,需要几秒钟的时间。
3.由于容器共享宿主机的操作系统,容器之间可以相互访问和影响,隔离性相对较弱。

注意: Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的是物理机的硬件资源。

Docker架构图(Docker的基本组成)

在这里插入图片描述

Docker使用客户端-服务器(C/S)架构模式。
Docker客户端只需要向Docker服务器或者Docker守护进程发出请求(Socket请求),Docker服务器或者Docker守护进程将完成所有工作并返回结果。

二、Docker常用命令

在这里插入图片描述

1.镜像命令

docker images #查看镜像
# docker images -a  #列出所有镜像详细信息
# docker images -aq #列出所有镜像的id
docker search mysql #搜索镜像
docker pull mysql #下载镜像
# docker pull mysql等价于docker pull docker.io/library/mysql:latest
docker rmi 2c9028880e58 #删除镜像

2.容器命令

docker run -it 镜像id /bin/bash #新建容器并启动(-it表示使用交互方式运行,进入容器查看内容)
docker ps #列出当前正在运行的容器
docker rm 容器id #删除指定容器
docker start 容器id	#启动容器
docker restart 容器id	#重启容器
docker stop 容器id	#停止当前正在运行的容器
docker kill 容器id	#强制停止当前容器
docker top 容器id  #查看容器内的进程信息
docker inspect 容器id  #查看容器的元数据(重要!!!)
docker exec -it 容器id bin/bash  #进入当前正在运行的容器(重要!!!)
docker cp 容器id:容器内路径 主机目的路径  #从容器内拷贝数据到主机

3.容器命令练习

# -d 后台运行 --name 给容器命名 -p 宿主机端口:容器内部端口
docker run -d --name nginx01 -p 3344:80 nginx  #安装Nginx
curl localhost:3344  #测试Nginx

三、Docker镜像加载原理

1.如何得到一个镜像?

从仓库中拉取镜像: docker pull
从本地文件中载入镜像: docker load
由容器生成新的镜像: docker commit
自己构建新的镜像: docker build

2.Docker镜像加载的原理是什么?

2.1 联合文件系统UnionFs

联合文件系统UnionFs是一种分层、轻量级且高性能的文件系统,支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。

联合文件系统UnionFs是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

2.2 Docker镜像加载的原理是什么?

Docker的镜像实际上由一层一层的文件系统组成。

Linux操作系统由内核空间和用户空间组成。
Linux刚启动时会加载内核空间的bootfs文件系统,主要包含bootloader和kernel,其中bootloader主要是引导加载kernel。
在bootfs文件系统之上是用户空间的rootfs文件系统,包含常用的/dev,/bin等目录。

对于一个镜像,rootfs可以很小,只需要包含最基本的命令、工具和程序库就可以了,底层直接用宿主机的内核。

2.3 为什么Docker镜像要采用这种分层的结构呢?

资源共享。比如有多个镜像都从相同的Base镜像构建而来,那么宿主机只需在磁盘上保留一份base镜像,同时内存中也只需要加载一份base镜像,这样就可以为所有的容器服务了,而且镜像的每一层都可以被共享。

四、容器数据卷

1.什么是容器数据卷?

卷技术说白了就是目录的挂载,将容器内的目录挂载(映射)到宿主机上。

容器数据卷可以实现容器内数据的持久化和同步。

2.如何使用数据卷?

docker run -it -v 主机目录:容器内目录  -p 主机端口:容器内端口 /bin/bash  #进行挂载
docker inspect 容器id  #查看是否挂载成功

3.数据卷作业练习

docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7  # 配置文件的挂载和数据文件的挂载

4.数据卷容器实现多个MYSQL同步数据

docker run -it --name mysql1 b1y0nd/centos 
docker run -it --name mysql2 --volumes-from mysql1 b1y0nd/centos
docker run -it --name mysql3 --volumes-from mysql1 b1y0nd/centos
# 此时,在mysql1的volume01中创建文件,在mysql2的volume01中可以查看到已经成功同步数据。

5.如何利用Dockerfile构建Docker镜像?

Dockerfile就是用来构建Docker镜像的构建文件。

通过这个脚本可以生成镜像,脚本是一个个的命令,每个命令都是一层,所以镜像是一层一层的。

FROM centos	#基础镜像
VOLUME ["volume01","volume02"] #匿名挂载
CMD echo "-----end-----"
CMD /bin/bash
# 注意
# 1.每个指令都必须是大写字母。
# 2.执行从上到下
# 3.#表示注解
# 4.每一个指令都会创建一个新的镜像层,并提交。比如第一层rootfs基础镜像(centos),第二层镜像(jdk),第三层镜像(tomcat)。
docker build -f dockerfile -t b1y0nd/centos . #构建镜像

6.Dockerfile实战练习:创建Tomcat镜像

1.准备Tomcat和JDK的压缩包
image-20210628161618604
2.编写Dockerfile文件

# 基础镜像centos
FROM centos
# 作者信息编写
MAINTAINER b1y0nd<2543031567@qq.com>
# 复制当前目录下readme.txt文件,到容器/usr/local中
COPY readme.txt /usr/local/readme.txt 	
# 添加JDK,ADD 命令会自动解压到/usr/local目录 	
ADD jdk-8u291-linux-x64.tar.gz /usr/local/ 
# 添加Tomcat,ADD 命令会自动解压到/usr/local目录 	
ADD apache-tomcat-9.0.46.tar.gz /usr/local/ 
# 安装vim命令
RUN yum -y install vim	
# 设置MYPATH
ENV MYPATH /usr/local 
# 工作目录
WORKDIR $MYPATH
# 配置环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_291 
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.46
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.46
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin 	
# 设置暴露的端口
EXPOSE 8080 										
# 设置默认命令,这里设置了启动指定目录下的startup.sh程序以及日志
CMD /usr/local/apache-tomcat-9.0.46/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.46/logs/catalina.out 					

3.构建镜像

docker build -t b1y0nd:tomcat .

五、Docker网络

1.Docker0是什么?

当我们在Linux宿主机中安装了Docker服务器:

  • 宿主机中就会配置Docker0网卡,Docker0使用的是桥接模式,使用的技术是Veth-pair技术。
  • 每启动一个Docker容器,Docker服务器就会给Docker容器分配一个ip,一对虚拟网卡。
  • 宿主机就是个路由器的角色。

在这里插入图片描述

当我们进行测试时发现:

  • 宿主机可以直接ping通容器,容器也可以直接ping通宿主机。
  • 容器Tomcat1也可以直接ping通容器Tomcat2,容器Tomcat2也可以直接ping通容器Tomcat1。

注意: Docker中所有的网络接口都是虚拟的,因为虚拟网卡转发效率高,传输文件快。只要容器删除,分配给它的一对虚拟网卡自动消失。

2.Docker的网络模式有哪些?

bridge: 桥接(默认)
none: 不配置网络
host: 和宿主机共享网络
container: 容器网络连通

3.容器互联的方式有哪些?

容器互联解决的问题: 修复了不能通过容器名ping通容器的问题。

方式一: Link方式

docker run -d --name tomcat1 b1y0nd/tomcat
# tomcat2可以ping通tomcat1,但是tomcat1不能ping通tomcat2。根本原因是tomcat2的hosts文件中写入了172.17.0.2 tomcat1 b71a0a6566a3
docker run -d --name tomcat2 --link tomcat1 b1y0nd/tomcat

方式二: 自定义网络

# 以前使用的都是默认网络Docker0。docker run -d --name tomcat1 b1y0nd/tomcat等价于docker run -d --name tomcat1 --net bridge b1y0nd/tomcat
# 现在创建一个自定义网络,名字是mynet。
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
# 创建两个Tomcat使用自定义网络。
docker run -d --name tomcat1 --net mynet b1y0nd/tomcat
docker run -d --name tomcat2 --net mynet b1y0nd/tomcat
# 测试发现,tomcat1可以ping通tomcat2,tomcat2也可以ping通tomcat1。
docker exec -it tomcat1 ping tomcat2
docker exec -it tomcat2 ping tomcat1

自定义网络的应用: 不同的集群(比如Redis集群和Mysql集群)使用不同的网络,可以保证集群式安全和健康的。

4.不同的自定义网络如何连通?

问题: Docker0网络和mynet网络网段不同,容器如何连通?
或者说
问题: Docker0网络的tomcat1想访问mynet网络的tomcat3,应该怎么实现?
解决: tomcat1先联络上mynet,再通过mynet联络上tomcat3。

# 打通tomcat1和mynet
docker network connect mynet tomcat1
# 查看网络配置,发现: 打通tomcat1和mynet,本质上是把tomcat1加入mynet网络。(tomcat1:一个容器拥有两个IP地址)
docker network inspect mynet
# 测试连通(tomcat1不仅可以通信tomcat3,也可以和mynet网络中任何一个容器通信)
docker exec -it tomcat1 ping tomcat3

Linux学习笔记

一、文件和目录管理命令

find - 按照名称查找文件或目录

# 查找/home下以.txt结尾的文件
find /home -name "*.txt"

ln - 创建硬链接或者软链接

# 创建f1的一个硬链接文件f2。 
# 硬链接: A是B的硬链接,A和B都是文件名,则A和B的目录项中的inode节点号相同,即两个文件名指向同一个文件。
ln f1 f2
# 创建f1的一个符号链接文件f2。 
# 软链接:A是B的软链接,A和B都是文件名,则A和B的目录项中的inode节点号不同,A的数据存放的是B的路径,相当于快捷方式。
ln -s f1 f3

二、文件内容操作命令

grep - 在文件中搜索文本

# 搜索file1.txt中匹配pattern的内容
grep pattern file1.txt
# 搜索command输出中匹配pattern的内容
command | grep pattern

wc - 统计文件的行数、字数和字节数

# 统计file1.txt的行数
wc -l file1.txt

三、文件权限管理命令

Linux文件权限包括三个部分:文件的所有者、文件所属的组以及其他用户。每个部分都有三种权限:

权限通常表示为一个十位的字符串,如 -rwxr-xr--,其中:

  • 第一位表示文件类型(例如,- 表示普通文件,d 表示目录)。
  • 接下来的九位分为三组,每组三位,分别表示所有者、组、其他用户的权限。

查看文件权限通常使用 ls 命令:

ls -l

输出示例:

-rw-r--r-- 1 user group 4096 May 19 12:34 file.txt

chmod - 修改文件或目录的权限

chmod u+x file.txt     # 为文件所有者添加执行权限
chmod g-w file.txt     # 移除组的写权限
chmod o=r file.txt     # 设置其他用户只读权限
chmod a+r file.txt     # 为所有用户添加读权限

八进制模式

  • mode 是一个三位的八进制数,每位代表不同的权限:
    • 读(r):4
    • 写(w):2
    • 执行(x):1
# 设置文件权限为 -rwxr-xr-x
chmod 755 file.txt
# 设置文件权限为 -rw-r--r--
chmod 644 file.txt

四、进程管理命令

ps:显示当前运行的进程

# 显示所有进程的详细信息
ps -ef
# 显示所有进程的详细信息
ps -aux

top:实时显示系统资源使用情况

五、压缩和归档命令

六、用户管理命令

who:显示当前登录的用户

useradd:添加新用户

七、网络管理命令

ifconfig:显示或配置网络接口

# 显示所有网络接口的信息
ifconfig 
# 启动网络接口eth0
ifconfig eth0 up 
# 配置网络接口eth0的IP地址、子网掩码和广播地址
ifconfig eth0 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255

traceroute:显示数据包到目标主机的路径

# 跟踪到目标主机的路由
traceroute www.example.com 

netstat:显示进程的网络连接

# 显示所有连接和监听端口并显示每个连接相关的进程ID
netstat -ano

八、磁盘管理命令

df:显示文件系统的磁盘空间使用情况

# 以人类可读的格式显示所有挂载的文件系统的磁盘使用情况
df -h

fdisk:磁盘分区管理

# 显示所有磁盘及其分区信息
fdisk -l 

mount:挂载文件系统

# 将设备/dev/sda1挂载到/mnt目录
mount /dev/sda1 /mnt 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/431406.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenAI o1团队突破性论文:『过程推理』中数学推理能力大幅提升,从正确中学习的新方法

原创 超 近年来&#xff0c;大型语言模型(LLMs)在复杂的多步推理任务中取得了令人瞩目的进展。这些模型能够生成逐步的思维链&#xff0c;解决从小学数学到高等微积分的各种问题。然而&#xff0c;即使是最先进的模型也常常陷入逻辑陷阱&#xff0c;产生看似合理但实际错误的推…

统信服务器操作系统【刻录镜像制作U盘启动盘的工具】

统信服务器操作系统各版本上刻录镜像制作U盘启动盘的工具方案 文章目录 应用场景一、问题现象二、问题分析解决方案应用场景 硬件/整机信息:全平台 CPU架构:全架构 OS版本信息:服务器a版,e版,d版(其中d版遇到的刻录类问题较少) 软件信息:dd工具、Fedora Media Writer工…

【Linux实践】实验三:LINUX系统的文件操作命令

【Linux实践】实验三&#xff1a;LINUX系统的文件操作命令 实验目的实验内容实验步骤及结果1. 切换和查看目录2. 显示目录下的文件3. 创建和删除目录① mkdir② rm③ rmdir 4. 输出和重定向① 输出② 重定向 > 和 >> 5. 查看文件内容① cat② head 6. 权限7. 复制8. 排…

Gnu Radio抓取WiFi信号,流程图中模块功能

模块流程如图所示&#xff1a; GNURadio中抓取WiFi信号的流程图中各个模块的功能&#xff1a; UHD: USRP Source&#xff1a; 使用此模块配置USRP硬件进行信号采集。设置频率、增益、采样率等参数。Complex to Mag^2&#xff1a; 将复数IQ数据转换为幅度的平方。Delay&#xf…

【计网】从零开始掌握序列化 --- 实现网络计算器项目

​​​请各位保持头脑清醒&#xff0c; ​​​读些好书&#xff0c;做点有用的事&#xff0c; ​​​快快乐乐地生活。 ​​​ --- 斯蒂芬金 《肖申克的救赎》--- 从零开始掌握序列化 1 知识回顾2 服务器框架3 客户端框架4 运行测试 1 知识回顾 前面两篇文章学习中基础知识…

微服务学习笔记之Docker

目录 认识Docker 安装Docker 安装yum工具 配置Docker的yum源 更新yum&#xff0c;建立缓存 安装Docker 启动并校验 配置镜像加速 Docker常见命令 命令 演示 给命令起别名 Docker数据卷 认识数据卷 数据卷常见命令 nginx的html目录挂载演示 数据卷挂载本地目录或…

Redis: 特点,优势,与其他产品的区别以及高并发原理

入门Redis概述 1 &#xff09;选择Redis是因为其高性能 因为 Redis 它数据存储的机制是存在内存中的&#xff0c;减少了传统关系数据库的磁盘IO它是单线程的保证了原子性&#xff0c;它还提供了事务&#xff0c;锁等相关的机制 2 &#xff09;Redis 环境安装配置 linux 或 d…

企业网盘能作为FTP替代产品吗?

在数字化办公日益普及的今天&#xff0c;企业对于文件存储、传输和协作的需求不断增长。传统的FTP协议虽然在文件传输领域有着不可替代的地位&#xff0c;但其在用户体验、安全性、协作功能等方面逐渐显得力不从心。企业网盘作为一种新兴的数据管理解决方案&#xff0c;正逐渐成…

LeetCode234. 回文链表(2024秋季每日一题 26)

给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;hea…

建立分支提交代码

git分支 git branch 产看当前分支 git branch -a 查看所有分支 git checkout 分支名 切换分支 git checkout -b 分支名 建立分支&#xff08;仅仅是在本地建立了&#xff0c;并没有关联线上&#xff09; git push --set-upstream origin 分支名 把本地分支推到先线上 gti add …

【计算机视觉】YoloV8-训练与测试教程

✨ Blog’s 主页: 白乐天_ξ( ✿&#xff1e;◡❛) &#x1f308; 个人Motto&#xff1a;他强任他强&#xff0c;清风拂山冈&#xff01; &#x1f4ab; 欢迎来到我的学习笔记&#xff01; 制作数据集 Labelme 数据集 数据集选用自己标注的&#xff0c;可参考以下&#xff1a…

Paper 0 | Visual Instruction Tuning

使用机器生成的指令跟踪数据对大型语言模型 (LLM) 进行指令调整已被证明可以提高新任务的零样本能力&#xff0c;但这个想法在多模态领域的探索较少。我们首次尝试使用纯语言 GPT-4 生成多模态语言图像指令跟踪数据。通过对此类生成的数据进行指令调整&#xff0c;我们引入了 L…

多智能体笔记本专家系统:集成CrewAI、Ollama和自定义Text-to-SQL工具

在这个项目中&#xff0c;我们的目标是创建一个由多智能体架构和本地大语言模型&#xff08;LLM&#xff09;驱动的个人笔记本电脑专家系统。该系统将使用一个SQL数据库&#xff0c;包含有关笔记本电脑的全面信息&#xff0c;包括价格、重量和规格。用户可以根据自己的特定需求…

unix中如何查询和修改进程的资源限制

一、前言 一个进程在运行时&#xff0c;会用到各种资源&#xff0c;比如cpu的使用时间、内存空间、文件等等。那么&#xff0c;一个进程能够占用多少资源呢&#xff1f;cpu使用的时间有多长&#xff1f;进程空间有多大&#xff1f;能够创建多少个文件&#xff1f;这个就是本文…

2024.9.24 数据分析

资料 111个Python数据分析实战项目&#xff0c;代码已跑通&#xff0c;数据可下载_python数据分析项目案例-CSDN博客 【数据挖掘六大项目实战】敢说这是全B站讲的最详细最通俗易懂的数据挖掘教程&#xff01;整整60集&#xff01;学不会来找我&#xff01;-数据挖掘、数据挖掘…

校园自助打印系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;店长管理&#xff0c;打印店管理&#xff0c;打印服务管理&#xff0c;服务类型管理&#xff0c;预约打印管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&…

用 Pygame 实现一个乒乓球游戏

用 Pygame 实现一个乒乓球游戏 伸手需要一瞬间&#xff0c;牵手却要很多年&#xff0c;无论你遇见谁&#xff0c;他都是你生命该出现的人&#xff0c;绝非偶然。若无相欠&#xff0c;怎会相见。 引言 在这篇文章中&#xff0c;我将带领大家使用 Pygame 库开发一个简单的乒乓球…

SPSS26统计分析笔记——3 假设检验

1 假设检验原理 假设检验的基本原理源于“小概率事件”原理&#xff0c;是一种基于概率性质的反证法。其核心思想是小概率事件在一次试验中几乎不会发生。检验的过程首先假设原假设 H 0 {H_0} H0​成立&#xff0c;然后通过统计方法分析样本数据。如果样本数据引发了“小概率事…

Krita连接comfyui报错缺少节点如何解决

介绍一下我用的版本&#xff1a; krita5.2.3 ComfyUI-aki-v1.3 首先&#xff1a;文件夹必须严格按照ComfyUI进行命名&#xff0c;我不知道这个是不是必须得&#xff0c;但是看官方的文档以及我解决这个问题的过程时&#xff0c;是这样的。 报错信息如下图(这个报错图…

航拍工程车辆识别检测数据集 yolo数据集 共650张

航拍工程车识别检测数据集 yolo数据集 共650张 2 工程车辆识别数据集&#xff08;Engineering Vehicle Recognition Dataset, EVRD&#xff09; 摘要 EVRD 是一个专门针对航拍视角下的工程车辆识别而设计的数据集&#xff0c;旨在提供一种标准的训练和评估平台&#xff0c;用…