命令合集
linux
目录结构
编号 | 目录 | 含义 |
---|---|---|
1 | /bin | 存放二进制可执行文件 |
2 | /boot | 存放系统引导时使用的各种文件 |
3 | /dev | 存放设备文件 |
4 | /etc | 存放系统配置文件 |
5 | /home | 存放系统用户的文件 |
6 | /lib | 存放程序运行所需的共享库和内核模块 |
7 | /opt | 额外安装的可选应用程序包所放置的位置 |
8 | /root | 超级用户目录 |
9 | /sbin | 存放二进制可执行文件,只有root用户才能访问 |
10 | /tmp | 存放临时文件 |
11 | /usr | 存放系统应用程序 |
12 | /var | 存放运行时需要改变数据的文件,例如日志文件 |
命令
常用命令
序号 | 命令 | 对应英文 | 作用 |
---|---|---|---|
1 | ls [目录名] | list | 查看当前目录下的内容 |
2 | pwd | print work directory | 查看当前所在目录 |
3 | cd [目录名] | change directory | 切换目录 |
4 | touch [文件名] | touch | 如果文件不存在,创建文件 |
5 | mkdir [目录名] | make directory | 创建目录 |
6 | rm [文件名] | remove | 删除指定文件 |
文件目录操作命令
1 ls
作用: 显示指定目录下的内容
语法: ls [-al] [dir]
说明:
-a 显示所有文件及目录 (. 开头的隐藏文件也会列出)
-l 除文件名称外,同时将文件型态(d表示目录,-表示文件)、权限、拥有者、文件大小等信息详细列出
注意:
由于我们使用ls命令时经常需要加入-l选项,所以Linux为ls -l命令提供了一种简写方式,即ll
常见用法:
ls -al 查看当前目录的所有文件及目录详细信息
ls -al /etc 查看/etc目录下所有文件及目录详细信息
ll 查看当前目录文件及目录的详细信息
操作示例:
2 cd
作用: 用于切换当前工作目录,即进入指定目录
语法: cd [dirName]
特殊说明:
~ 表示用户的home目录
. 表示目前所在的目录
.. 表示目前目录位置的上级目录
举例:
cd .. 切换到当前目录的上级目录
cd ~ 切换到用户的home目录
cd /usr/local 切换到/usr/local目录
备注:
用户的home目录
root用户 /root
其他用户 /home/xxx
操作示例:
cd .. 切换到当前目录位置的上级目录; 可以通过 cd ../.. 来切换到上级目录的上级目录。
3 cat
作用: 用于显示文件内容
语法: cat [-n] fileName
说明:
-n: 由1开始对所有输出的行数编号
举例:
cat /etc/profile 查看/etc目录下的profile文件内容
操作演示:
cat 指令会一次性查看文件的所有内容,如果文件内容比较多,这个时候查看起来就不是很方便了,这个时候我们可以通过一个新的指令more。
4 more
作用: 以分页的形式显示文件内容
语法: more fileName
操作说明:
回车键 向下滚动一行
空格键 向下滚动一屏
b 返回上一屏
q或者Ctrl+C 退出more
举例:
more /etc/profile 以分页方式显示/etc目录下的profile文件内容
操作示例:
当我们在查看一些比较大的文件时,我们可能需要经常查询文件尾部的数据信息,那这个时候如果文件很大,我们要一直向下翻页,直到最后一页,去看最新添加的数据,这种方式就比较繁琐了,此时,我们可以借助于tail指令。
5 tail
作用: 查看文件末尾的内容
语法: tail [-f] fileName
说明:
-f : 动态读取文件末尾内容并显示,通常用于日志文件的内容输出
举例:
tail /etc/profile 显示/etc目录下的profile文件末尾10行的内容
tail -20 /etc/profile 显示/etc目录下的profile文件末尾20行的内容
tail -f /itcast/my.log 动态读取/itcast目录下的my.log文件末尾内容并显示
操作示例:
A. 默认查询文件尾部10行记录
B. 可以通过指定参数设置查询尾部指定行数的数据
C. 动态读取文件尾部的数据
在窗口1中执行指令 tail -f 1.txt
动态查看文件尾部的数据。然后在顶部的标签中右键选择 "复制标签",打开新的窗口2 , 此时再新打开的窗口2中执行指令 echo 1 >> 1.txt
, 往1.txt文件尾部追加内容,然后我们就可以在窗口1中看到最新的文件尾部的数据。
如果我们不想查看文件尾部的数据了,可以直接使用快捷键 Ctrl+C , 结束当前进程。
6 mkdir
作用: 创建目录
语法: mkdir [-p] dirName
说明:
-p: 确保目录名称存在,不存在的就创建一个。通过此选项,可以实现多层目录同时创建
举例:
mkdir itcast 在当前目录下,建立一个名为itcast的子目录
mkdir -p itcast/test 在工作目录下的itcast目录中建立一个名为test的子目录,若itcast目录不存在,则建立一个
操作演示:
7 rmdir
作用: 删除空目录
语法: rmdir [-p] dirName
说明:
-p: 当子目录被删除后使父目录为空目录的话,则一并删除
举例:
rmdir itcast 删除名为itcast的空目录
rmdir -p itcast/test 删除itcast目录中名为test的子目录,若test目录删除后itcast目录变为空目录,则也被删除
rmdir itcast* 删除名称以itcast开始的空目录
操作演示:
A. 删除空目录
B. 删除非空目录
C. 使用*通配符删除目录
*: 是一个通配符,代表任意字符;
rmdir itcast* : 删除以itcast开头的目录
rmdir *itcast : 删除以itcast结尾的目录
8 rm
作用: 删除文件或者目录
语法: rm [-rf] name
说明:
-r: 将目录及目录中所有文件(目录)逐一删除,即递归删除
-f: 无需确认,直接删除
举例:
rm -r itcast/ 删除名为itcast的目录和目录中所有文件,删除前需确认
rm -rf itcast/ 无需确认,直接删除名为itcast的目录和目录中所有文件
rm -f hello.txt 无需确认,直接删除hello.txt文件
操作示例:
注意: 对于 rm -rf xxx 这样的指令,在执行的时候,一定要慎重,确认无误后再进行删除,避免误删。
拷贝移动命令
1 cp
作用: 用于复制文件或目录
语法: cp [-r] source dest
说明:
-r: 如果复制的是目录需要使用此选项,此时将复制该目录下所有的子目录和文件
举例:
cp hello.txt itcast/ 将hello.txt复制到itcast目录中
cp hello.txt ./hi.txt 将hello.txt复制到当前目录,并改名为hi.txt
cp -r itcast/ ./itheima/ 将itcast目录和目录下所有文件复制到itheima目录下
cp -r itcast/* ./itheima/ 将itcast目录下所有文件复制到itheima目录下
操作示例:
如果拷贝的内容是目录,需要加上参数 -r
2 mv
作用: 为文件或目录改名、或将文件或目录移动到其它位置
语法: mv source dest
举例:
mv hello.txt hi.txt 将hello.txt改名为hi.txt
mv hi.txt itheima/ 将文件hi.txt移动到itheima目录中
mv hi.txt itheima/hello.txt 将hi.txt移动到itheima目录中,并改名为hello.txt
mv itcast/ itheima/ 如果itheima目录不存在,将itcast目录改名为itheima
mv itcast/ itheima/ 如果itheima目录存在,将itcast目录移动到itheima目录中
操作示例:
mv 命令既能够改名,又可以移动,具体是改名还是移动,系统会根据我们输入的参数进行判定(如果第二个参数dest是一个已存在的目录,将执行移动操作,其他情况都是改名)
打包压缩命令
作用: 对文件进行打包、解包、压缩、解压
语法: tar [-zcxvf] fileName [files]
包文件后缀为.tar表示只是完成了打包,并没有压缩
包文件后缀为.tar.gz表示打包的同时还进行了压缩
说明:
-z: z代表的是gzip,通过gzip命令处理文件,gzip可以对文件压缩或者解压
-c: c代表的是create,即创建新的包文件
-x: x代表的是extract,实现从包文件中还原文件
-v: v代表的是verbose,显示命令的执行过程
-f: f代表的是file,用于指定包文件的名称
举例:
打包
tar -cvf hello.tar ./* 将当前目录下所有文件打包,打包后的文件名为hello.tar
tar -zcvf hello.tar.gz ./* 将当前目录下所有文件打包并压缩,打包后的文件名为hello.tar.gz
解包
tar -xvf hello.tar 将hello.tar文件进行解包,并将解包后的文件放在当前目录
tar -zxvf hello.tar.gz 将hello.tar.gz文件进行解压,并将解压后的文件放在当前目录
tar -zxvf hello.tar.gz -C /usr/local 将hello.tar.gz文件进行解压,并将解压后的文件放在/usr/local目录
操作示例:
A. 打包
B. 打包并压缩
C. 解包
D. 解压
解压到指定目录,需要加上参数 -C
文本编辑命令
文本编辑的命令,主要包含两个: vi 和 vim,两个命令的用法类似,我们课程中主要讲解vim的使用。
1 vi&vim介绍
作用: vi命令是Linux系统提供的一个文本编辑工具,可以对文件内容进行编辑,类似于Windows中的记事本
语法: vi fileName
说明:
1). vim是从vi发展来的一个功能更加强大的文本编辑工具,编辑文件时可以对文本内容进行着色,方便我们对文件进行编辑处理,所以实际工作中vim更加常用。
2). 要使用vim命令,需要我们自己完成安装。可以使用下面的命令来完成安装:yum install vim
2 vim安装
命令: yum install vim
安装过程中,会有确认提示,此时输入 y,然后回车,继续安装:
3 vim使用
作用: 对文件内容进行编辑,vim其实就是一个文本编辑器
语法: vim fileName
说明:
1). 在使用vim命令编辑文件时,如果指定的文件存在则直接打开此文件。如果指定的文件不存在则新建文件。
2). vim在进行文本编辑时共分为三种模式,分别是 命令模式(Command mode),插入模式(Insert mode)和底行模式(Last line mode)。这三种模式之间可以相互切换。我们在使用vim时一定要注意我们当前所处的是哪种模式。
三种模式:
- 命令模式
A. 命令模式下可以查看文件内容、移动光标(上下左右箭头、gg、G)
B. 通过vim命令打开文件后,默认进入命令模式
C. 另外两种模式需要首先进入命令模式,才能进入彼此
| 命令模式指令 | 含义 |
| ------------ | --------------------------------- |
| gg | 定位到文本内容的第一行 |
| G | 定位到文本内容的最后一行 |
| dd | 删除光标所在行的数据 |
| ndd | 删除当前光标所在行及之后的n行数据 |
| u | 撤销操作 |
| shift+zz | 保存并退出 |
| i 或 a 或 o | 进入插入模式 |
-
插入模式
A. 插入模式下可以对文件内容进行编辑
B. 在命令模式下按下[i,a,o]任意一个,可以进入插入模式。进入插入模式后,下方会出现【insert】字样
C. 在插入模式下按下ESC键,回到命令模式 -
底行模式
A. 底行模式下可以通过命令对文件内容进行查找、显示行号、退出等操作
B. 在命令模式下按下[:,/]任意一个,可以进入底行模式
C. 通过/方式进入底行模式后,可以对文件内容进行查找
D. 通过:方式进入底行模式后,可以输入wq(保存并退出)、q!(不保存退出)、set nu(显示行号)底行模式命令 含义 :wq 保存并退出 :q! 不保存退出 :set nu 显示行号 :set nonu 取消行号显示 :n 定位到第n行, 如 :10 就是定位到第10行
操作示例:
查找命令
1 find
作用: 在指定目录下查找文件
语法: find dirName -option fileName
举例:
find . –name "*.java" 在当前目录及其子目录下查找.java结尾文件
find /itcast -name "*.java" 在/itcast目录及其子目录下查找.java结尾的文件
操作示例:
2 grep
作用: 从指定文件中查找指定的文本内容
语法: grep word fileName
举例:
grep Hello HelloWorld.java 查找HelloWorld.java文件中出现的Hello字符串的位置
grep hello *.java 查找当前目录中所有.java结尾的文件中包含hello字符串的位置
操作示例:
进程相关
systemctl status mysqld 查看mysql服务状态
systemctl start mysqld 启动mysql服务
systemctl stop mysqld 停止mysql服务
netstat -tunlp 查看已经启动的服务
netstat -tunlp | grep mysql 查看mysql的服务信息
ps –ef | grep mysql 查看mysql进程
防火墙
操作 | 指令 | 备注 |
---|---|---|
查看防火墙状态 | systemctl status firewalld / firewall-cmd --state | |
暂时关闭防火墙 | systemctl stop firewalld | |
永久关闭防火墙(禁用开机自启) | systemctl disable firewalld | 下次启动,才生效 |
暂时开启防火墙 | systemctl start firewalld | |
永久开启防火墙(启用开机自启) | systemctl enable firewalld | 下次启动,才生效 |
开放指定端口 | firewall-cmd --zone=public --add-port=8080/tcp --permanent | 需要重新加载生效 |
关闭指定端口 | firewall-cmd --zone=public --remove-port=8080/tcp --permanent | 需要重新加载生效 |
立即生效(重新加载) | firewall-cmd --reload | |
查看开放端口 | firewall-cmd --zone=public --list-ports |
①. 先开启系统防火墙
systemctl start firewalld
②. 再开放8080端口号
firewall-cmd --zone=public --add-port=8080/tcp --permanent
③. 重新加载防火墙
firewall-cmd --reload
Git
4.1 Git全局设置
当安装Git后首先要做的事情是设置用户名称和email地址。这是非常重要的,因为每次Git提交都会使用该用户信息。在Git 命令行中执行下面命令:
设置用户信息
git config --global user.name "itcast"
git config --global user.email "hello@itcast.cn"
查看配置信息
git config --list
注意:上面设置的user.name和user.email并不是我们在注册码云账号时使用的用户名和邮箱,此处可以任意设置。
4.2 获取Git仓库
要使用Git对我们的代码进行管理,首先需要获得Git仓库。
获取Git仓库通常有两种方式:
- 在本地初始化Git仓库(不常用)
- 从远程仓库克隆(常用)
4.2.1 在本地初始化Git仓库
操作步骤如下:
- 在任意目录下创建一个空目录(例如repo1)作为我们的本地Git仓库
- 进入这个目录中,点击右键打开Git bash窗口
- 执行命令git init
如果在当前目录中看到.git文件夹(此文件夹为隐藏文件夹)则说明Git仓库创建成功
4.2.2 从远程仓库克隆
可以通过Git提供的命令从远程仓库进行克隆,将远程仓库克隆到本地
命令格式:git clone 远程仓库地址
4.3 工作区、暂存区、版本库
为了更好的学习Git,我们需要了解Git相关的一些概念,这些概念在后面的学习中会经常提到。
版本库:前面看到的.git隐藏文件夹就是版本库,版本库中存储了很多配置信息、日志信息和文件版本信息等
工作区:包含.git文件夹的目录就是工作区,也称为工作目录,主要用于存放开发的代码
暂存区:.git文件夹中有很多文件,其中有一个index文件就是暂存区,也可以叫做stage。暂存区是一个临时保存修改文件的地方
4.4 Git工作区中文件的状态
Git工作区中的文件存在两种状态:
-
untracked 未跟踪(未被纳入版本控制)
-
tracked 已跟踪(被纳入版本控制)
1)Unmodified 未修改状态 2)Modified 已修改状态 3)Staged 已暂存状态
注意:文件的状态会随着我们执行Git的命令发生变化
4.5 本地仓库操作
本地仓库常用命令如下:
- git status 查看文件状态
- git add 将文件的修改加入暂存区
- git reset 将暂存区的文件取消暂存或者是切换到指定版本
- git commit 将暂存区的文件修改提交到版本库
- git log 查看日志
4.5.1 git status
git status 命令用于查看文件状态
注意:由于工作区中文件状态的不同,执行 git status 命令后的输出也会不同
4.5.2 git add
git add 命令的作用是将文件的修改加入暂存区,命令格式:git add fileName
加入暂存区后再执行 git status 命令,可以发现文件的状态已经发生变化。
4.5.3 git reset
git reset 命令的作用是将暂存区的文件取消暂存或者是切换到指定版本
取消暂存命令格式:git reset 文件名
切换到指定版本命令格式:git reset --hard 版本号
注意:每次Git提交都会产生新的版本号,通过版本号就可以回到历史版本
4.5.4 git commit
git commit 命令的作用是将暂存区的文件修改提交到版本库,命令格式:git commit -m msg 文件名
解释说明:
-m:代表message,每次提交时需要设置,会记录到日志中
可以使用通配符*一次提交多个文件
4.5.5 git log
git log 命令的作用是查看提交日志
通过git log命令查看日志,可以发现每次提交都会产生一个版本号,提交时设置的message、提交人、邮箱、提交时间等信息都会记录到日志中
4.6 远程仓库操作
前面执行的命令操作都是针对的本地仓库,本节我们会学习关于远程仓库的一些操作,具体包括:
- git remote 查看远程仓库
- git remote add 添加远程仓库
- git clone 从远程仓库克隆
- git pull 从远程仓库拉取
- git push 推送到远程仓库
4.6.1 git remote
如果要查看已经配置的远程仓库服务器,可以执行 git remote 命令,它会列出每一个远程服务器的简称。
如果已经克隆了远程仓库,那么至少应该能看到 origin ,这是 Git 克隆的仓库服务器的默认名字。
解释说明:
可以通过-v参数查看远程仓库更加详细的信息
本地仓库配置的远程仓库都需要一个简称,后续在和远程仓库交互时会使用到这个简称
4.6.2 git remote add
添加远程仓库命令格式:git remote add 简称 远程仓库地址
注意:一个本地仓库可以关联多个远程仓库
4.6.3 git clone
如果你想获得一份已经存在了的 Git 远程仓库的拷贝,这时就要用到 git clone 命令。 Git 克隆的是该 Git 仓库服务器上的几乎所有数据(包括日志信息、历史记录等)。
克隆仓库的命令格式: git clone 远程仓库地址
4.6.4 git push
将本地仓库内容推送到远程仓库,命令格式:git push 远程仓库简称 分支名称
在使用git push命令将本地文件推送至码云远程仓库时,如果是第一次操作,需要进行身份认证,认证通过才可以推送,如下:
注意:上面的用户名和密码对应的就是我们在码云上注册的用户名和密码,认证通过后会将用户名和密码保存到windows系统中(如下图),后续再推送则无需重复输入用户名和密码。
推送完成后可以到远程仓库中查看文件的变化。
解释说明:
一个仓库可以有多个分支,默认情况下在创建仓库后会自动创建一个master分支
后面会讲解分支相关的操作
4.6.5 git pull
git pull 命令的作用是从远程仓库获取最新版本并合并到本地仓库
命令格式:git pull 远程仓库简称 分支名称
注意:如果当前本地仓库不是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时再从远程仓库拉取文件的时候会报错(fatal: refusing to merge unrelated histories )
解决此问题可以在git pull命令后加入参数--allow-unrelated-histories
4.7 分支操作
分支是Git 使用过程中非常重要的概念。使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。
本地仓库和远程仓库中都有分支,同一个仓库可以有多个分支,各个分支相互独立,互不干扰。
通过git init 命令创建本地仓库时默认会创建一个master分支。
本节我们会学习关于分支的相关命令,具体命令如下:
- git branch 查看分支
- git branch [name] 创建分支
- git checkout [name] 切换分支
- git push [shortName] [name] 推送至远程仓库分支
- git merge [name] 合并分支
4.7.1 查看分支
查看分支命令:git branch
git branch 列出所有本地分支
git branch -r 列出所有远程分支
git branch -a 列出所有本地分支和远程分支
4.7.2 创建分支
创建分支命令格式:git branch 分支名称
4.7.3 切换分支
一个仓库中可以有多个分支,切换分支命令格式:git checkout 分支名称
注意:在命令行中会显示出当前所在分支,如上图所示。
4.7.4 推送至远程仓库分支
推送至远程仓库分支命令格式:git push 远程仓库简称 分支命令
推送完成后可以查看远程仓库:
4.7.5 合并分支
合并分支就是将两个分支的文件进行合并处理,命令格式:git merge 分支命令
注意:分支合并时需注意合并的方向,如上图所示,在Master分支执行操作,结果就是将b3分支合并到Master分支。
4.8 标签操作
Git 中的标签,指的是某个分支某个特定时间点的状态。通过标签,可以很方便的切换到标记时的状态。
比较有代表性的是人们会使用这个功能来标记发布结点(v1.0 、v1.2等)。下面是mybatis-plus的标签:
在本节中,我们将学习如下和标签相关的命令:
- git tag 查看标签
- git tag [name] 创建标签
- git push [shortName] [name] 将标签推送至远程仓库
- git checkout -b [branch] [name] 检出标签
4.8.1 查看标签
查看标签命令:git tag
4.8.2 创建标签
创建标签命令:git tag 标签名
4.8.3 将标签推送至远程仓库
将标签推送至远程仓库命令:git push 远程仓库简称 标签名
推送完成后可以在远程仓库中查看标签。
4.8.4 检出标签
检出标签时需要新建一个分支来指向某个标签,检出标签的命令格式:git checkout -b 分支名 标签名
Nginx
Nginx-命令
常用命令
Nginx中,我们的二进制可执行文件(nginx)存放在sbin目录下,虽然只有一个可执行文件,但是我们可以通过该指令配合不同的参数达到更加强大的功能。接下来,我们就演示一下Nginx常见指令, 在执行下面的指令时,都需要在/usr/local/nginx/sbin/目录下执行。
查看版本
./nginx -v
检查配置文件
修改了nginx.conf核心配置文件之后,在启动Nginx服务之前,可以先检查一下conf/nginx.conf文件配置的是否有错误,命令如下:
./nginx -t
启动
./nginx
启动之后,我们可以通过ps -ef指令来查看nginx的进程是否存在。
注意: nginx服务启动后,默认就会有两个进程。
启动之后,我们可以直接访问Nginx的80端口, http://192.168.200.200
注意:
要想正常访问Nginx,需要关闭防火墙或开放指定端口号,执行的指令如下:
A. 关闭防火墙
systemctl stop firewalld
B. 开放80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --reload
停止
./nginx -s stop
停止之后,我们可以查看nginx的进程:
ps -ef|grep nginx
重新加载
当修改了Nginx配置文件后,需要重新加载才能生效,可以使用下面命令重新加载配置文件:
./nginx -s reload
环境变量配置
在上述我们在使用nginx命令在进行服务的启动、停止、重新加载时,都需要用到一个指令nginx,而这个指令是在nginx/sbin目录下的,我们每一次使用这个指令都需要切换到sbin目录才可以,使用相对繁琐。那么我们能不能在任意目录下都可以执行该指令来操作nginx呢?答案是可以的,配置nginx的环境变量即可。
通过vim编辑器,打开/etc/profile文件, 在PATH环境变量中增加nginx的sbin目录,如下:
修改完配置文件之后,需要执行 source /etc/profile 使文件生效。 接下来,我们就可以在任意目录下执行nginx的指令了,如:
Docker
Docker安装与启动
【目标】
了解docker
【路径】:Docker安装
1:Docker安装
2: Docker启动与停止
【讲解】
安装环境说明
Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,而且一般Docker出现的问题Ubuntu是最先更新或者打补丁的。在很多版本的CentOS中是不支持更新最新的一些补丁包的。
由于我们学习的环境都使用的是CentOS,因此这里我们将Docker安装到CentOS上。注意:这里建议安装在CentOS7.x以上的版本,在CentOS6.x的版本中,安装前需要安装其他很多的环境而且Docker很多补丁不支持更新。
安装CentOS7
先在VMware中安装CENTOS系统 我们安装的是centos7
安装ali的yum源
mkdir /etc/yum.repos.d/back
mv /etc/yum.repos.d/* /etc/yum.repos.d/back
## 访问http://mirrors.aliyun.com/repo/Centos-7.repo,把这个网址的内容保存 到本机的/etc/yum.repos.d/CentOS-Base.repo的这个文件
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
yum repolist
yum update
https://cloud.tencent.com/developer/article/1434998
安装Docker
使用yum命令在线安装
yum -y install docker
systemctl enable docker ## 开机时自动启动docker
systemctl stop firewalld ## 关闭防火墙
systemctl disable firewalld ## 开机不要启动
安装后查看Docker版本
docker -v
启动与停止Docker
systemctl命令是系统服务管理器指令,它是 service 和 chkconfig 两个命令组合。
-
启动docker:systemctl start docker
-
停止docker:systemctl stop docker
-
重启docker:systemctl restart docker
-
查看docker状态:systemctl status docker
-
开机启动:systemctl enable docker
-
查看docker概要信息:docker info
-
查看docker帮助文档:docker --help
【小结】
1:Docker安装与启动
Docker镜像操作【重点】
【目标】
docker镜像介绍
【路径】
1:Docker镜像介绍
2: 列出本地镜像
3:搜索镜像
4:拉取镜像
5:删除镜像
【讲解】
什么是Docker镜像
Docker镜像是由文件系统叠加而成(是一种文件的存储形式)。最底端是一个文件引导系统,即bootfs,这很像典型的Linux/Unix的引导文件系统。Docker用户几乎永远不会和引导系统有什么交互。实际上,当一个容器启动后,它将会被移动到内存中,而引导文件系统则会被卸载,以留出更多的内存供磁盘镜像使用。Docker容器启动是需要的一些文件,而这些文件就可以称为Docker镜像。
列出本地镜像
列出docker下的当前docker服务所在的系统里面所有镜像:docker images
docker images
-
REPOSITORY:镜像所在的仓库名称
-
TAG:镜像标签 版本号
-
IMAGE ID:镜像ID 唯一
-
CREATED:镜像的创建日期(不是获取该镜像的日期)
-
SIZE:镜像大小
这些镜像都是存储在Docker宿主机的/var/lib/docker目录下
搜索镜像
如果你需要从网络中查找需要的镜像,可以通过以下命令搜索: docker search 镜像名称.例如:
-
NAME:仓库名称
-
DESCRIPTION:镜像描述
-
STARS:用户评价,反应一个镜像的受欢迎程度
-
OFFICIAL:是否官方
-
AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的
拉取镜像
从Docker Hub拉取
https://hub.docker.com/ 搜索,看有哪些版本
Docker镜像首页,包括官方镜像和其它公开镜像。Docker Hub上最受欢迎的10大镜像(通过Docker registry API获取不了镜像被pull的个数,只能通过镜像的stars数量,来衡量镜像的流行度。毫无疑问,拥有最高stars数量的库都是官方库)。 由于国情的原因,国内下载 Docker HUB 官方的相关镜像比较慢,可以使用国内(docker.io)的一些镜像加速器,镜像保持和官方一致,关键是速度块,推荐使用。
Mirror与Private Registry的区别:
Private Registry(私有仓库)是开发者或者企业自建的镜像存储库,通常用来保存企业内部的 Docker 镜像,用于内部开发流程和产品的发布、版本控制。
Mirror是一种代理中转服务,我们(比如daocloud)提供的Mirror服务,直接对接Docker Hub的官方Registry。Docker Hub 上有数以十万计的各类 Docker 镜像。
在使用Private Registry时,需要在Docker Pull 或Dockerfile中直接键入Private Registry 的地址,通常这样会导致与 Private Registry 的绑定,缺乏灵活性。
使用 Mirror 服务,只需要在 Docker 守护进程(Daemon)的配置文件中加入 Mirror 参数,即可在全局范围内透明的访问官方的 Docker Hub,避免了对 Dockerfile 镜像引用来源的修改。
拉取镜像
## dokcer pull 镜像名:版本号, 如果版本号不填,默认使用latest,拉取当时最新的版本,标记为latest,具体看不出来它的版本
## 建议拉取镜像时带上版本号
docker pull centos:7
目前国内访问docker hub速度上有点尴尬,使用docker Mirror势在必行。现有国内提供docker镜像加速服务的商家有不少,下面重点ustc镜像。
ustc的镜像
ustc是老牌的linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在用。ustc的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务。
https://lug.ustc.edu.cn/wiki/mirrors/help/docker
步骤:
(1)编辑该文件:vi /etc/docker/daemon.json
PS: 如果该文件不存在就手动创建;另外有可能如果没有vim 命令则使用vi命令即可。
(2)在该文件中输入如下内容:
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
还有本地阿里云的镜像地址,速度更快
登陆阿里云的控制台->所有产品->弹性计算->容器镜像服务->镜像工具->镜像加速器
{
"registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"]
}
(3)注意:一定要重启docker服务,如果重启docker后无法加速,可以重新启动OS ,然后通过docker pull命令下载镜像 。
systemctl restart docker
删除镜像
删除镜像方式1:根据仓库的名称(镜像的名称)来删除 还可以使用image_id来进行删除。
1、 docker rmi $IMAGE_ID:删除指定镜像
还可以使用
docker rmi 名称:tag
删除镜像方式2:【不推荐】
2、 docker rmi `docker images -q`:删除所有镜像【注意】不是单引号,与mysql关键字处理时一样的符号ESC下的那个键,1键左边
docker images -q 命令获取所有镜像的id
【小结】
1:了解什么是Docker镜像
基础镜像(rootfs)+应用(jdk)
2:掌握镜像的操作
查看本地镜像 docker images
搜索镜像:docker search 镜像名 https://hub.docker.com/获取有哪些镜像版本号
下载镜像:docker pull 镜像名:版本号(如果没有版本号就默认latest)
删除镜像:docker rmi 镜像名:版本号 、 docker rmi ImageID
Docker容器操作【重点】
【目标】
docker容器操作
【路径】
1:查看当前有哪些容器
2: 创建于启动容器
3:停止与启动容器
4:文件拷贝
5:目录挂载
6:查看容器ip
7:删除容器
【讲解】
查看当前有哪些容器
- 查看正在运行容器:
docker ps --help
docker ps 查看当前正在运行的容器 status为up,如果容器已经停止了则不会显示出来
- 查看所有的容器(启动过的历史容器)【常用】,列出停止的与运行中的
docker ps –a
- 查看最后一次运行的容器:
docker ps -l
- 查看停止的容器
docker ps -f status=exited
创建与启动容器【重点】
创建容器命令:docker run(创建且运行 create+st)(create)
run = create + start
常用的参数说明:
参数名 | 说明 |
---|---|
-i | 表示运行容器 |
-t | 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端,交互式 |
--name | 为创建的容器命名 |
-v | 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录), 可以使用多个-v做多个目录或文件映射。 注意:最好做目录映射,在宿主机上所做修改,容器会自动更新 -volume |
-d | 在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登 录容器,如果只加-i -t两个参数,创建后就会自动进去容器) |
-p(port) | 表示端口映射,前者是宿主机端口,后者是容器内的映射端口。 可以使用多个-p做多个端口映射 |
--restart always 容器会随着docker的启动而启动
4.1.1. 创建交互式容器
创建一个交互式容器并取名为mycentos 且进入容器里命令行模式(/bin/bash)
docker run -it --name=mycentos centos:7 /bin/bash
开启另外一个终端来查看状态:
docker ps
退出当前容器:
exit
然后用ps -a 命令查看发现该容器也随之停止:
4.1.2. 守护式容器【推荐】
创建一个守护式容器:如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器
命令如下(容器名称不能重复):
docker run -di --name=mycentos2 centos:7
登录守护式容器:
docker exec -it container_name (或者container_id) /bin/bash(exit退出时,容器不会停止)
命令如下:
docker exec(进入容器) -i(容器)t(交互式) mycentos2(容器名|容器Id) /bin/bash命令行模式
docker exec -it mycentos2 /bin/bash
停止与启动容器
- 停止正在运行的容器:docker stop $CONTAINER_NAME/ID
docker stop mycentos2
- 启动已运行过的容器:docker start $CONTAINER_NAME/ID
docker start mycentos2
-
重启
docker restart 容器名|容器id
文件拷贝
如果我们需要将文件拷贝到容器内可以使用cp命令:
docker cp 需要拷贝的本地文件或目录 容器名称:容器目录
也可以将文件从容器内拷贝出来
docker cp 要复制的文件 复制到目录文件
docker cp source target
docker cp 容器名称:容器目录 本地的文件或目录 把容器中的文件或目录复制到本地
docker cp 本地的文件或目录 容器名称:容器目录 把本地文件或目录复制到容器里
解释:cp 当前目录下的a文件到 容器中的/usr/local/下的a文件
[root@localhost ~]## docker exec -it mycentos2 /bin/bash
[root@32400e14bea6 /]## cd /usr/local/
[root@32400e14bea6 local]## ll
目录挂载(映射)【重点】
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器里所对应的目录。:
创建容器 添加-v参数 后边为 宿主机目录:容器目录
创建容器 并挂载宿主机目录 到容器中的目录下:
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
如果你共享的是多级的目录,可能会出现权限不足的提示。
这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数--privileged=true来解决挂载的目录没有权限的问题。
docker run -di --privileged=true -v /root/test:/usr/local/test --name=mycentos4 centos:7
【注意】:需要保存数据的容器,一定要加上挂载数据所在的目录。避免删容器时数据丢失
查看容器IP地址
我们可以通过以下命令查看容器运行的各种数据:
docker inspect mycentos2
也可以直接执行下面的命令直接输出IP地址:
docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos2
删除容器
- 删除指定的容器: 这个命令只能删除已经关闭的容器,不能删除正在运行的容器
docker rm $CONTAINER_ID/NAME
- 删除所有的容器【不要用了】:
docker rm `docker ps -a -q`
或者:
[root@localhost ~]## docker rm $(docker ps -aq)
查看容器日志【重点】
docker logs -f 容器名|容器id
【小结】
1:掌握容器常用命令, 最少练一遍 存小抄
docker run -di --name=容器名称 -p 主机端口:容器端口 -e 环境变量=值 -v 挂载目录 主机目录:容器目录 --privileged=true 镜像名称:版本|镜像ID
Docker ps 的用法
语法
docker ps [OPTIONS]
OPTIONS说明:
- -a :显示所有的容器,包括未运行的。
- -f :根据条件过滤显示的内容。
- --format :指定返回值的模板文件。
- -l :显示最近创建的容器。
- -n :列出最近创建的n个容器。
- --no-trunc :不截断输出。
- -q :静默模式,只显示容器编号。
- -s :显示总的文件大小。
查询
列出所有在运行的容器信息。
[root@VM-20-8-centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fbc6595f4039 mysql:5.7 "docker-entrypoint.s…" 28 seconds ago Up 27 seconds 33060/tcp, 0.0.0.0:13306->3306/tcp mysql
284c27a96211 nginx "/docker-entrypoint.…" 2 hours ago Up 2 hours 0.0.0.0:8080->80/tcp pinyougou_nginx
列出最近创建的1个容器信息
[root@VM-20-8-centos ~]# docker ps -n 1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fbc6595f4039 mysql:5.7 "docker-entrypoint.s…" About a minute ago Up About a minute 33060/tcp, 0.0.0.0:13306->3306/tcp mysql
列出所有创建的容器ID
[root@VM-20-8-centos ~]# docker ps -a -q
fbc6595f4039
284c27a96211
过滤
根据标签过滤
$ docker run -d --name=test-nginx --label color=blue nginx
$ docker ps --filter "label=color"
$ docker ps --filter "label=color=blue"
根据名称过滤
docker ps --filter"name=test-nginx"
根据状态过滤
docker ps --filter status=running
docker ps --filter status=exited
根据镜像过滤
镜像名称
$ docker ps --filter ancestor=nginx
镜像ID
$ docker ps --filter ancestor=d0e008c6cf02
根据启动顺序过滤
$ docker ps -f before=9c3527ed70ce
$ docker ps -f since=6e63f6ff38b0
格式化
格式化选项(–format)
- .ID 容器ID
- .Image 镜像ID
- .Command Quoted command
- .CreatedAt 创建容器的时间点.
- .RunningFor 从容器创建到现在过去的时间.
- .Ports 暴露的端口.
- .Status 容器状态.
- .Size 容器占用硬盘大小.
- .Names 容器名称.
- .Labels 容器所有的标签.
- .Label 指定label的值 例如'{{.Label “com.docker.swarm.cpu”}}’
- .Mounts 挂载到这个容器的数据卷名称
$ docker ps --format "{{.ID}}: {{.Command}}"
a87ecb4f327c: /bin/sh -c #(nop) MA
01946d9d34d8: /bin/sh -c #(nop) MA
c1d3b0166030: /bin/sh -c yum -y up
41d50ecd2f57: /bin/sh -c #(nop) MA
案例
0、停止所有容器
docker stop `docker ps -a -q`
1、删除所有容器
docker rm `docker ps -a -q`
2、删除所有镜像
docker rmi `docker images -q`
3、按条件删除镜像没有打标签
docker rmi `docker images -q | awk '/^<none>/ { print $3 }'`
4、镜像名包含关键字
docker rmi --force `docker images | grep doss-api | awk '{print $3}'` //其中doss-api为关键字
docker命令批量删除状态为Exited的容器
docker启动的容器当中,经常有一些退出的容器,既然没有用了,就需要批量清理一下。
命令:
docker rm $(docker ps -q -f status=exited)
解释: 利用docker ps -f选项可以找到exited的容器 -q 只显示容器id 。 这样就可以批量删除了!
docker命令批量删除包含K8s字段的容器
docker container stop `docker container ls -a |grep k8s |awk '{print $1}'`
docker container rm `docker container ls -a |grep k8s |awk '{print $1}'`
部署应用【重点】
【目标】
部署应用
【路径】
1:MYSQL部署
2:TOMCAT部署
3:Nginx部署
4:Redis部署
【讲解】
MySQL部署
拉取MySQL镜像
docker pull mysql:5.7
查看镜像:
创建MySQL容器
docker run -di --name=mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
-p 代表端口映射,格式为 宿主机(虚拟机)映射端口:容器运行端口
【注意】-e 代表给容器添加环境变量 MYSQL_ROOT_PASSWORD是root用户的登陆密码,必须,严格区分大小写
进入MySQL容器
- 进入容器中
docker exec -it mysql /bin/bash
- 登录mysql
mysql -uroot -p123456
- 授权允许远程登录
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
远程登陆MySQL
- 我们在我们本机的电脑上去连接虚拟机Centos中的Docker容器,这里192.168.25.132是【你】的虚拟机操作系统的IP.
挂载数据与配置目录
docker run -di --name=mysql -p 13306:3306 -e MYSQL_ROOT_PASSWORD=123456 \
--privileged=true \
-v /root/mysql/conf:/etc/mysql \
-v /root/mysql/data:/var/lib/mysql \
mysql:5.7
tomcat部署
拉取tomcat镜像
docker pull tomcat:7-jre8
创建tomcat容器
docker run -di --name=pinyougou_tomcat -p 9100:8080 tomcat:7-jre8
测试tomcat
浏览器地址栏输入:http://192.168.25.132:9100
Nginx部署
正向代理
反向代理
负载均衡
拉取Nginx镜像
docker pull nginx
创建Nginx容器
docker run -di --name=pinyougou_nginx -p 80:80 nginx
测试Nginx
浏览器地址栏输入:http://192.168.25.132
Redis部署
拉取Redis镜像
docker pull redis
创建Redis容器
docker run -di --name=pinyougou_redis -p 6379:6379 redis
客户端测试
本地安装一个redis的客户端 连接即可, 在redis的目录下先打开cmd命令窗口
redis-cli.exe -h 192.168.137.133 -p 16379
RabbitMQ部署
#拉取镜像
docker pull rabbitmq:management
docker run -d --hostname rabbit_host1 --name xd_rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=password -p 15672:15672 -p 5672:5672 rabbitmq:management
#介绍
-d 以守护进程方式在后台运行
-p 15672:15672 management 界面管理访问端口
-p 5672:5672 amqp 访问端口
--name:指定容器名
--hostname:设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts,作为容器主机IP的别名,并且将显示在容器的bash中
-e 参数
RABBITMQ_DEFAULT_USER 用户名
RABBITMQ_DEFAULT_PASS 密码
Nacos部署
# docker拉取镜像
docker pull nacos/nacos-server
# 查看镜像
docker images
# 启动Nacos
docker run --env MODE=standalone --name xdclass-nacos -d -p 8848:8848 ef8e53226440 (镜像id)
# 查看日志
docker logs -f
http://公网ip:8848/nacos
# 登录密码默认nacos/nacos
Sentinel部署
# docker拉取镜像
docker pull openzipkin/zipkin:latest
# 查看镜像
docker images
# 启动Nacos
docker run --name xdclass-zipkin -d -p 9411:9411 镜像id
#访问zipkin
http://公⽹ip:9411/zipkin/
Zipkin部署
# docker拉取镜像
docker pull openzipkin/zipkin:latest
# 查看镜像
docker images
# 启动Nacos
docker run --name sentinel -d -p 8858:8858 镜像id
http://公⽹ip:8858
# 登录密码默认sentinel/sentinel
【小结】
掌握应用部署
备份与迁移【了解】
【目标】
备份与迁移
【路径】
1:容器保存为镜像
2:镜像备份
3:镜像恢复与迁移
【讲解】
容器保存为镜像
我们可以通过以下命令将容器保存为镜像
docker commit pinyougou_nginx mynginx
docker commit 容器名称 要保存的镜像名称:Tag
pinyougou_nginx是容器名称
mynginx是新的镜像名称
此镜像的内容就是你当前容器的内容,接下来你可以用此镜像再次运行新的容器
镜像备份
docker save -o mynginx.tar mynginx:Tag
docker save -o 要保存的文件名.tar 镜像名称:版本|镜像id
-o 输出到的文件
执行后,运行ls命令即可看到打成的tar包.
镜像恢复与迁移
首先我们先删除掉mynginx镜像,然后执行命令进行恢复
docker load -i mynginx.tar
-i 输入的文件
执行后再次查看镜像,可以看到镜像已经恢复
再创建容器。
【小结】
了解容器保存为镜像
了解镜像备份、恢复、迁移
dockerfile(了解,存小抄)
【目标】
了解dockerfile
【路径】
1:Dockerfile介绍
2: Dockerfile参数了解
3:springboot微服务部署
【讲解】
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像.
更多语法参考:(官网手册的翻译)
https://deepzz.com/post/dockerfile-reference.html#toc_9
https://docs.docker.com/engine/reference/builder/
命令 | 作用 |
---|---|
FROM image_name:tag | 定义了使用哪个基础镜像启动构建流程 |
MAINTAINER user_name | 声明镜像的创建者 |
ENV key value | 设置环境变量 (可以写多条) |
RUN command | 是Dockerfile的核心部分(可以写多条) |
ADD source_dir/file dest_dir/file | 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 |
COPY source_dir/file dest_dir/file | 和ADD相似,但是如果有压缩文件并不能解压 |
WORKDIR path_dir | 设置工作目录 |
EXPOSE port1 prot2 | 用来指定端口,使容器内的应用可以通过端口和外界交互 |
CMD argument | 在构建容器时使用,会被docker run 后的argument覆盖 |
ENTRYPOINT argument | 和CMD相似,但是并不会被docker run指定的参数覆盖 |
VOLUME | 将本地文件夹或者其他容器的文件挂载到容器中 |
dockerfile的demo
- 在root下创建demo目录
mkdir demo
cd demo
- 在demo 目录下创建 a文件
echo hello > a.txt
- 在某~/demo下创建Dockerfile文件
vi Dockerfile
内容为:
## my dockerfile auth
FROM centos:7
MAINTAINER author
WORKDIR /root/workdir
RUN touch te
ADD a.txt b.txt
ENV key1 "hello"
语法解释:
## :代表注释
FROM centos : 代表依据基本的镜像来创建
MAINTAINER author :代表就是作者是谁
WORKDIR /root/workdir :代表就是创建容器时进入工作的目录是容器中的/root/workdir目录
RUN touch te :代表就是RUN 运行命令 运行一个创建空文件te
COPY ["HI","."] :代表从宿主系统中复制HI 文件到容器系统中工作目录中的当前路径下
ADD a b :代表从宿主机所在Dockerfile文件的目录下Copy 文件A 到容器中的b文件 b文件的目录为工作目录下。
ENV key1 "hello" :定义linux中的环境变量。如下:
定义一个:key value
定义多个:key=value key2=value2
- 创建自定义镜像
docker build -t mycentos .
语法解释:
docker build : 表示通过Dockerfile文件来创建镜像
-t mycentos 表示 给与镜像的名称和版本 为:mycentos:lasted (lasted可以不写)
. 表示从当前目录下进行加载Dockerfile文件
- 查看是否打包镜像成功
- 测试创建容器:
docker run -di --name=mycentosheh mycustomcentos
- 连接容器
[root@localhost demo]## docker exec -it mycentosheh /bin/bash
注意: 进入目录即为:/root/workdir
在目录下有 b文件和 te文件
输入:echo $key1 查看环境变量的值结果
springboot微服务部署
在微服的世界中,使用springboot来开发的微服务架构,使用dockerfile 来部署应用。
- 在本地开发完成微服系统 打包,将其copy到linux系统中
- 创建dockefile文件上图:
#my dockerfile author
FROM java:8
MAINTAINER 9527
WORKDIR /root/springboot
COPY demo.jar app.jar
ENTRYPOINT ["java","-jar","app.jar"]
EXPOSE 83
ENTRYPOINT ["java","-jar","/app.jar"] 表示 执行命令: 整个命令都只能有一个ENTRYPOINT
java -jar app.jar
EXPOSE 83 发布端口为:83
- 构建镜像
docker build -t demo:1.0 .
- 创建容器
docker run -di --name=myapp1 -p 18083:83 demo:1.0
- 浏览器中访问系统:
http://192.168.25.132:18083/hello
-
效果
Docker-Compose(了解)
Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!
初识DockerCompose
Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。格式如下:
## docker版本: 1.12+
version: "2.0"
services:
redis:
## 容器名
container_name: redis
image: redis:latest
ports:
- 16379:6379
mysql:
container_name: mysql
image: mysql:5.7
ports:
- 13306:3306
environment:
MYSQL_ROOT_PASSWORD: 123456
volumes:
- "/root/mysql/conf:/etc/mysql"
- "/root/mysql/data:/var/lib/mysql"
privileged: true
DockerCompose的详细语法参考官网:https://docs.docker.com/compose/compose-file/
其实DockerCompose文件可以看做是将多个docker run命令写到一个文件,只是语法稍有差异。