计算机必须有的组成部分: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)异步通信,如发红包,短信等流程丢入队列,可以优先级很低的去处理
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是一个计算机通信协议。
来源:https://www.cnblogs.com/xm-179987734/p/12360809.html