# linux下搭建javaweb生产环境 **Repository Path**: StinkStone/linux ## Basic Information - **Project Name**: linux下搭建javaweb生产环境 - **Description**: 1) linux基础 2) linux下javaweb生产环境搭建 3) 本仓库作为软件实施linux课间 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-08-14 - **Last Updated**: 2022-05-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README --- --- # linux下搭建javaweb生产环境 #### linux概述 - 操作系统本质上也是一款软件,它位于所有软件的最底层,计算机安装完操作系统之后才能安装其它软件 - 场景操作系统: windows/mac/unix/linux/ios/安卓/鸿蒙(还没正式投入线上) - linux操作系统内核由芬兰人李纳斯大学期间研发,后来被很多开源爱好者补充完善逐步成型 - 内核:操作系统最核心的部分。发行版:对内核进行功能扩展,研发出的不同版本 - linux具有很多发行版:Ubuntu(乌班图 主攻桌面版)/Centos/RedHat/Fedora/SUSE/Debian/麒麟等等... - linux和windows系统的区别 - linux 开源/免费 windows 闭源/收费 - linux 受众为开发/运维等从事计算机领域的人员 windows受众多数为普通人 - linux往往应用于软件产品测试/上线的领域 windows往往应用于电脑日常时使用 - linux提倡终端窗口操作 windows致力于桌面研发 - 应用 - 企业服务器 - 项目发布服务器绝大多数都是基于linux的 - https://www.netcraft.com - 嵌入式应用 - linux下载站 - http://linuxdown.net/download/ #### 虚拟化技术 ​ 将一种形式的资源抽象成另一种形式的技术 - ​ 在计算机中虚拟化是一种资源管理的技术,将计算机的实体资源,比如内存/网卡/cpu等, 进行抽象、转换之后呈现出来,打破实体结构之间不可切割的状态,提供一种比原本更好的组态, 使用户可以更加方便的利用这些资源。 #### Vmware虚拟机 ​ 虚拟机是一款基于虚拟化技术的软件。可以将计算机的硬件资源进行抽象,模拟真实计算机的硬件环境, 通过虚拟机可以按照操作系统。 ​ https://gitee.com/xu_chuang/linux/tree/011e23899aff8753b156eb3c39c4baba2d401e99/3.%E8%BD%AF%E4%BB%B6%E5%AE%89%E8%A3%85%E6%96%87%E6%A1%A3 #### 虚拟机下安装centos6.7 ​ https://gitee.com/xu_chuang/linux/tree/011e23899aff8753b156eb3c39c4baba2d401e99/3.%E8%BD%AF%E4%BB%B6%E5%AE%89%E8%A3%85%E6%96%87%E6%A1%A3 #### 安全终端模拟软件 ​ 所谓终端模拟软件就是基于ssh安全传输协议的、用于连接远程服务器的客户端软件。 通过安全终端模拟软件,可以远程操作服务器,并且可以进行文件传输。 #### security crt ​ https://gitee.com/xu_chuang/linux/tree/011e23899aff8753b156eb3c39c4baba2d401e99/1.CRT #### 目录结构 - /bin - 存放一些二进制的可执行文件 - 一些常用命令都放在这个目录下,比如 cd/ls/pwd/cat/more等等 - /root - 管理员用户(超级用户)的根目录 - /home - 用于存放所有用户文件的根目录 - 是普通用户的基地 普通用户登录之后的主目录都在home目录下 - /etc - 存放操作系统的管理和配置文件 - 修改主机名/ip等操作都需要在etc下的配置文件中进行操作 - /usr - 操作系统的应用程序 - /var - 日志文件 - /lost+found - 非正常关机时的遗留文件 - /boot - 系统引导时所需的各种文件 - /mnt - 其它文件系统的挂载点 - /lib - 应用程序运行所需的共享库 #### linux常用命令 - pwd 查看当前目录 - cd 切换目录 - cd abc 切换到当前目录下的abc目录 - cd /root/xx 切换到root目录下的xx目录 - cd .. 返回上级目录 - cd ~ 切换到当前用户的主目录 - cd / 切换到根目录 - ifconfig 查看ip - ls 查看目录下内容 - ls 查看当前目录下内容 - ls -a 查看当前目录下内容(包括隐藏文件) - ls -l 查看当前目录下内容详细信息 - ls -a -l 《==》ll 查看详细信息(包含隐藏文件) - clear 清屏 - date 查看日期 - cal 查看日历 - mkdir 创建文件夹 - mkdir 文件夹名字 - mkdir -p 多级目录 - rmdir 删除文件夹 - rmdir 文件夹名字 - touch 创建文件 - touch 文件名字 - rm 删除文件/文件夹 - rm 文件名字 - rm 文件夹名字 - rm -rf 文件名字 - rm -rf 文件夹名字 - rm -rf / 自杀 - vi / vim 编辑器 - vim是vi编辑的升级版 在vi的基础上添加了一些额外功能 - 根据扩展名判断语言 关键字变色 - 正则表达式 - 多文件编辑、块复制等等 - vi 文件名字 进入一般模式 - esc + : 命令行模式 - q 离开 - wq 保存并离开 - q!强制离开 - w 保存 不离开 - i 进入编辑模式 - locale - 查看操作系统字符集 - 查看文件内容 - cat - cat 文件 查看文件所有内容 - more - more 文件 默认显示第一屏 - 回车 以行为单位往下翻 - 空格 以页为单位往下翻 - ctrl+c 离开 - less - less 文件 可以通过 down 和 up 上下翻页 - tail - tail 文件 只显示文件最后9行内容 - tail -n 行数 文件 显示最后n行 - tail -f xxx 动态显示内容 - cp 复制 - cp 文件 目录 将文件复制到指定目录下 - cp 文件 目录/文件名 复制并改名字 - cp -r 文件目录 文件目录 复制文件夹 - mv 移动(剪切) - mv 文件 目录 剪切 - mv 文件 目录/文件 剪切+重命名 - mv 文件 文件 可以用于重命名 - tar 打包/压缩/解压/解压缩 - 打包/解压 - tar -cvf xxx.tar 位置 /文件名 打包 - tar -zcvf xxx.tar.gz 位置/文件名 打包并压缩 - 解压/解压缩 - tar -xvf xxx.tar -C ./目录 解压 - tar -zxvf xxx.tar 解压缩 - tar 包 tar.gz 压缩包 - ps 查看进程 - ps 查看活动的进程 - ps -ef 查看所有进程 - kill 杀死进程 - kill -pid 杀死进程 (无法杀死子进程) - kill -9 pid 强制停止进程 - kill -15 pid 正常结束程序 - kill -l 查看所有信息编号 - grep 字符串搜素 - grep 搜素的内容 搜素的文件 - find 搜索 - find 目录 -name "java*" - 其中星号是通配符 - | 管道命令 - 命令1 | 命令2 用于连接两个命令 将命令1连接到命令2上 - 命令1的输出往往 会作为 命令2的输入 - ps -ef | grep java 查看带java的进程 - 目录 | grep hello 查看目录下带Hello的内容 - cat xxx | grep Hello 查看文件中带Hello的内容 - service 用于管理系统服务的命令 - 常用参数 - start 启动 - stop 关闭 - restart 重启 - status 查看状态 - iptables 防火墙操作 - service iptables 参数 可以对防火墙启动/关闭/重启/查看状态 - network 网络 - service --status-all 查看所有后台服务 - who 查看所有用户信息 - sudo 操作用户 - sudo adduser 用户名 创建用户 - sudo passwd 用户名 添加密码/修改密码 - sudo userdel 用户名 删除用户 - su切换用户 - su 默认切换到管理员用户 - su 用户名 - 管理员用户切换到普通用户 不用输入密码 - 普通用户切换到管理员用户 需要输入密码 - chmod命令 更改用户权限 - 通过ls -l 查看文件详情信息 - 第一个字符表示文件类型 其余9个表示文件权限操作 - 文件类型 - -表示普通文件 - d表示文件夹 - l 链接文件(快捷方式) - 权限操作 前面三个当前用户的权限 中间三个同组中其它用户的权限 后面三个其他组的用户权限 - 字母含义 - r 可读 read - w可写 write - x 可执行 excute - chmod修改权限 - chmod u=rwx,o=r 文件名 - chmod 777 文件名 - read 4 - write 2 - excute 1 - yum命令 - yum list xxx 模糊已经按照和可以按照的软件列表 - yum install xxx 按照 - yum install -y xxx 按照并一路放行 - 修改主机名 - hostname 查看主机名 - hostname xxx 修改主机名 (临时修改 重启后无效) - /etc/sysconfig/ 文件中修改主机名 修改后可持久化保存 - 修改ip - ifconfig 查看ip - ifconfig eth0 xxx.xxx.xxx.xxx 修改ip (临时修改 重启后无效) - eth0 表示 以太网网卡 - 以太网 局域网 - 修改之后的ip为静态ip 内网可以访问 外网会出问题 - 持久化修改位置 - /etc/sysconfig/network-scripts/ifcfg-eth0 - IPADDR IP地址 - NETMASK 子网掩码地址 - 域名映射 - 作用将ip和域名进行绑定 域名解析服务器会将域名解析成指定ip进行访问 - window系统下 - C:\Windows\System32\drivers\etc 下的hosts文件 - 127.0.0.1 = xxx xxx即代表127.0.0.1 - linux下 - /etc/hosts - 通过vim编辑器配置 xxx.xxx.xxx.xxx = xx - setup - 启动系统管理的图形界面 - 文件颜色 - 白色 普通文件 - 红色 压缩包 - 蓝色 文件夹 - 绿色 可执行文件 - 浅蓝色 链接文件(快捷方式) - 灰色 其它文件 #### 中文乱码 ​ linux系统中文乱码的原因:windows系统默认字符集 gbk linux默认字符集utf8 - yum groupinstall chinese-support 安装中文字符集 - vim /etc/sysconfig/i18n 修改字符编码将 - 编码改为 zh_CN - 终端模拟工具中设置字符编码为utf-8 #### 文件传输 - ftp file transfer protocol 文件传输协议 - 不同设备之间进行文件传输需要使用的协议 - 进行文件传输的工具都是基于ftp协议的 - sftp 基于ftp和ssh的安全文件传输协议 进行加密传输但是效率要比ftp低一些 - fileZilla - 使用 : windows系统下下载安装即可 具有图形界面 - 本地站点和远程站点的设置 图形界面点点点 - 传输文件 拖拽即可 - linux下常用软件安装目录 /usr/local - lrzsz工具 linux系统下yum安装 - linux系统下使用yum命令安装 - yum install lrzsz - 在安装终端模拟工具中配置上传和下载目录 - 上传命令 rz - 下载命令 sz - 低版本centos yum问题处理 - https://blog.csdn.net/weixin_44343282/article/details/113544092 - 上传的时候默认上传到执行命令时所在目录中 - sftp - alt+p 在crt 下 打开sftp窗口 - put ... 上传 默认上传到用户主目录 - get ... 下载 默认下载到document下 ​ #### linux下软件安装方式 - ​ 二进制发布包的方式(解压版) - 软件厂家针对不同的操作系统对软件进行编译/打包/发布 - 优点 : 解压即可使用 有时需要修改一些基本配置 - 缺点 : 不同平台之间 不兼容 比如 windows系统下的 zip文件 拿到 linux下不可用 - rmp包 - 软件已经按照redhad下的rmp包管理规范进行打包/发布 - 按照rmp规范进行解压即可使用 - 弊端 : rmp包之间存在依赖关系,解压的rpm包缺少所以来的子rpm包时,会造成困扰。 - yum命令 - 通过yum命令从远程站点下载rpm包并且解压安装 - 通过yum命令下载的rpm包安装过程中会自动解决依赖问题 - 源码编译安装 - 获取开源软件的源码 - 自己对软件进行编译使用 - FAQ - 方式1和方式3的安装方式比较常见 - 进行项目分布式部署的时候,可以通过第四中方式引入团队内部开发的其它模块内容 #### javaweb 生产环境搭建 ##### jdk - 查看linux操作系统版本 - gitconf LONG_BIT - 将二进制包上传到服务器 - 卸载linux中自带的jdk - 查看 rpm -qa | grep java - 卸载 rpm -e --nodeps xxx - 解压jdk的二进制包 - 建议安装位置 /usr/local - 配置环境变量 - 位置 - /etc/profile - 配置内容 - 第一版(和windows下环境变量配置类似 暂未发现问题) - JAVA_HOME=jdk解压目录 - PATH=jdk解压目录下bin文件加目录:$PATH - CLASSPATH=. - export JAVA_HOME PATH CLASSPATH - 第二版 ``` - #set java environment - JAVA_HOME=/usr/local/jdk/jdk1.7.0_71 - CLASSPATH=.:$JAVA_HOME/lib.tools.jar - PATH=$JAVA_HOME/bin:$PATH - export JAVA_HOME CLASSPATH PATH ``` - 冒号 用于分隔多个环境变量 - export 都出环境变量 - 井号 注释 - =两边不能出现空格 - source /etc/profile 让修改的配置立即生效 - 测试 - java -version 查看版本 - 编写 java程序 java/javac 进行编译运行 ##### tomcat - 上传 - 解压 - bin/start.sh 启动 - 访问测试 - bin/shutdown.sh 关闭 - ./bin/startup.sh - ./startup.sh - 执行shell脚本 需要指定具体位置 (当前目录/上级目录/绝对路径 等等均可) ##### mysql - 上传mysql到linux服务器 - 卸载已经存在的mysql - 解压 注意是压缩包 还是 未压缩包 - 解压后会出现很多rpm包 - 核心rpm包为 client 和 server - 安装rpm包 - rpm -ivh rpm包 安装 - 服务端安装之后会产生一个随机密码 密码位置会有提示 - 服务端和客户端都要安装 - 启动mysql服务 - service mysql start - 查看mysql版本 - mysql --version - 登录mysql - mysql -uroot -p随机密码 - 操作数据库的时候会报错 提示在第一次登录的时候需要设置密码 - set password = password('自定义密码') - 上传sql脚本 - linux下执行sql脚本 - 登录mysql - 使用一个db - 执行 source /xxx/xxx/xxx.sql 即可运行sql脚本 - 远程连接mysql - 在linux下登录mysql 执行以下命令 - grant all privileges on *.* to 'root' @'%' identified by 'root'; - flush privileges; - 关闭防火墙 - service iptables stop - 防火墙对指定端口放行 - iptables -A INPUT -p tcp --dport 端口号 -j ACCEPT (尚未验证) ##### redis - 官方只提供源码包安装 - redis由c语言开发,linux下安装redis需要安装c语言编译环境 - yum install gcc-c++ - 下载redis - wget http://download.redis.io/releases/redis-3.0.4.tar.gz - 解压 - tar -xzvf redis-3.0.4.tar.gz - 编译 - 切换到redis解压后的目录下 - 执行make命令 - 安装 - make PREFIX=/usr/local/redis install - 配置redis - 复制配置文件到/usr/local/redis/bin目录 - cd redis-3.0.4 - cp redis.conf /usr/local/redis/bin - 启动redis - 进入redis安装目录下的bin目录 - cd /usr/local/redis/bin - 启动服务端 - ./redis-server redis.conf - 启动客户端(在克隆的新窗口中启动) - ./redis-cli ##### 项目发布(上线) - 购买远程服务器 通过安全终端模拟软件搭建生产环境 - 打war包 丢到tomcat下的webapps中 - 启动服务器 - 购买域名 进行域名绑定 - 项目名问题 - https://www.cnblogs.com/huangchunbao/p/10871465.html - 方案1 : 直接将项目名修改成root - 方案2 : tomcat>conf>server.xml>Host中添加 Context标签 - - 建议端口改为80 浏览器发送http请求访问web应用的时候 默认访问80端口 #### Nginx ##### 概述 - ​ nginx是一款优秀的/开源的/高性能的/轻量级的http和反向代理服务器 - http服务器 - 一般指网站服务器,即可以处理http请求的服务器 - apache tomcat就是一款http服务器 - nginx作为http服务器只能部署静态资源 - 反向代理服务器 - 对服务端进行代理 - 正向代理:对客户的进行代理 - nginx是一款轻量级(简单易用/代码量少/依赖少)服务器,占用内存低,并发量高。 - tomcat默认并发量150 - tomcat并发量可以进行修改 - 实际并发量收计算机硬件影响 - 每一个http请求都是一个独立的线程 - jvm没开启一个线程需要占用1M的内空间 - 同时cpu的线程数也可能称为并发量的短板 - nginx官方:测试最大并发量50000(五万) - 应用场景 - http服务器 - nginx作为http服务器,只能做静态资源服务器 - 用来部署静态资源 作为静态资源服务器 - 虚拟主机 - 一台服务器虚拟出多个网站 - 反向代理 - 服务器集群 - 代理多个真正处理请求的服务器 - 负载均衡 - 均衡真正处理请求的服务器的压力 - nginx由俄罗斯人伊戈尔.西索夫研发 - nginx是C语言开发的 ##### 下载安装nginx - nginx官网 - http://nginx.org/ - linux下安装nginx - 上传tar包到linux - linux下安装c语言编译环境 - yum install gcc-c++ - 安装第三方开发包 - nginx的http模块使用pcre解析正则表达式 - yum install -y pcre pcre-devel - nginx使用zlib对http包信息进行gzip - yum install -y zlib zlib-devel - openssl 让nginx提供对https协议的支持 - yum install -y openssl openssl-devel - 解压nginx的tar包 - 使用config命令创建makefile文件 - makefile 是一种配置文件 定义了进行编译的规则,当目录中文件比较多的时候,makefile来觉得编译的顺序及是否需要重新编译,makefile文件内容类似shell脚本,是提前指定好的编译规则。 - 进入解压后的nginx文件夹 - ``` ./configure \ --prefix=/usr/local/nginx \ --pid-path=/var/run/nginx/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-http_gzip_static_module \ --http-client-body-temp-path=/var/temp/nginx/client \ --http-proxy-temp-path=/var/temp/nginx/proxy \ --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \ --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \ --http-scgi-temp-path=/var/temp/nginx/scgi ``` - 编译 - make - 安装 - make install - 启动 - sbin目录下 - ./niginx - 启动后查看进程 ps aux|grep nginx - 关闭防火墙即可远程访问 - 默认端口80 - 关闭和重启 - ./nginx -s stop 关闭 - ./nginx -s quit 关闭 - ./nginx -s reload 重启 ##### 静态资源服务器 - 方式1 - 将静态资源放到html目录下 - 入口文件名字改成index.html或者index.htm - 方式2 - 修改conf目录下nginx.conf文件 - 建议通过文本编辑器远程访问 比如 notepad++ / edit plus 等 - edit plus 自带相关插件 - notepad++ 需要下载 ftp插件 - server>location / - root 静态资源所在目录 - index 入口文件 可以配置多个入口文件 使用空格隔开 ##### 虚拟主机 - 所谓虚拟主机,也叫虚拟服务器,通过nginx服务器可以虚拟出多台主机.服务器 ​ ``` server { # 虚拟主机配置 listen 80; # 端口 server_name localhost; # 域名映射 location / { # 首页 root ssmcast; #目录 index pages/admin-homePage.html; #文件 } #以下是页面配置 了解即可 可删除 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } ``` - 端口绑定 - 多个server对象 - 每个server对象端口不同 - 根据端口访问不同的主机(服务器) - 域名绑定 - 多个server对象 - 端口相同 - 不同的server对象 通过server_name 映射不同域名 - 根据域名进行访问 不同域名访问不同主机 - 域名和dns服务器 - 域名 - 所谓域名就是平时说的网址 http协议 www 协议 剩余部分就是域名 - ytyouye.com - baidu.com - taobao.com - 一个域名对应一个ip - 一个ip可以绑定多个域名 - 域名级别 - 顶级域名 - ytyouye.com - 国家顶级域名 - 根据国家代码/缩写分配的顶级域名 - 中国 cn 美国 us 小日本 jp - 国际顶级域名 - 根据行业/行为划分的域名 - com 公司 edu 教育 org 组织 tech科技 等等 - 二级域名 - 顶级域名下的域名 - xx.ytyouye.com - 三级域名 - 二级域名下的域名 - yy.xx.ytyouye.com - dns - dns 也叫做域名解析服务器 - 浏览器地址栏根据域名访问网站的时候,会被计算机的dns服务器拦截 - dns服务器会对域名进行解析,提取对应的ip地址 - 最后根据ip地址访问互联网上的某一台服务器 - 服务器对请求做出响应,响应回到访问者的浏览器 ##### 反向代理 - 反向代理? - 代理(正向代理) - 代理服务端 - 客户端---代理---服务端 - 局域网搭建正向代理服务器 - https://blog.csdn.net/weixin_43543882/article/details/107309163 - 反向代理 - 使用代理服务器(nginx)代理应用服务器 - 客户端---反向代理---服务端 - 好处 - 提高项目的并发量 - 提高安全级别 - 服务端和代理服务器之间增加防火墙 - 将服务端之间设置为内网 - 配置 - nginx>conf>nginx.conf - ```conf upstream xxx{ server ip:端口; #配置被代理服务器 } server { # 虚拟主机配置 listen 80; # 端口 server_name www.nginx.index.com; # 域名映射 location / { # 首页 #root html; #默认访问的目录 proxy_path http://xxx; index index.html; #默认访问资源 } #以下是页面配置 了解即可 可删除 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } ``` ##### 服务器集群/负载均衡 - 准备多个tomcat服务器 - 条件允许 可以开多台虚拟机,不同虚拟机中都添加不同的tomcat服务器 - 如果多个tomcat服务器在同一台计算机(虚拟机) 要注意修改端口 - 注意点 server.xml下端口都要修改 避免的冲突 - 配置nginx>conf>nginx.conf - ``` upstream admin{ server 192.168.184.130:8082 weight=5; server 192.168.184.130:8083 weight=2; server 192.168.184.130:8084 weight=3; } server { # 虚拟主机配置 listen 80; # 端口 server_name www.ytcz.com; # 域名映射 location / { # 首页 #root ssmcast; #目录 proxy_pass http://admin; #index pages/admin-homePage.html; #文件 } #以下是页面配置 了解即可 可删除 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } ``` ##### windows下使用nginx - 了解 - 注意别别放在中文目录向下 否则可能启动失败 - 其余操作和linux下一致 ##### nginx解决cors问题 - web应用被攻击 - xss 跨站脚本攻击 - csrf 跨站请求伪造 - 浏览器同源策略 - 协议 - ip - 端口 - cors Cross-Origin Resource Sharing - 同源策略导致 不满足同源策略的两个不同源的资源不能互相访问(跨域问题) - cors跨域资源共享 解决跨域问问题 - nginx实现cors ##### nginx集群思考 - nginx挂了 所有的tomcat都挂了 高可用? - 被代理服务器域对象共享问题 - 跨域问题 - 集成权限框架的应用集群问题思考 - Spring Session 引入 #### Shell - shell概述 - shell是覆盖在操作系统内核上的一套应用程序,它是连接用户和操作系统内核的桥梁 - shell能做什么 - linux下用户操作linux的终端界面属于shell - linux下用户编写的命令属于shell - 比如 ls cd pwd 等等 - 命令会被shell解释成二进制传递给内核去运行 - shell本身也是一种编程语言 - shell脚本 - 由shell命令组成的可执行文件 - 将一些shell命令整合到一个文件中,用于实现某种业务逻辑,不用编译,属于解释运行的代码。 - shell是使用c语言开发的 - 变量定义 - 变量名=变量值 - 等号两边不能存在空格 - shell 是一种弱类型的编程语言 不需要变量类型 - 变量可以再次赋值 并且可以赋值为另外类型的数据 - 输出 - 输出数据 - echo $变量名 - echo ${变量名} - 输出变量 - echo 变量名 - 运行方式 - 方式1 - 命令行定义变量/输出语句 - 方式2 - 定义 xxx.sh文件 - vim 文件 - 编写shell 语法 保存 退出 vim - 修改可执行权限 - 执行shell命令 - 编写一个脚本 - 1)在当前目录下创建test文件夹 - 2) test 文件夹中创建 一个HelloWorld.java - 3)编译HelloWorld.java #### XShell - xshell免费,security收费 - xshell界面更加优化 - 使用方式一样 #### Docker - 环境配置的问题 - 环境? - 操作系统型号/版本 - 软件的版本 - 依赖库的版本 - 不同软件搭配使用的兼容性问题 - 开发者的运行环境/测试人员的运行环境/实施运维人员的运行环境 需要统一 - 软件产品线下运行所需环境 和 线上运行所需环境 要统一 - 环境搭建比较繁琐/占用很多事件/环境有差异软件产品无法正常运行 - 虚拟机的问题 - 占用大量硬件资源 只要开机 分配给虚拟机的资源就会被牢牢占据 - 操作繁琐 安装/配置/引导/登录 虚拟机中安装的就是一个模拟真实环境的操作系统 - 启动耗时 - linux容器 - Linux Containers (LXC) - linux容器对进程进行隔离 - linux容器不是一个完整的操作系统,而是对进程进行隔离操作,相当于在进程外面套了已成壳 - 进程内部调用的都是虚拟化的硬件资源,从而和底层操作系统进行隔离 - 好处 - 消耗资源少 - 操作简单 - 启动快/体积小 - docker是什么 - docker 官网 https://docs.docker.com/ - docker是一个基于虚拟化技术的/轻量级的应用容器。 - docker可以打包/发布/部署任何应用 - 开发者都可以通过docker build创建镜像,通过docker push上传镜像,用户通过docker pull下载镜像,用docker run运行应用。用户不需要再去关心如何搭建环境,如何安装,如何解决不同发行版的库冲突——而且通常不会需要消耗更多的硬件资源,不会明显降低性能 - docker是对lxc的封装,并对外提供了简单易用的接口。 - 使用docker,可以将应用程序及其所需依赖打包一个文件中,运行改文件就会启动一个linux容器,应用程序在虚拟容器中运行,和在物理机中运行效果完全一样。 - 应用场景 - 提供一次性的环境 - 进行软件测试、产品上线的时候可以通过docker提供所需环境 - 组建立微服务架构 - 通过多个容器,一个容器跑一个服务,通过一台计算机就可以模拟微服务架构 - 提供弹性的云服务 - docker可以随时开关 方便使用 - docker组件 - docker架构 - docker是基于C/S架构的程序 - 多个客户端可以访问同一个服务端 - 服务端(docker主机)组成 - 守护进程(宿主机) - 客户端--》(守护进程(宿主机)---》docker容器) ​ --------------------- ​ docker主机 - docker容器 - 虚拟化容器,作为应用程序的载体。 - 镜像和容器 - 镜像是容器的模板 - 可以使用镜像创建多个容器 - 理解 : 镜像是类 容器是对象 - registry 注册中心 - 存放镜像的远程库 - 公共/私有 - 公共:docker hub -》 https://hub.docker.com - 私有: 自己搭建注册中心 - 安装 - 对linux要求 - ubuntu/centos7.x - 挂载centos7镜像 - centos7 - 查看ip - ip addr - yum包更新到最新 - ``` sudo yum update ``` - 安装所需软件包 - ``` sudo yum install -y yum-utils device-mapper-persistent-data lvm2 ``` - 设置yum源为阿里云 - ``` sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ``` - 安装docker - 社区版(ce 免费) - ``` sudo yum install docker-ce ``` - 验证安装 - 查看docker版本 ``` docker -v ``` - 设置ustc镜像(国内镜像站点 - ``` vi /etc/docker/daemon.json  ``` - ``` { "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] } ``` - 启动与关闭 - systemctl start docker 启动 - sustemctl status docker 查看状态 - systemctl stop docker 关闭 - systemctl restart docker 重启 - systemctl enable docker 设置开机启动 - docker info 查看docker信息 - docker --help 查看docke命令 - docker命令 - 镜像命令 - docker images 查看镜像 - repository 镜像名称 - tag 标签(往往将镜像版本作为标签) - image id 镜像编号(唯一) - created 创建时间 - size 镜像大小 - 安装完docker之后 镜像库是空的 - 需要下载安装镜像 - docker search xxx 搜索镜像 - name 镜像名字 - description 镜像描述 - stars 镜像热度 - official 是否是官方镜像 - automated 是否是自动构建的镜像 - docker pull 镜像名字 拉取镜像 - 所谓拉取镜像 就是下载镜像 - docker rmi 镜像名称/镜像id 删除镜像 - ``` - - - docker rmi `docker img -q` ``` 容器命令 - 查看容器 - docker ps - 查看正在运行的容器 - 运行中容器 ? - 镜像是容器的模板 - 使用镜像可以管理容器(运行/停止运行) - docker ps -a - 查看所有容器 - docker ps -l - 查看最后一次运行的容器 - docker ps -f status=exited - 查看停止的容器 - 创建容器 - docker run - -i 创建并启动容器 - -t 启动后会进入命令行 容器可以通过命令行登录进去 - --name 为创建的容器命名 - -v 目录映射关系 - -p 端口映射 - -d 创建守护式容器 - 交互式方式创建容器 - docker run -it --name=容器名字 镜像名字:标签 /bin/bash - 每一个容器都是一个虚拟主机 - exit 退出容器 - 守护式方式创建容器 - docker run -id --name=容器名字 镜像名字:标签 - 登录容器 - docker exec -it 容器名称(id) /bin/bash - 容器的启动和停止 - docker start 容器名称(id) - docker stop 容器名称(id) - 文件拷贝 - docker cp 文件/目录 容器名称:目录/文件 - docker cp 容器名称:目录/文件 目录/文件 - 目录挂载 - -v 宿主机目录:容器目录 - docker run -it -v /usr/local:/usr/local --name:容器名字 镜像名字:标签名字 - 如果你共享的是多级的目录,可能会出现权限不足的提示。 这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题 - 查看容器ip - docker inspect 容器名字(容器id) - 输出ip地址 docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID) - 删除容器 - docker rm 容器名称 - 需要先将容器停止 才能删除 否则会报错 - centos7 - ifconfig不可用 使用 ip addr 查看ip - ip addr 查看的ip为127.0.0.1 的centos系统 - 原因是网络适配器没有打开 - vi /etc/sysconfig/network-scripts/ifcfg-ens33中ONBOOT默认是no,使用vi命令修改为yes即可 - 操作防火墙 - systemctl start/stop/restart/status firewalld - 容器中一些Linux命令不可用 - 原因 缺少yum库 - ``` yum install ncurses ``` - mysql部署 - 拉取mysql镜像 - docker search mysql - docker pull mysql镜像 - 创建容器 - docker run -di --name=容器名字 -p 主机端口:容器端口 -e MYSQL_ROOT_PASSWORD=root用户密码 镜像名字 - 远程登录mysql - tomcat部署 - 拉取tomcat容器 - docker search tomcat - docker pull tomcat镜像 - 创建容器 - docker run -id --name=镜像名字 -p 宿主机端口:容器端口 -v 宿主机目录:容器目录 镜像名字 - nginx部署 - 拉取nginx - 查询镜像 - docker search nginx - 拉取镜像 - docker pull nginx - 创建容器 - docker run -id --name=容器名字 -p 宿主机端口:容器端口 镜像名字 - redis部署 - 拉取redis - 查询镜像 - docker search redis - 拉取镜像 - docker pull redis - 创建容器 - docker run -di --name=容器名字 -p 主机端口:容器端口 镜像名字 - 测试redis - 终端窗口 - redis-cli -h 主机ip - 镜像定制、备份、移植 - 容器保存为镜像 - docker commit 容器名称 镜像名称 - 镜像名字只支持小写 - 镜像备份 - 镜像备份为文件 - docker save -o 文件名.tar 镜像名字 - o output - 镜像恢复与迁移 - 文件恢复为镜像 - docker load -i xxx.tar - i input - Dockerfile常用命令 -