一、虚拟机网络说明
1 桥接模式
相当于将虚拟机直接接入局域网中,这时会独占IP地址.可以与本机通过局域网通信.
规则: 如果需要与局域网中的其他设备进行通信 则首选桥接模式.
特点:在局域网址的其他主机 可以访问虚拟机
依赖:要想使用桥接则必须有物理设备 (路由器(WIFI)/交换机)
2 NAT模式
相当于在网络环境中会开辟一块全新的网络空间.只有主机能够访问.
特点:NAT模式只有主机访问,其他人通过IP地址禁止访问.
3 镜像下载地址
http://mirrors.163.com/centos/7/isos/x86_64/
http://mirrors.sohu.com/centos/7/isos/x86_64/
二、防火墙
1 防火墙配置
说明:防火墙中有一个配置文件,表示当Linux系统启动时防火墙应该如何操作!!!
需求: 告诉linux系统以后开机不需要启动防火墙
命令: systemctl disable firewalld.service
systemctl enable firewalld.service
2 手动开关防火墙
命令:systemctl stop firewalld.service
systemctl start firewalld.service
3 查看防火状态
firewall-cmd --state
4 手动开放防火墙端口
- 检查防火墙开放的端口
firewall-cmd --list-ports
- 检查端口是否开放
firewall-cmd --query-port 80/tcp
- 开启防火墙
firewall-cmd --zone=public --add-port=80/tcp --permanent
- 移除端口
firewall-cmd --zone=public --remove-port=9090/tcp --permanent
- 关于防火墙操作的解释
–zone #作用域
–add-port=80/tcp #添加端口,格式为:端口/通讯协议
–remove-port=80/tcp #移除端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效 - 重启防火墙
firewall-cmd --reload
三、JDK的安装
将JDK安装包上传到指定文件目录下 /usr/local/src 下
解压jdk文件 命令: tar -zxvf jdk-8u51-linux-x64.tar.gz
配置环境变量 命令:vi /etc/profile
在文件末尾加入以下配置
JAVA_HOME=/usr/local/src/jdk1.8.0_51
JAVA_BIN=/usr/local/src/jdk1.8.0_51/bin
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
注意:JAVA_HOME目录是你jdk解压后的目录
环境变量生效 命令:source /etc/profile
检测JDK是否生效 命令:java -version
出现版本号,恭喜你jdk配置成功啦
四、MariaDB数据库安装
安装mariadb数据库 yum install mariadb-server
清空已安装文件 如果下载失败之后执行的. yum clean all
安装完成提示
数据库启动
启动命令 systemctl start mariadb
重启命令 systemctl restart mariadb
关闭命令 systemctl stop mariadb
设定开机自起 systemctl enable mariadb
关闭开机自起 systemctl disable mariadb
数据库初始化操作命令: mysql_secure_installation
测试数据库用户名和密码是否有效: mysql -uroot -p
说明:
- 如果需要远程链接数据库必须通过防火墙
- 如果远程链接数据库,数据库中必须开启远程访问权限才行,否则拒绝链接.
数据库开启远程访问权限,登录mysql服务器,
语法:
grant [权限] on [数据库名].[表名] to [‘用户名’]@[‘web服务器的ip地址’] identified by [‘密码’];
grant all on . to ‘root’@‘%’ identified by ‘root’;
或者指定IP地址
grant all on . to ‘root’@‘192.168.1.103’ identified by ‘root’;
执行授权命令:: GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '1234' WITH GRANT OPTION;
刷新权限: FLUSH PRIVILEGES;
数据库权限说明
五、nginx安装
注意事项:nginx底层开发由C语言完成的,所以要求不要有中文目录/空格/特殊字符(程序员操守)
官网下载 :http://nginx.org/en/download.html
上传安装包到指定目录中 /usr/local/src
解压Nginx 压缩文件 tar -zxvf nginx-1.20.1.tar.gz
说明:路径: /usr/local/src/下的nginx 文件是源文件目录. 该源文件目的是安装配置真正的nginx.
修改文件名称 mv nginx-1.20.1 nginx-source
安装nginx服务器 在nginx-source目录下进行配置,执行命令 ./configure
成功结果:
编译 make
安装 make install
查找nginx工作目录 whereis nginx
进入nginx/sbin目录中执行 ./nginx
1.启动命令: ./nginx
2.重启命令: ./nginx -s reload
3.关闭命令: ./nginx -s stop
浏览器输入 http://192.168.58.128/ 出现如下界面,恭喜你安装成功啦
或执行以下命令 ps -ef | grep nginx
验证安装成功
六、docker
简介
Docker是一个虚拟化平台( 官网https://www.docker.com/),诞生于 2013 年初,基于 Google 公司的 Go 语言进行实现。可以通过虚拟化方式,为应用提供可运行的容器。基于这种方式,可更快地打包、测试以及部署应用程序。
Docker Host 是我们的docker宿主机(就是安装了docker的操作系统)
Registry是docker拉取镜像的远程仓库,提供大量的镜像供下载,下载完成之后保存在Images中
Docker Daemon是docker的服务线程,处理Docker客户端命令。
Images 是Docker本地的镜像仓库,可以通过docker images查看镜像文件。
以docker run 命令为例,了解docker执行过程:
- 客户端将指令发送给docker daemon
- docker daemon 先检查本地images中有没有相关的镜像
- 如果本地没有相关的镜像,则向镜像服务器请求,将远程镜像下载到本地
- 然后创建启动一个容器,运行该镜像
安装
卸载旧版
yum remove docker-ce docker-ce-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
安装一组工具 yum install -y yum-utils
执行报错
原因及解决方案点击我》》》
设置云仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum缓存,yum是包管理器
`
yum makecache fast # centos 7
dnf makecache # centos 8
安装新版docker
yum install -y docker-ce docker-ce-cli containerd.io
`
如果上一步运行报错 problem with installed package podman-3.0.1-6.module_el8.4.0+781+acf4c33b.x86_64
执行 yum erase podman buildah
, 在执行上一步
启动docker systemctl start docker
设置docker开机启动 systemctl enable docker
镜像加速,由于国内网络问题,需要配置加速器来加速。修改配置文件 /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com"
],
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"data-root": "/var/lib/docker"
}
重新加载docker配置 systemctl daemon-reload
重启docker服务 systemctl restart docker
查看镜像配置 docker info
运行 hello-world 镜像,验证 docker docker run hello-world
Docker核心概念
- 镜像:一组文件的集合,相当于一个jar包,包含了class文件
- 容器: 镜像是运行容器的一个模板,基于镜像启动容器,容器为镜像中的文件提供了运行环境
- 数据卷:容器内数据的本地化存储,其生存周期独立于容器,容器消亡,数据卷不会消亡
docker镜像操作实践
下载
下载 CentOS 镜像
docker pull centos:7
说明,假如是自己制作镜像,都会先下载一个空的centos镜像,官方镜像仓库地址为
https://hub.docker.com/,假如后面我们要自己做镜像,都需要这样的一个空的系统镜像文件。
查看所有镜像文件
docker images
或者
docker image ls
运行镜像
通过docker启动运行 centos7镜像
docker run -it xxxx bash
例如 docker run -it hello-world
或 docker run -it d11
xxxx - 镜像名, 或 image id 的前几位
-it 这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
bash 放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash
删除镜像文件
删除镜像id前缀为501的 镜像,一般三位以上,足够区分即可 docker image rm 501
删除指定镜像名的镜像 docker image rm hello-world
假如镜像被占用着是不可以直接被删除的,需要先删除应用此镜像的容器,
docker container rm 容器名或容器id
容器id如果前三位能确定唯一,只需输入前三位即可,如果不能确定,输入前4位,例如:docker container rm f1c
镜像导出导入
需求:linux系统中的镜像文件下载到本地-例如window,导出后给他人使用
镜像导出 docker save jdk:8 | gzip > jdk8.tar.gz
镜像导入 docker load < jdk8.tar.gz #要在jdk8.tar.gz文件所在目录下执行
docker容器操作实践
启动分析
通过 docker run 来创建启动容器(这个容器相当于一个独立的集装箱) docker run -it centos:7 bash
- Docker 在后台运行的标准操作包括:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统(简版linux系统),并在只读的镜像层外面挂载一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个 ip 地址给容器
- 执行用户指定的应用程序
后台运行 docker run -itd centos:7
-d 后台运行容器
容器是否会长久运行,是和 docker run 指定的命令有关,和 -d 参数无关。
启动、删除,查看容器信息
说明:下面的数字936是容器id的前3位
查看容器信息 docker info
查看后台运行的容器输出结果 docker container logs 936 #container 可以省略
检查已启动的docker 服务 (正在运行的) docker ps
查看docker中的容器 docker ps -a
停止运行的容器 docker stop 936
重新启动容器 docker restart 936
当需要进入容器进行操作时(容器运行着) docker exec -it 936 bash
退出容器 exit
删除容器 docker container rm 936 #container可以省略 如果删除运行中的容器,需要添加 -f 参数
清理所有终止状态容器 docker container prune
docker数据管理实践
简介
数据卷是一个可供一个或多个容器使用的特殊目录,可以在容器之间共享和重用,默认会一直存在,即使容器被删除。
在容器中管理数据主要有两种方式:
- 挂载主机目录 (Bind mounts)-最常用 (docker run –v 宿主机目录:容器目录)
- 数据卷(Volumes)
操作
创建数据卷 docker volume create container-vol
查看指定数据卷 docker volume inspect container-vol #volume 可以省略
查看所有数据卷 docker volume ls
启动挂载数据卷的容器
docker run -it --mount source=container.vol,target=/root centos:7 bash
或者采用如下简写方式
docker run -it -v container.vol:/root centos:7 bash
说明:参数-v container-vol:/root 把数据卷 container-vol 挂载到容器的 /root 目录
删除数据卷(如果数据卷被容器使用则无法删除) docker volume rm helloworld.vol
清理无主数据卷 docker volume prune
挂载主机目录(常用) docker run -it -v /usr/app:/opt/app centos:7 bash
其中:
/usr/app:为宿主机目录
/opt/app: 为启动容器的一个目录
-v 用于指定挂载目录,如果本地目录(宿主机目录)不存在, Docker 会自动为你按照挂载目录进行目录的创建。
查看挂载目录信息 docker inspect 9f7 #9f7为容器id的前3位
Dockerfile文件应用实践
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。我们通常会基于此文件创建docker镜像。
说明:centos:7镜像 (所有的镜像文件创建时都需要有一个空的centos镜像,就类似通过一个空的光盘或u盘创建一个系统启动盘是一样的)
Dockerfile构建jdk镜像
以centos7为基础,构建oracle jdk8的镜像
在/root/jdk目录下创建Dockerfile文件(文件名一定要注意大小写),并且把jdk的压缩包上传只至该目录
编辑Dockerfile文件,
第一步:编写FROM语句(关键字一定要大写,例如FROM不能写小写)
FROM centos:7
第二步:通过ADD命令将宿主机中的压缩包传入镜像容器中的指定目录,并同时解压缩
ADD jdk-8u51-linux-x64.tar.gz /usr/local/docker
第三步:设置环境变量(通过ENV关键字实现,目录启动容器中的目录)
ENV JAVA_HOME=/usr/local/docker/jdk1.8.0_51 \
PATH=/usr/local/docker/jdk1.8.0_51/bin:$PATH
第四步:指定命令行操作(所有指令与后面内容要有空格)
CMD ['bash']
完整示例如下:(注意关键字与后面内容之间的空格,可以将如下完成示例拷贝Dockerfile文件,但是一定要注意你的jdk名字是什么,以及jdk压缩后的文件名字)
FROM centos:7
ADD jdk-8u51-linux-x64.tar.gz /usr/local/docker
ENV JAVA_HOME=/usr/local/docker/jdk1.8.0_51 \
PATH=/usr/local/docker/jdk1.8.0_51/bin:$PATH
CMD ['bash']
使用 Dockerfile 构建镜像(在Dockerfile所在目录执行docker指令)
docker build -t jdk:8 .
说明:不要丢掉末尾的符号“.”,表示构建过程中从当前目录寻找文件,-t表示镜像标识(镜像名),是tag单词的缩写.即jdk:8为我们创建的镜像名
运行镜像文件
docker run -it jdk:8 bash
进入容器以后,可以通过echo $PATH查看环境变量,并可以通过java –version查看JDK版本信息。
Dockerfile制作Sentinel镜像
定义Dockerfile文件,同时将jdk,sentinel也要和这个文件放在同一个目录
创建Dockerfile文件,内容如下
FROM centos:7
ADD jdk-8u51-linux-x64.tar.gz /usr/local/
ADD sentinel-dashboard-1.8.0.jar /usr/local/
ENV JAVA_HOME=/usr/local/jdk1.8.0_51 \
PATH=/usr/local/jdk1.8.0_51/bin:$PATH
EXPOSE 8080
ENTRYPOINT ["java","-jar","/usr/local/sentinel-dashboard-1.8.0.jar"]
使用 Dockerfile 构建镜像
docker build -t sentinel:8 . # 不要丢掉最后面的符号“.” ,并且要在Dockerfile所在目录执行docker指令
运行sentinel容器
docker run -d -p 8180:8080 sentinel:8
假如我们要做目录的挂载,保存容器中日志,可参考如下方式:
docker run -d -p 8180:8080 --name sentinel -v /usr/local/docker/sentinel/logs:/root/logs/csp sentinel:8
docker ps
看不到容器,可通过"docker container logs 容器id/容器名"方式查看容器状态.
浏览器输出 http://192.168.58.128:8180/ 测试访问
通过jdk镜像运行web服务
需求:通过jdk:8镜像启动运行一个web服务,例如sentinel,服务启动后可在宿主机通过localhost:8180进行访问
将sentinel拷贝宿主机指定目录,例如/root/servers
启动镜像容器,通过java执行运行web服务
docker run -d -p 8180:8080 --name sentinel -v /root/servers:/usr/sca jdk:8 java -jar /usr/sca/sentinel-dashboard-1.8.0.jar
浏览器访问测试,其中 ip为宿主机ip地址,端口号为宿主机端口号
端口映射理解图
docker安装mysql数据库
在hub.docker.com上拉取指定版本的mysql镜像 docker pull mysql:8.0.23
查看mysql镜像 docker images
启动运行mysql镜像 (docker run 用于启动一个容器)
docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/mysql-files:/var/lib/mysql-files \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=1234 \
-d mysql:8.0.23
进入mysql容器 docker exec -it mysql bash
登录mysql mysql -uroot -p1234 #1234为启动容器后面设置的密码
查看mysql启动日志 docker container logs mysql
设置mysql开机自启 docker update mysql --restart=always
docker安装redis数据库
下载镜像文件 docker pull redis
创建redis配置文件目录 mkdir -p /usr/local/docker/redis01/conf
在配置文件录下创建redis.conf配置文件 touch /usr/local/docker/redis01/conf/redis.conf
说明:因为redis镜像中这个redis.conf是一个目录所以要先创建一个这个配置文件,否在我们本地挂载点也会变成一个目录
运行redis镜像
docker run -p 6379:6379 --name redis01 \
-v /usr/local/docker/redis01/data:/data \
-v /usr/local/docker/redis01/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
进入redis01容器 docker exec -it redis01 bash
查看redis版本 redis-server -v
或 redis-cli -v
登录redis(默认不需要密码):docker exec -it redis01 redis-cli #在容器外
进入容器后执行 redis-cli
即可
docker安装nginx
下载镜像文件 docker pull nginx
创建数据卷(这个对象会在宿主机直接创建一个目录) docker volume create nginx-vol
查看数据卷对应的宿主机目录 docker volume inspect nginx-vol
启动nginx服务 docker run --name nginx -v nginx-vol:/ect/nginx -p 80:80 -d nginx
说明/etc/nginx 为nginx容器启动时,nginx镜像文件默认的解压目录,以后想修改nginx配置,可以直接去nginx-vol数据卷对应的目录去修改.
浏览器访问测试
docker安装nacos
拉取镜像 docker pull nacos/nacos-server:1.4.1
将nacos-mysql.sql文件拷贝到mysql容器的宿主机对应的挂载目录(可通过docker inspect mysql查看你mysql的挂载目录)
进入mysql容器,登录mysql,执行nacos的nacos-mysql.sql脚本文件 source nacos-mysql.sql
创建并启动nacos容器
docker run \
-e TZ="Asia/Shanghai" \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_DATABASE_NUM=1 \
-e MYSQL_SERVICE_HOST=192.168.66.3 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=1234 \
-e MYSQL_SERVICE_DB_NAME=dev_girdear-config \
-e MYSQL_SERVICE_DB_PARAM='characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true' \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
--name nacos \
--restart=always \
-e JVM_XMS=256m -e JVM_XMX=256m \
--privileged=true \
-d nacos/nacos-server:2.0.2
参数说明
单节点模式 :MODE=standalone
数据库地址:MYSQL_SERVICE_HOST
数据库用户名:MYSQL_SERVICE_USER
数据库密码:MYSQL_SERVICE_PASSWORD
需连接的数据库名称:MYSQL_SERVICE_DB_NAME
端口映射 : -p 8848:8848
任意时候重启容器,开机就能自动启动容器(需设置docker为开机自启): --restart=always
检查nacos服务 docker ps
查看nacos启动日志 docker container logs nacos
浏览器访问测试
docker容器互联
简介
Docker 中存在多个容器时,容器与容器之间经常需要进行通讯,例如nacos访问mysql,redis集群中各个节点之间的通讯。
Docker 中容器与容器之间进行通讯的解决方案一般有两种:
第一种:两个容器通过宿主机进行通讯(容器中的端口会映射到宿主机上)
第二种:两个容器之间直接通过虚拟网络进行连接,但是需要我们在docker中创建网络。
初始化网络
创建名字为t-net的网络 docker network create -d bridge t-net # t-net为自己创建的网络名称
其中,-d driver,网络类型,默认 bridge。
说明,创建好这个网络以后,在网落上添加容器,容器就可以通讯了
查看所有网络 docker network ls
查看网络信息 docker inspect 035 #035为网络id的前三位或者网络名称
实现容器互联
基于centos:7这个镜像启动两个容器。名字分别为app1,app2,并加入到t-net这个网络
docker run -it --name app1 --network t-net centos:7
docker run -it --name app2 --network t-net centos:7
在两个中断分别执行
ping app1
ping app2