使用记录_Linux和Docker

使用记录_Linux和Docker
踱鸽&水晶蟹介绍
为了补充项目开发后部署和运维相关能力,通过自建Linux服务器学习一些相关知识。
(因为过程中包含“白嫖”等可耻行为,所以只记录,不发布)
一、安装CentOS7
准备:闲置笔记本一台(可以使用虚拟机代替,如果使用云服务器,直接跳过前三章节)
下载镜像:https://mirrors.aliyun.com/centos/7/isos/(通过阿里云镜像站下载)
这里使用centos7,常见镜像版本:
DVD — 标准版(含桌面),约4.5个G,新手上路,我选择这个。
Minimal — mini版,(不含桌面),约1个G。
通过UltraISO写入硬盘系统镜像(据说用9.3.6版及以前的会出问题,这里我选择试用最新版,中途无问题,没做排错记录)
接下来,通过写入镜像的U盘给笔记本重做系统,(这里因为是闲置笔记本,所以是硬盘完全格式化,重做单Linux系统。如果打算双系统或者使用虚拟机,操作略有不同,这里不做过多介绍。)
过程: 通过U盘启动后,可选择Install CentOS 7,按“E”,进入编辑。
将
|
变为
|
Ctrl+X执行,然后屏幕上就会列出硬盘设备的详细信息,我们从列表中挑出当前作为介质的U盘的代码(比如sda4),然后重起系统,再次进入编辑,修改内容(注意修改成自己的U盘代码)
|
然后Ctrl+X执行,即可进入图形化安装界面。
DVD镜像,默认基本环境是最小化安装(无桌面),所以这里手动选择一些带GUI的服务器。
等待系统安装完成,创建账户,进入系统。截止到写笔记的日期,本人仍然为Linux操作新手,基本指令还需要摸索着来,所以选择了带桌面系统,并且切换为root用户进行操作。
注意,由于是笔记本安装系统做服务器,需要修改一下笔记本合盖时系统状态:
修改 /etc/system/logind.conf 取消HandleLidSwitch=suspend改行注释,并将suspend修改为lock。
至此,一个常规的Linux系统的机器算是装完了。接下来开始边学边用。
执行命令:lsblk 进行查看 硬盘情况
二、配置连接
本人目前并不能很好的掌握Linux系统的常规使用,但是在之前对一些工具有所耳闻,此篇章用于记录工具配置。
1,SSH连接工具:
FinalShell。
Xshell,Xftp。连接Linux系统的和文件传输的软件,官方提供家庭和学校的免费下载链接。
宝塔也有SSH终端,知名度不高,这里不选择使用。
SecureCRT,SecureFX。
Termius。 mac上使用这个,所以windows上也选择了这个。
(目前只是简单使用,差距并未体验到,所以可以按喜好选择)
由于家里和办公室都无法通过外网访问,所以分别在台式机,笔记本,Linux系统笔记本上安装了ZeroTier,这里就可以通过自己工作环境通过分配的虚拟IP直接连接到Linux服务器了,花生壳配置对应端口的内网映射,可以将服务器的对应内容开放外网访问,以后服务器部署项目后又用。
至此,一台自己可用的Linux服务器已经搭建完成了。
通过Xshell连接虚拟IP后,可以通过指令操作服务器了。
三、Linux
Linux的世界里,一切皆文件。
Linux目录结构:级层式树状目录结构
|
/bin 常用指令目录
/dev 设备管理
/etc 配置文件
/home 创建普通用户后,会在这里生成对应的文件
/root 系统管理员目录
/lib 动态库
/usr/local 用户安装的很多应用程序都在这个目录
/boot 启动Linux时使用的一些文件
/mnt 临时挂载的别的文件系统
/var 目录中存放着不断扩充的文件,习惯将经常修改的目录放在这里,包括各种日志文件
实操篇
vi和vim编辑器
Linux内置vi编辑器,Vim具有程序编辑能力,相当于vi的增强版。
vi和vim的三种模式:
1,正常模式:打开默认这种模式,其他模式状态按ESC返回该模式。可以使用快捷键。
2,插入/编辑模式: 按i启动,
3,命令行模式:按:启动该模式,可以使用命令来完成 读取、存盘、替换、离开 等操作。
快捷键:
拷贝当前行:yy 拷贝下面5行:5yy
粘贴:p
删除
删除当前行:dd 删除下面3行:3dd
撤销操作:u
文件中查询单词(命令行下 ):/关键字 ,回车 。 输入n 就是查找下一个
显示行号(命令行下 ):set nu 隐藏行号:set nonu
快速到达末行:G 首行:gg
移动到指定行:1,显示行号 2,输入目标行数 3,输入G或者gg
Linux常用命令
关机重启:
shutdown -h now:表示立即关机 halt
shutdown -h 1:表示1分钟后关机
shutdown -r now:立即重启 reboot
sync:把内存数据同步到硬盘,推荐关机或重启前执行一下。
用户登录和注销:
1,尽可能少用root账号登录,系统管理员权限过大,避免误操作造成损失。
推荐使用普通用户登录,可以通过“su - 用户名”来切换成系统管理员身份
2,logout 注销登录
用户管理:
1,添加一个用户:useradd <用户名>
会在/home目录下创建 用户名的文件夹,并且默认情况 会让该用户加入同名用户组
useradd -g <用户组名> <用户名>,将用户指定到目标用户组
2,指定用户的密码:passwd <用户名>
回车之后输入密码。
3,删除一个用户:userdel <用户名>
文件目录管理
pwd:查看当前目录绝对路径
ls:查看当前目录下的内容 -a 显示所有 -l 以列表方式显示
cd <目标路径>:前往目标路径。 ~ 自己的家 .. 上一级
mkdir:创建目录 -p 创建多级目录
touch:创建空文件
cp <源目录> <新目录>:拷贝文件到指定目录 -r 递归复制整个文件夹
rm:删除文件或目录 -r 递归删除 -f 强制删除不提示
mv:移动或重命名 (目录相同为重命名,目录不同为移动)
cat:查看文件 -n 显示行号 (只读,通常与more一起使用 cat -n <文件> | more)
more:分页查看文件 (空格键 翻页,Ctrl+B 上一页,Ctrl+F下一页)
less:分页查看文件,不是全部加载,而是根据显示内容加载,大文件效率高
head:显示文件开头部分内容,默认显示10行 -n 5 显示前5行(数字可变)
tail:显示文件末尾部分内容,默认显示10行 -n 5 显示最后5行 -f 实时追踪文档更新
>:输出重定向 (覆盖写入)
>>:追加写入
echo:输出内容到控制台
ln:软链接,类似于快捷方式 ln -s <源文件> <软链接名>
history:查看执行过的历史命令 history 10 查看最近的10条命令 !10 执行编号10的命令
时间日期类:
date:显示当前日期 +%Y显示当前年 +%m显示当前月 +%d显示当前日
date “+%Y-%m-%d %H:%M:%S” 按格式显示时间,连接符可以自己定
date -s “2020-02-02 02:02:02” 设置时间
cal:以日历的方式显示时间 cal 2020 显示一整年日历
搜索查找类
find:从指定目录内遍历搜索,将符合的文件显示在终端。
find <目录> -name <文件名> 在目录下 按文件名查询,可以使用通配符
find <目录> -user <用户名> 按文件所属用户进行查找
find <目录> -size <文件大小限制> 按文件大小限制查找,+n 大于,-n小于,n等于
grep:过滤查找
| :管道符号,将前一个命令的结果传递给后一个命令处理
压缩和解压
gzip <文件>:压缩文件 后缀 .gz 只压缩文件不压缩目录,不保留原文件
gzip -d <文件>: 解压文件
tar: 打包同时压缩 后缀 .tar.gz 可打包压缩文件目录,保留原文件
zip <文件>: 压缩文件或目录 后缀 .zip 与tar类似,压缩后可被windows识别
unzip <文件>: 解压文件或目录
组管理
Linux中的每个用户必须属于一个组,不能独立于组外。
在Linux中每个文件有 所有者、所在组,其他组的概念。
1,ls -ahl:查看文件或目录所有者、所在组
2,chown <用户名> <文件名> 修改文件所有者,并不改变所在组
3,groupadd <组名>:创建一个组
4,chgrp <组名> <文件名>:修改文件所在组
5,usermod -g <组名> <用户名>:改变用户所在组
6,usermod -d <目录名> <用户名>:改变用户登录的初始目录
权限管理
|
0~9位说明:
第0位:确定文件类型(d:目录,-:普通文件,l:链接文件,c:字符设备,b:块文件)
第1-3位:所有者权限(r:读权限,w:写权限,-:无权限,x:执行权限)
第4-6位:所属组权限
第7-9位:其他用户权限
.后面数字:目录下文件数
所有者
所在组
文件大小
文件最后修改时间
修改权限
chmod:修改权限 chmod u=rwx,g=rx,o=x 文件/目录名
(u:所有者,g:所在组,o:其他人,a:所有人)
(使用+、-、=变更权限)
(还可以通过数字变更权限:r=4,w=2,x=1)
任务调度
1,crond:任务调度 -e:编辑,-l:显示,-r:删除
磁盘分区
分区的基础概念
1,mbr分区(最多四个主分区,最大支持2TB)
2,gpt分区(支持无限多分区,但是可能被操作系统限制,最大支持18EB)
Linux分区介绍
无论多少个分区,都挂载在根目录。分区只是组成整个文件系统的一部分。
Linux硬盘分为IDE硬盘和SCSI硬盘,目前基本都是SCSI硬盘。
SCSI硬盘的标识符为“sdx”,sd 表示分区所在设备类型,x表示盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘)表示分区,1-4是主分区或扩展分区,从5开始时逻辑分区。
lsblk 查看分区挂载情况
添加一块硬盘
1,虚拟机添加硬盘
2,分区 fdisk /dev/sdb
3,格式化 mkfs -t ext4 /dev/sdb1
4,挂载目录 先创建一个目录,然后挂载 mount /dev/sdb1 /newdisk
5,设置自动挂载
vi /etc/fstab 按规则编辑配置文件,
|
mount -a 生效
磁盘情况查询
df -h :查询整个系统磁盘使用情况
du -h <目录>:查询指定目录磁盘占用情况 –max-depth=2 子目录深度
Centos调整分区存储大小
例如:将/home下150G 转移到/ 目录下
fdisk -l
查看待挂载硬盘
/dev/sda 274.9 GB
查看物理卷
/dev/mapper/centos-root 53.7 GB
/dev/mapper/centos-home 212.1 GB
1、查看分区大小:df -hl
2、备份home文件:tar cvf /run/home.tar /home
3、终止home文件进程(切换到非home路径下执行这个命令):fuser -km /home
4、卸载home:umount /home
5、删除home所在逻辑卷:lvremove /dev/mapper/centos-home
6、扩大根目录所在的逻辑卷:lvextend -L +150G /dev/mapper/centos-root
7、同步文件:xfs_growfs /dev/mapper/centos-root
8、重建/home文件系统所需要的逻辑卷:lvcreate -L 44G -n /dev/mapper/centos-home
9、创建文件系统:mkfs.xfs /dev/mapper/centos-home
10、挂载/home文件系统:mount /dev/mapper/centos-home
11、恢复/home目录的内容:tar xvf /run/home.tar -C /
12、删除/run下面的备份home文件:rm -rf /run/home.tar
Linux虚拟机增加磁盘大小后如何扩展现有目录空间
例如:lsblk 查看磁盘情况,如何把 sda 中剩余空间 增加到/home文件夹?
|
步骤1,你可以使用分区管理工具如fdisk或parted来创建新的分区。我将展示如何使用fdisk命令创建新的分区:
|
步骤2,**将新的分区标记为物理卷(PV)**:使用pvcreate命令将新创建的分区标记为物理卷。
(如果提示Device /dev/sda3 not found.,是因为系统没有识别到新的分区,需要partprobe重新加载一下。 )
|
步骤3,**将新的物理卷添加到卷组(VG)**:使用vgextend命令将新创建的物理卷添加到现有的卷组中。
|
步骤4,**扩展逻辑卷(LV)**:使用lvextend命令将/home逻辑卷扩展到新的物理卷上。
|
步骤5,重新调整文件系统大小:根据文件系统类型使用适当的工具调整文件系统大小。
|
网络配置
修改配置文件指定固定IP地址,centos7的网络IP地址配置文件在 /etc/sysconfig/network-scripts 文件夹下,ens33网卡对应的配置文件为ifcfg-ens33
vi /etc/sysconfig/network-scripts/ifcfg-ens33
|
进程管理
1,ps:查看目前系统中哪些正在执行,正在执行的情况
ps -a:显示当前终端的所有进程信息
ps -u:以用户的格式显示进程信息
ps -x:显示后台进程运行的参数
2,kill:终止进程
kill <选项> <进程号> :通过进程号杀死进程。
-9:强制终止
killall <进程名称>:通过进程名称杀死进程,支持通配符。
3,pstree:查看进程树 -p 显示进程PID -u显示进程所属用户
服务管理
服务(service)本质就是线程,但是运行在后台,通常会监听某一端口,等待其他程序请求
systemctl <服务名> [start|stop|restart|reload|status] :操作某一服务
systemctl enable <服务名>:设置服务开机启动
监控
top:监控进程,默认3秒刷新一次
netstat -anp:监控网络
RPM和YUM
RPM(Red-Hat Package Manager)
rpm -qa | grep <软件包名称>:查询软件包是否安装
rpm -qi <软件包名称>:查询软件安装详情
rpm -ql <软件包名称>:查询软件包中的文件所在位置
rpm -qf <文件名>:查询文件属于哪个软件包
rpm -e <软件包名称>:卸载软件包
rpm -ivh <软件包全路径名称>:安装软件包 install 安装 verbose 提示 hash 进度条
Yum是一个shell前端的软件包管理器。能够从指定远程服务器自动下载包rpm包并安装,并且一次性安装所有依赖。
yum list | grep <软件名>:查询yum服务器上有没有这个软件
yum install <软件名>:安装软件,默认安装最新版本
Shell编程
shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至编写一些程序。
快速入门:
1,脚本以#!/bin/bash开头
2,脚本需要有执行x权限
3,无执行权限 可以通过 sh <脚本文件>,来执行。
四、Docker
开发者学运维,基本都是项目部署驱动学习方向,所以,学Docker是目标,Linux是前置技术,边学边掌握。虽然Windows上也可以用Docker,但是还是跟随主流吧。
1,安装Docker,官网已经很详细了。按照步骤执行对应指令即可。
|
2,配置阿里云容器镜像加速
|
这里是按照阿里云服务器的容器镜像加速配置进行配置,由于我用的自建Linux系统,配置后是否有加速效果,还未考证。
问题记录
1,宿主机无法访问容器里的服务
|
原因:docker网卡地址冲突 (其中: brctl命令需要安装: yum install -y bridge-utils)
|
2,宿主机映射docker容器端口后,宿主机防火墙未开放该端口,外网仍然可以访问。
linux 有两种防火墙:iptables 和 firewall,一般用宝塔或者下面命令都是在firewall中开启对应端口
|
原因:docker run新容器的时候 在iptables 新建规则,将容器映射端口开放给0.0.0.0/0 (所有)

如果想要关闭公网访问 需要手动 删除规则
iptables -D DOCKER 2
iptables -D DOCKER 3
3,学习常用的Docker命令
可视化
|
容器的数据卷使用——MySQL同步数据
|
Dockerfile 和 docker-compose.yml的区别
Dockerfile 是拿来构建自定义镜像的,并没有直接生成容器。
docker-compose.yml 文件是做容器编排以部署环境,里面包含使用各种镜像创建的容器服务,使用的镜像可以是网络上的,也可以是根据使用Dockerfile文件来生成的镜像。
Dockerfile(脚本)
使用Dockerfile为SpringBoot项目构建docker镜像
Dockerfile 部分指令:
|
Docker compose
docker-compose 是官方开源项目,负责实现对 Docker 容器集群的快速编排,部署分布式应用。通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)
下载Docker Compose
|
修改该文件的权限为可执行:
|
|
一般使用步骤
1、创建一个空目录。
2、定义 Dockerfile,方便迁移到任何地方
3、编写 docker-compose.yml 文件
4、运行 docker-compose up 启动服务、docker-compose down 关闭服务
编写docker-compose.yml文件
Docker Compose将所管理的容器分为三层,工程、服务及容器。docker-compose.yml中定义所有服务组成了一个工程,services节点下即为服务,服务之下为容器。容器与容器直之间可以以服务名称为域名进行访问,比如在mall-tiny-docker-compose服务中可以通过jdbc:mysql://db:3306这个地址来访问db这个mysql服务。
示例:
|
Docker问题排查:
问题发现:
发版时构建失败(不稳定),
问题分析:
构建编译打包阶段命令执行成功,目标服务器build命令或run命令出问题.
目标服务器中直接执行命令,报磁盘空间不足, 具体分析发现docker目录下磁盘占用非常大
分析磁盘占用参考命令:
|
有效信息如下: 通过查看,主要是 docker目录下vfs文件夹很大
|
思考过程, 多台相同配置, 环境类似的服务器, 仅这一个有次问题, 要对比一下docker配置差异.
对比 docker info发现差异
Storage Driver: devicemapper
Storage Driver: vfs
Storage Driver 不同, 并且 Storage Driver配置为 vfs, 此文件夹会随着时间很快被占用.
临时解决方案如下:
docker system prune -a 清理 docker 容器
暂定方案:
编辑daemon.json追加配置修改storage-driver
vi /etc/docker/daemon.json
|
扩展:
1,docker安装方式相同, 并且在/usr/lib/systemd/system/docker.service和 /etc/docker/daemon.json 都没有发现相关额外配置,为啥Storage Driver的默认配置会不同? 是与版本差异么?
一个是23.0.1 一个是 20.10.17
2,Storage Driver的vfs模式, 明细感觉对磁盘的利用方式不一样,有何优势?
2.1 Docker Storage Driver的devicemapper和vfs模式是两种不同的存储驱动程序,它们各自具有一些优势和特点。
Devicemapper是一种高级存储管理器,它使用了Linux内核提供的设备映射技术。它的优势在于支持高级的存储功能,如快照和克隆。Devicemapper还可以使用不同的存储池来管理容器的镜像和数据,提供了更好的隔离性和可管理性。然而,使用Devicemapper可能需要更多的配置和管理工作,并且在处理大量写入操作时可能会出现性能瓶颈。
VFS(Virtual File System)是Docker的默认存储驱动程序,它直接使用主机操作系统的文件系统来管理容器的镜像和数据。VFS的优势在于简单易用,无需额外的配置和管理。它适用于开发和测试环境,但在生产环境中可能会遇到性能和可扩展性方面的限制。 综上所述,Devicemapper适用于需要高级存储功能和更好隔离性的场景,但需要更多的配置和管理。而VFS适用于简单的开发和测试环境。选择哪种存储驱动程序取决于您的具体需求和环境。2.2 在多次构建镜像后,Devicemapper对主机磁盘的占用较少,而VFS占用较多的原因是它们的存储机制不同。
Devicemapper使用了写时复制(Copy-on-Write)的机制。当使用Devicemapper构建镜像时,它会创建一个基础镜像和一个写入层。每次构建镜像时,只有更改的部分会被写入到写入层,而不会对基础镜像进行修改。这样可以节省磁盘空间,因为多个镜像可以共享相同的基础层。因此,Devicemapper对主机磁盘的占用相对较少。 相反,VFS直接使用主机操作系统的文件系统来管理镜像和数据。每次构建镜像时,VFS会在主机文件系统上创建一个完整的镜像副本,包括所有的更改和文件。这导致每个构建都会占用更多的磁盘空间,因为每个镜像都是完整的副本。 因此,如果您需要在多次构建镜像后节省磁盘空间,Devicemapper可能是更好的选择。但请注意,Devicemapper可能需要更多的配置和管理工作,并且在处理大量写入操作时可能会出现性能瓶颈
3,网上有主动指定vfs模式的配置教程,相关参数具体作用是什么?
{
“storage-driver”: “vfs”,
“storage-opts”: [“size=256M”]
}
2024年8月6日14:00:00
Linux虚拟机 yum update报错:
|
经过排查,虚拟机可访问外网,但还是是用不了yum命令,说明是yum镜像没有了,那么就得下载一个来更新。
在安装完CentOS后一般需要修改yum源,才能够在安装更新rpm包时获得比较理想的速度。国内比较快的有阿里源、163源。这里以阿里源为例子。
- cd /etc/yum.repos.d
- mv CentOS-Base.repo CentOS-Base.repo.backup
- wget https://mirrors.aliyun.com/repo/Centos-7.repo
- mv Centos-7.repo CentOS-Base.repo
- yum clean all








