linux

泄露秘密 提交于 2020-03-05 18:03:30

计算机必须有的组成部分:cpu、硬盘、内存、电源
服务器硬件

  • 显示屏
  • 内置键盘
  • usb接口
  • 触摸板
  • 网口
  • 电源接口
  • 散热口
  • 摄像头
  • 电源开关

服务器硬件厂商

  • dell :戴尔
  • hp :惠普
  • 联想
  • 浪潮
  • ibm

cpu: 人的记忆,如同计算机的内存条,如果进程不重启,服务器不重启,内存中的数据也不丢
内存: 是CPU和磁盘之间的缓冲设备,也叫临时存储器(存放数据),断电时数据丢失

服务器分类:互联网公司,怎么选择服务器?一般有什么

1).物理服务器,有钱的大公司,买自己的服务器,建造自己的机房(零度,无尘,无静电)防止机器短路,数据丢失
有钱的公司,bat,建造自己的机房
中等的公司,普通的外企,也有自己的服务器,但是服务器,托管在别人的机房(世纪互联这家公司)

2).云服务器,阿里云,腾讯云(便宜,省钱,无烦恼),初创型的小公司
3).vmware虚拟化技术

linux

linux 系统的优势:

跨平台的硬件支持; 丰富的软件支持; 多用户多任务; 可靠的安全性 ; 良好的稳定性; 完善的网络功能

shell

我们输入linux命令发给 linux操作系统 ,shell将我们输入的命令,翻译给操作系统去执行

linux的发行版

各个厂家进行自己的定制开发,衍生出不同的发行版
不同的发行版,命令大同小异
centos 社区版的redhat,免费使用,功能和redhat一模一样
ubuntu 作为很多个人学习的linux平台,也常用在物联网嵌入式中
redhat 红帽子,企业版linux,收费使用,redhat资格认证才可以进行linux运维维护,rhcsa红帽管理员,rhce红帽工程师,rhca(红帽架构师)

开源软件特性

低风险 高品质 低成本 更透明

使用linux的好处 :

是自由传播,免费,不会犯法,任意切换图形/命令终端,安全稳定,不用杀毒软件,不卡

linux xshell的快捷键

Tab 自动补全
Ctrl + c 取消当前操作
ctrl + l 是清屏
ctrl + d 是退出登录
ctrl + shift + r 是快速重新连接

vi/vim快捷键

yy  复制当前行   
p  粘贴    
dd  剪切   
u  撤销  
ctrl + r 恢复     

什么是服务器

(在网络中对外提供服务器的一台性能超强的计算机),硬件
实体服务器
云服务器

centos7版本的linux操作系统

选择的vmware虚拟化软件,安装的linux,充当一个服务器的角色
服务器(可能是云服务器,也可能在全球各地某一个机器),开发人员一般是不会直接触碰的,通过远程连接的方式,去使用

xshell 就是封装了ssh(远程连接的命令),只在windows下有的工具
如果你用的就是linux或者macos,只需要打开终端,输入ssh命令即可


1.linux是个操作系统,服务器的操作系统,centos7系列的发行版
2.windows机器上,安装虚拟化软件vmware,在vmware软件里,安装linux操作系统
3.vmware如同服务器,我们选择远程登录,使用的工具是 xshell

远程登录linux的命令

ssh 用户名@服务器的ip地址(公网的ip)
ssh 用户名@教室内的局域网ip地址(私有的) 确保在同一个网段

windows查看ip的命令 :ipconfig
linux查看ip的方式: ifconfig

linux登录之后的命令提示符

~  当前你所在的路径
#  超级用户的身份提示符  
$  普通用户的身份提示符 
pip3 instal django   #python装东西 
yum install  tree  #linux安装软件  

linux的特殊符号的含义

    # 注释
    ~   用户家目录
    -   上一次的工作目录
    .当前目录
    ..上一级目录
    ./ 当前工作目录
    > 重定向覆盖输出符号
    w
    模式
    >> 重定向追加输出符号
    a
    追加
    < 重定向输入符,覆盖写入
    << 重定向追加写入符号
    用在mysql数据导入时候
    $PATH
    环境变量

摘出来一些常用的基础命令

su 切换用户
mkdir   创建文件夹
cd   切换目录
touch   创建普通文件
cat  查看文本内容
vim   文本编辑器
ls   查看文件夹内容
ll   等于 ls   -l 
ps -ef   查看linux的进程
top    linux的任务管理器
find  查找linux文件的
grep   过滤字符串信息的
pwd   打印当前工作目录的绝对路径
mv   移动文件 ,重命名
windows和linux传输文件的方法:xftp lrzsz scp
rm  删除文件  rm -rf    -r  递归删除文件夹  -f  强制不提醒就删除
yum   linux安装软件的命令,如同pip
head   从文本前*行开始看,默认前10行
tail  从文本后面10行看      tail  -f  filename   实时监控文件内容
more  翻页显示文件内容
less  翻页显示文件内容
echo  追加内容,相当于print打印
ifup  ifdown 启停网卡的快捷命令
systemctl restart network 通过命令重启网卡
id kun  #查看用户身份id  
sudo 临时提权的命令
userdel -r  用户名 #删除用户信息,和家目录
netstat -tunlp  | grep 8000  确认django的端口是否启动
ps -ef |grep python  确认django的进程是否存在 
kill 进程id   # 杀死进程的命令
Pkill  -9   #杀死全部进程
Hostnamectl  set-hostname  #更改主机名
显示磁盘空间  df -h 
显示系统主机名的命令:  uname -n
systemctl stop firewalld.service     #关闭防火墙服务
systemctl disable firewalld.service   #禁止防火墙开机自启
iptables -F  #清空防火墙规则
cat /etc/os-release  #如何查看系统发行版信息
#cat /etc/redhat-release  #查看系统版本信息
/etc/profile  #系统全局环境变量配置文件
userdel -r  用户名 #删除用户信息,和家目录

yum clean all #清空缓存
yum makecache #生成yum缓存

查看文件夹大小du -sh

centos6 命令管理服务 :  service  nginx  start 
centos7 命令管理服务: systemctl  start/stop/restart  nginx 

查看内存大小信息

cat /proc/meminfo |grep MemTotal
free -m 

查看cpu

cat /proc/cpuinfo  
Lscpu     top  

查看板卡

Cat pro/pci lspci

查看网卡

cat pro/interrupts

如何手动启动网卡?

Ifup  网卡名
Ifup ens33
Ifup eth0
Systemctl start network 

1.文件夹的操作慢命令

Pwd : 获取当前在哪个文件夹(目录) print work 目录(我在哪的命令)
ls list的意思,查看当前文件夹下有哪些文件夹
man 手册 ,解释linux的命令如何使用
cd 更改工作目录的命令 cd /tmp

语法: mkdir 文件夹名字 (文件夹是蓝色的)

语法: mv命令,旧名字 新名字

mv   一脸懵逼    二脸懵逼 
#新名字存在就是把一脸懵逼移动到二脸懵逼文件下,新名字不存在,就是改名字(后边的斜杠加不加都一样)
mv   二脸懵逼/呵呵/   ./   #这是把呵呵从二脸懵逼文件夹下移到当前文件夹下了

查:

语法: ls 查看文件夹内容

ls  呵呵

linux隐藏文件都是以 . 开头

ls -a  显示文件夹所有内容,以及隐藏文件
ls -la  以列表形式,详细输出文件信息

2.vim编辑器

即文本编辑器

字母 i  ,代表插入,编辑
退出编辑模式,按下esc键
输入 :  冒号,进入底线命令模式 ,输入  :wq!
:  w写入
q  退出   !强制的
:wq!  强制写入文本且退出vim
:q!  不写入直接强制退出
:w!  只保存写入,不退出 

工作模式

命令模式 编辑模式 底线命令模式

3.创建linux普通用户

    useradd  用户名  #创建的用户信息会放在 / etc / passwd  这个文件下
    useradd  xiaofeng  
    passwd xiaofeng  # 给肖峰更改密码
    userdel - r  用户名  # 删除用户信息,和家目录

4.查看帮助信息

mkdir --help       
man  mkdir 

5.递归创建文件夹信息

mkdir  -p    /tmp/s19/{男同学,女同学/小魏}   

意思是:创建s19文件夹,底下有男同学,女同学目录,且女同学里面有个小魏

6.查看文本cat

more翻页显示文件内容  
less 翻页显示文件内容 用于查看很大的文本  ,
cat读取文件,是一次性读取,非常占内存,用于读取小文本
Touch  创建普通文件

7.复制文件夹,文件

语法:cp 你要复制的内容 复制之后的文件名

cp   filename   filename.bak

8.查找命令

语法:find 从哪找 -name 你要找的文件名
-name 指定文件名字
-type 指定文件类型 f 文本类型 d文件夹类型

find   /       -name   heeh.txt #  全局搜索 
find   /etc   -name  heeh.txt  #局部搜索

找出/etc/下所有的txt文本 (*代表所有)

find   /etc  -name   "*.txt"

找到/etc/下所有的python文件夹

find  /etc  -type  d    -name  python* 

9.管道符的用法

语法:第一条命令 | 第二条命令

ps -ef  |  grep  python  #查看进程信息 

10.端口信息

Redis  6379         
mysql  3306    
mongodb   27017
80  http web服务器端口
443  https  加密的http协议
8000  django 
22    ssh协议用的端口 
8080  自定义的端口 
netstat -tunlp |grep    3306  #确认mysql是否启动了3306端口
netstat -tunlp |grep   8000   #验证django是否正常启动 

11.过滤字符串命令,过滤文本信息

语法 : grep 参数 你要过滤字符串 你要操作的文件

grep -i  "all"  settings.py 
-i 是忽略大小写        -v 是翻转搜索结果

1)过滤掉settings.py中无用的信息(空白行,注释行)

grep   -v  "^#"   settings.py   |  grep -v "^$"  

2)过滤出file1中以abc结尾的行

grep 'abc$' file1

12.查看,检测文件

head  -5  filename  #看文件的前5行
tail  -5  filename   #看文件的后5行
tail -f   fielname  #实时监测文件信息

13.alias 别名

alias rm="echo 你这个大傻x,求你别用rm了"
unalias  rm   #取消别名 ,重新赋值别名变量也可以

14.远程传输命令scp

语法: scp 你想传输的内容 你想传输到的地方

1)把自己的文件 发送给别人

scp  小姐姐电话.txt  root@192.168.16.41:/tmp/

2)把别人的文件夹拿过来

scp -r root@192.168.16.41:/tmp/s19/  ./

3)把自己的文件夹,发送给别人

scp  -r  你的文件夹    用户名@其他人的服务器ip:路径

15.如何查看文件夹大小du -sh

ls -lh   .   #详细的显示当前文件信息,和大小单位
ll   等于 ls   -l 
du -sh  /var/log/   # -h 显示 kb  mb gb 单位     -s  显示合计大小

16.linux的任务管理器

top命令

17.给文件加锁,解锁

chattr +a   filename  #给文件加锁 让文件不得删除
chattr -a  filename  #减锁
lsattr   filname  #显示文件是否有锁

18.时间同步

date 查看当前系统时间

和阿里云的时间服务器同步
ntpdate -u  ntp.aliyun.com     #和阿里的时间服务器同步     -u  更新 
call :查看日历

19.切换用户 su

Whoami  #先看下当前用户(我是谁)
su - oldboy    #切换用户
logout    ctrl + d  #退出用户登录

20.解压缩源代码

语法: tar -xf Python-3.6.2.tgz
tar 是压缩解压的命令 -x 是解压参数 -f 指定一个压缩文件的名字

1)解压缩命令

-c  打包             
-x  解包
-z  调用gzip命令去压缩文件,节省磁盘空间          
-v  显示打包过程

语法: tar -cvf 打包文件的名字 你要打包的内容

压缩当前的所有内容到alltmp.tar这个文件中,这里不节省磁盘

tar  -cvf  压缩文件的名字.tar   ./*

解压的方式

tar  -xvf  压缩文件的名字.tar

打包文件,并且压缩文件大小的用法,节省磁盘

tar  -zcvf  压缩文件的名字.tar.gz  ./*  

解压缩

tar -zxvf  压缩文件的名字.tar.gz  

21.linux下载软件包的方法有?

wget curl

22.linux如何安装软件?有几种方式?

yum  rpm  源码包

rpm命令的使用方式:

安装软件的命令格式                rpm -ivh filename.rpm     # i表示安装   v显示详细过程  h以进度条显示
升级软件的命令格式                rpm -Uvh filename.rpm
卸载软件的命令格式                rpm -e filename.rpm
查询软件描述信息的命令格式         rpm -qpi filename.rpm
列出软件文件信息的命令格式         rpm -qpl filename.rpm
查询文件属于哪个 RPM 的命令格式   rpm -qf filename

23.linux和windows互传文件的软件 lrzsz

yum  install lrzsz -y    
rz   接受文件(从windows接受文件)
sz   发送文件(发送linux文件给windows)

24.临时提权的命令sudo

1.修改sudoers配置文件,把你想提权的用户写进去

编辑配置文件
vim  /etc/sudoers

2.写入如下信息,定位到那一行
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
kun ALL=(ALL) ALL #允许kun在任何地方,执行任何命令
3.使用sudo命令

sudo 你想执行的命令

25.文件拥有者分三类

属主 users   u    
属组 group  g 
其他人others   o  
-  普通文本   
d  文件夹  
l  软连接
R  可读  w 可写  x 可执行          

修改权限

chmod  权限   文件/文件夹权限 
chmod 777  你好.txt  #赋予文本最高的权限
权限分为:  r 4     w 2     x 1  

更改文件的属主,属组

chown  用户名  要操作的文件  #更改文件属主
chgrp  组名   要操作的文件  #更改文件属组

26.软连接

语法: ln -s 目标文件 快捷方式绝对路径

27.linux的命令提示符

PS1变量
echo $PS1  #显示命令提示符

修改命令提示符
PS1="[\u@\h \w \t]\$"

27.什么是dns(域名解析系统)

其实就是一个超大的网络电话簿 ,dns就是域名解析到ip的一个过程,
linux的dns配置文件如下 :

vim /etc/resolv.conf 

linux解析dns的命令:

nslookup  域名

解析流程:
自上而下的顺序

1.优先查找本地dns缓存
2.查找本地/etc/hosts文件,是否有强制解析
3.如果没有去/etc/resolv.conf指定的dns服务器中查找记录(需联网
4.在dns服务器中找到解析记录后,在本地dns中添加缓存
5.完成一次dns解析

如何给linux添加一个dns服务器记录

echo "nameserver 114.114.114.114" >>  /etc/resolv.conf

28.定时任务

分 时 日 月 周

          • 命令的绝对路径

例:每周一到周五的凌晨1点,清空/tmp目录的所有文件

00  1   *   *   1-5     /usr/bin/rm -rf  /tmp/*  

在晚上8-11点的第3和第15分钟执行

3,15   20-23 *  *  *    命令的绝对路径

29.yum源的工作目录是?

/etc/yum.repos.d/  在这个目录下
所有名字是 *.repo的文件,就会被识别为仓库文件
Yum makecache生成yum缓存

30.tree是什么作用?

以树状图显示文件夹内容

31.系统用户的环境变量配置文件是?

.修改~/.bash_profile(首选),将影响当前用户。在~/.bash_profile文件中添加

系统全局环境变量配置文件是?
/etc/profile

31.防火墙

防火墙作用:保护服务器的流量网络安全,允许/禁止 ip地址段和端口的出入流量

systemctl stop firewalld.service     #关闭防火墙服务
systemctl disable firewalld.service   #禁止防火墙开机自启
iptables -F  #清空防火墙规则

Virtualenv 虚拟环境

含义:virtualenv就是用来为一个应用创建一套“隔离”的Python运行环境。

1.python的虚拟环境,用于解决python环境依赖冲突的问题,仅仅是多个解释器的分身,多个解释器的复制,和操作系统无关
2.python虚拟环境的工具有很多 ,有virtualenv,pipenv ,pyenv
3.virtualenv 可以在系统中建立多个不同并且相互不干扰的虚拟环境。

创建虚拟环境

这个命令,在哪敲,就会在哪生成venv文件夹

virtualenv --no-site-packages --python=python3  venv   #得到独立第三方包的环境,并且指定解释器是python3
#参数解释
 --no-site-packages   #这个参数用于构建,干净的环境,没有任何的第三方包
 --python=python3   #指定虚拟环境的本体,是python的哪一个版本 
 venv 就是一个虚拟环境的文件夹,是虚拟python解释器
source  activate    #source是读取指令,读取这个activate脚本中的内容,激活虚拟环境

virtualenvwrapper

Virtaulenvwrapper是virtualenv的扩展包,用于更方便管理虚拟环境

命令:

mkvirtualenv  虚拟环境的名字  #创建虚拟环境,存放目录是统一管理的
workon  虚拟环境的名字  #可以在任意目录直接激活虚拟环境
rmvirtualenv  虚拟环境的名字  #删除虚拟环境
lsvirtualenv  #列出所有的虚拟环境
cdvirtualenv   #进入虚拟环境的目录
cdsitepackages  #进入虚拟环境的第三方包

virtualenv和virtualenvwrapper区别:

virtualenv每次开启虚拟环境之前要去虚拟环境所在目录下的 bin 目录下 source 一下 activate,

Virtualenvwrapper

1.安装虚拟环境 pip3 install virtualenvwrapper
2.创建并进入虚拟环境 mkvirtualenv env1
3.切换虚拟环境 workon 虚拟环境名

nginx

web服务器(nginx): 接收HTTP请求(例如www.pythonav.cn/xiaocang.jpg)并返回数据
web框架(django,flask): 开发web应用程序,处理接收到的数据

1.静态网站
就是不变化的网页,静态的html,css js等页面,以及jpg gif mp4等静态资源

2.动态网站
指的是,可以与数据库打交道,数据交互的网页,网页内容根据数据库的数据变化

3..常见web服务器有哪些
windows下 IIS服务器
linux下的web服务器 nginx apache lighthttp

4.web服务器
nginx 这样的软件

web服务器它自己 不支持 编程,仅仅是页面返回,nginx + lua
django flask tornado这样的 web逻辑框架 支持 程序员自己写代码,进行逻辑处理

nginx是什么

nginx是web服务器、反向代理服务器、邮件代理服务器,负载均衡等等,支持高并发的一款web服务器

启动nginx

直接输入nginx 指令,默认代表启动,不得再执行第二次

nginx  
nginx -s reload  #平滑重启nginx,不重启nginx,仅仅是重新读取nginx配置文件
nginx -s stop  #停止nginx进程
nginx -t   #检测nginx.conf的语法

给如下代码添加注释

server{ # 一个虚拟主机
listen 80; # 监听的端口,访问的端口80
server_name 192.168.11.11; # 访问的域名192.168.11.11
location / { # 访问的路径 /
root html; # 指定页面的目录,访问/会找到html目录
index index.html # 指定网页,访问/就是访问index.html
}
}

server{ #虚拟主机
listen 8080; #nginx监听端口
server_name 192.168.11.11; #nginx访问域名
location / { #location匹配url
include uwsgi_params; #将uwsgi参数添加进nginx
uwsgi_pass 0.0.0.0:8000; #反向代理转发请求给uwsgi
}
}

解释目录

conf  存放nginx配置文件的
html  存放前端文件目录  ,首页文件就在这里
logs  存放nginx运行日志,错误日志的
sbin  存放nginx执行脚本的

nginx的反向代理功能

1.见过生活中的代理
客户端(请求资源) -> 代理(转发资源) -> 服务端(提供资源)

功能参数: proxy_pass

如何永久添加/opt/python36/的环境变量?

vim /etc/profile
添加PATH = /opt/python36/bin:
source /etc/profile

负载均衡

参数:upstream 地址池

Nginx负载均衡与Nginx代理不同地方在于
Nginx代理仅代理一台服务器,而Nginx负载均衡则是将客户端请求代理转发至一组upstream虚拟服务池
分摊到多个操作单元上进行执行

负载均衡的规则

轮询 ((不做配置,默认轮询))   按时间顺序逐一分配到不同的后端服务器(默认)
Weight(权重(优先级)) 加权轮询,weight值越大,分配到的访问几率越高,最常用的方式,
ip_hash(配置,根据客户端ip哈希分配,不能和weight一起用)      每个请求按访问IP的hash结果分配,这样来自同一IP的固定访问一个后端服务器
url_hash      按照访问URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
least_conn    最少链接数,那个机器链接数少就分发

为什么要用nginx结合uwsgi

1.nginx支持静态文件处理性能更好,django uwsgi,默认不支持静态文件解析 
2.nginx的负载均衡特性,让网站并发性更高
3.并且反向代理特性,用户访问 80,即可访问到8000的应用
4.uwsgi支持多进程的方式,启动django,性能更高
5.nginx转发请求给uwsgi ,应该用 uwsgI_pass  ,实现了uwsgi协议的请求转发

进程管理工具supervisor

其实就是在帮咱们去执行命令

退出虚拟环境,在物理环境下安装

supervisorctl       这是管理命令
supervisord     这个是服务端命令 

启动supervisor服务

supervisord -c /etc/supervisor.conf 

启动所有项目

supervisorctl -c /etc/supervisor.conf 

停止任务

supervisor> stop s19_ob_crm 
s19_ob_crm: stopped

查看任务状态

supervisor> status 
s19_ob_crm                       STOPPED   May 08 12:23 PM

停止所有的任务

supervisor> stop all 
s19_ob_crm                       STOPPED   May 08 12:23 PM

启动所有任务

supervisor> start all 
s19_ob_crm                       RUNNING   May 08 12:23 PM

Redis 缓存数据库

https://www.cnblogs.com/pyyu/p/9467279.html
./redis-cli //redis的客户端
./redis-server //redis的服务端
Redis是一个开源的基于内存的,key-value数据结构的缓存数据库,支持数据持久化,m-s复制

1.数据类型 string set hash list

1)字符串(strings)
语法:set key value

set name  dsb #设置name为key,值是dsb
get  name   #获取name的值
append  追加string
mset   设置多个键值对
mget   获取多个键值对
del  删除key
incr  递增+1
decr  递减-1

2)散列(hashes) 字典key-value
语法 hset key field value

hset 设置散列值
hget  获取散列值
hmset  设置多对散列值
hmget  获取多对散列值
hsetnx   如果散列已经存在,则不设置(防止覆盖key)
hkeys     返回所有keys
hvals     返回所有values
hlen      返回散列包含域(field)的数量
hdel     删除散列指定的域(field)
hexists    判断是否存在

例:

hset news1 content "news content"    #添加一个conntent内容
hget news1  content  #获取news的内容

3)列表(lists)

lpush         从列表左边插
rpush         从列表右边插
lrange          获取一定长度的元素  lrange key  start stop
ltrim               截取一定长度列表
lpop                 删除最左边一个元素
rpop                     删除最右边一个元素
lpushx/rpushx                key存在则添加值,不存在不处理

4)集合(set)无序,去重的数据类型

sadd/srem   添加/删除 元素
sismember   判断是否为set的一个元素
smembers    返回集合所有的成员
sdiff             返回一个集合和其他集合的差异
sinter           返回几个集合的交集
sunion          返回几个集合的并集

5)有序集合(zset)

keys *  查看机器所有的key  
type key  #显示key的类型
expire key  #给key加上过期时间
ttl key  #查看key的剩余 过期时间 -1 是永不过期  -2 是没有这个key
persist    # 取消key的过期时间   -1表示key存在,没有过期时间
exists key     #判断key存在    存在返回1    否则0
dbsize         #计算key的数量

2.发布订阅

发布 PUBLISH 订阅 SUBSCRIBE

3.redis 数据持久化

背景:进程被杀死,服务器断电,内存中的数据都会被释放,数据丢失,如果redis没有持久化,数据丢失

RDB

基于快照的持久化,速度更快,一般用作备份,主从复制也是依赖于rdb持久化功能
通过save指令可以手动触发 持久化
也可以配置时间触发持久化
save  900 1    #900秒  1个修改类的操作

aof:

以追加的方式记录redis操作日志的文件。
可以最大程度的保证redis数据安全,类似于mysql的binlog

AOF
优点:数据安全,不怕数据损坏
缺点:,占磁盘,性能损耗高,数据恢复慢
Rdb:
定期保存数据快照 数据可能会丢失,但是持久化速度最快

怎么在不重启的情况下将rdb切换成aof

CONFIG set appendonly yes
CONFIG SET save "" 

4.高可用之哨兵功能 redis-sentinel

redis哨兵是监控redis主从服务,不存储数据的,
作用是用于自动切换reidis服务主从关系,即当主库服务停止后,会将其中一个从库变为主库

5.redis-cluster集群搭建

redis的集群还未分配 槽位 slots ,我们得下载ruby的脚本,创建这个16384个槽位分配

Docker

docker是容器软件,应用于快速构建应用

1.docker的三大生命周期

容器 镜像 .仓库
仓库有dockerhub 共有仓库,docker registory私有仓库,存放镜像的地方

2.镜像:

增删查

docker search 镜像名字  # 搜索镜像名
docker search hello-world  #搜索docker镜像
docker pull 镜像名  #下载docker镜像 
docker image ls  #查看当前机器的docker镜像
docker images      #同上,查看本机的所有docker镜像
docker rmi  镜像名/镜像id   #删除docker镜像 
docker run  -d后台运行   镜像名 
            -p指定端口映射  
            -P 随机端口映射 
            -it (交互式的命令操作)  
            -v 数据库挂载(宿主机和容器空间的映射 )   

docker save  #导出镜像
docker load  #导入镜像
docker start   #启停容器
docker stop   
docker login   #登录dockerhub
docker commit  #提交本地容器记录,保存为一个新的镜像
docker build .     #打包构建docker镜像
docker run --name 容器的名字    运行的镜像名

语法是: docker tag 仓库名 yuchao163/仓库名

docker tag 5e0 yuchao163/s19-centos-flask  #.修改镜像的名字
 
#推送docker image到dockerhub
docker push yuchao163/centps-cmd-exec:latest

#删除本地镜像,测试下载pull 镜像文件
docker pull yuchao163/centos-entrypoint-exec

容器:

增删改查

docker run  镜像名字/镜像id     #运行docker镜像,生成容器记录
docker run  不存在的镜像名   #会先docker pull下载这个镜像,然后在自动运行 

docker container ls    #列出当前机器的所有容器(正在运行的容器,正在 运行的docker进程 )
docker  ps   #查看docker进程,docker容器记录的(正在运行的)
docker ps -a  #查看docker所有的进程,以及挂掉的进程
Docker ps -aq  #列出所有id

运行一次镜像,就会生成一个容器记录
docker容器必须有正在运行的进程,否则容器就会挂掉

docker  rm  容器id/容器名   #删除容器记录(只能删除挂掉的容器记录)
docker rm `docker ps -aq`   #一次性删除所有docker容器记录,只能删除挂掉的记录 
   
docker logs  容器id    #查看容器内的日志信息 
docker logs -f  容器id  #实时查看容器的日志 
docker exec -it  容器id   /bin/bash   #用exec指令,进入到容器系统内
    -i  交互式的shell命令方式
    -t  开启一个终端,去运行
docker exec  -it  容器id   /bin/bash  # 进入一个已经在运行的docker容器中
docker run -it ubuntu  /bin/bash      #交互式的运行ubuntu容器,且进入容器空间内

cat /etc/os-release #查看版本信息

退出docker容器空间,然后提交这个容器,生成一个新的镜像文件

语法:docker commit 你想要提交的容器id 你想创建的镜像名

运行一个web内容的docker容器

docker run -d -P training/webapp python app.py
-d  后台运行
-P  大写的字母p参数,意思是随机映射一个端口

在后台运行docker容器

docker run -d centos /bin/sh -c "while true;do echo hello centos; sleep 1;done"          
#每秒打印一次hello centos 
-d daemonize 后台运行的意思 
centos  指定一个镜像去运行
/bin/sh   指定centos的解释器
-c  指定一段shell语法

指定端口映射关系

docker run -d -p 8888:5000  training/webapp python app.py
-p  宿主机端口:容器内的端口 

由于重启了docker,所有的容器都挂掉了,还得重新再运行一下docker私有仓库

Docker run --privileged=true -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry
-d  后台运行
-p 端口映射
-v 数据卷挂载
 --privileged=true    #设置特权运行的容器

dockerfile的学习

dockerfile作用是自定义一个docker镜像
每一个应用程序运行,必须得有一个系统作为载体
定义以哪一个基础镜像去运行docker容器

FROM scratch #制作base image 基础镜像,尽量使用官方的image作为base image
FROM centos #使用base image
FROM ubuntu:14.04 #带有tag的base image

LABEL version=“1.0” #容器元信息,帮助信息,Metadata,类似于代码注释
LABEL maintainer=“yc_uuu@163.com"   #告诉别人,这个dockerfile是谁写的

#RUN 万能的指令,去执行你输入的命令 
#对于复杂的RUN命令,避免无用的分层,多条命令用反斜线换行,合成一条命令!
RUN yum update && yum install -y vim \
Python-dev #反斜线换行
RUN /bin/bash -c "source $HOME/.bashrc;echo $HOME”

WORKDIR /root #相当于linux的cd命令,改变目录,尽量使用绝对路径!!!不要用RUN cd
WORKDIR /test #如果没有就自动创建
WORKDIR demo #再进入demo文件夹
RUN pwd     #打印结果应该是/test/demo
ADD 和 COPY

ADD指令用于把物理机上的文件,添加到容器空间内,并且还有解压缩的作用
COPY指令的作用,是吧物理机的文件,拷贝到容器空间内,仅仅一个作用
ADD与COPY

  • 优先使用COPY命令
  • ADD除了COPY功能还有解压功能
ENV

环境变量,尽可能使用ENV增加可维护性

rabbitmq

含义:rabbitmq是一个消息代理,他接收,存储和转发消息(邮局)

1.对消息队列进行授权,可以读写

rabbitmqctl set_permissions -p "/" heiheihei  ".*" ".*" ".*"

2..设置用户为管理员权限

rabbitmqctl set_user_tags heiheihei administrator

3..创建rabbitmq的登录账号密码

rabbitmqctl add_user heiheihei 123
(可以 netstat -tunlp 看一下端口 15672,在地址栏输入地址:15672,可以访问了)

作用:

1)程序解耦
2)数据冗余,例如rabbitmq的ack机制,消息确认机制
3)削峰能力
4)可恢复性,就算系统中部分组件挂掉,消息在队列也不丢失,待组件恢复后继续处理消息。
5)异步通信,如发红包,短信等流程丢入队列,可以优先级很低的去处理

ACK 机制

no_ack=True
不确认机制,不需要给服务端一个确认回复,服务端直接标记消息清除,从队列中删除

no_ack=Flase
确认机制,你消费走了数据,还得给服务端一个确认回复,让服务端可以正确的标记消息清除,保证消息不丢失

队列的持久化

背景:默认队列不支持持久化,rabbitmq重启之后,所有队列丢失
实现rabbitmq持久化条件
delivery_mode=2 #实现消息的持久化,重启后,队列和消息都不丢失
使用durable=True声明queue是持久化

salt 命令

salt-key -L #列出所有主机的秘钥信息
salt-key -a  秘钥id  #接受一个秘钥id
#常用参数
-L  #查看KEY状态
-A  #允许所有
-D  #删除所有
-a  #认证指定的key
-d  #删除指定的key
-r  #注销掉指定key(该状态为未被认证)

RPC远程过程调用

将一个函数运行在远程计算机上并且等待获取那里的结果,这个称作远程过程调用(Remote Procedure Call)或者 RPC。 RPC是一个计算机通信协议。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!