Welcome 的Huihui's Code World ! !
接下来看看由辉辉所写的关于Docker的相关操作吧
目录
Welcome 的Huihui's Code World ! !
一.安装软件
0.Java
1.Mysql
2.安装nginx
①nginx相关介绍
②nginx安装
二.本篇难题
本节是来部署一个项目,所以先将jar包放入进来
先是要把mysql容器创建一下,并且创建一个基于jdk的自定义镜像
0.Java
首先得需要一个java环境
构建镜像
FROM openjdk WORKDIR /project COPY spring.jar /project CMD java -jar spring.jar --mysql.addr=m1
docker build -t spring:v1 .
测试镜像
docker run -itd --name s1 --net mynet --ip 172.20.0.101 -p 8080:8080 spring:v1
在创建两个容器,为了后面的nginx做负载均衡做准备
docker run -itd --name s2 --net mynet --ip 172.20.0.102 spring:v1 docker run -itd --name s3 --net mynet --ip 172.20.0.103 spring:v1
1.Mysql
拉取镜像
docker pull mysql/mysql-server
创建mysql容器
docker run \ --name m1 \ -v /mysql/conf/my.cnf:/etc/my.cnf \ -v /mysql/data:/var/lib/mysql \ --privileged=true \ -e MYSQL_ROOT_PASSWORD=123456 \ --net mynet \ --ip 172.20.0.200 \ -d mysql/mysql-server:5.7
上面一段命令的详解
docker run
:用于创建和启动一个新的容器。--name m1
:将容器命名为 "m1",以便后续对容器进行管理和操作。-v /mysql/conf/my.cnf:/etc/my.cnf
:将本地主机上的/mysql/conf/my.cnf
文件挂载到容器的/etc/my.cnf
路径,用于配置 MySQL 的配置文件。-v /mysql/data:/var/lib/mysql
:将本地主机上的/mysql/data
目录挂载到容器的/var/lib/mysql
路径,用于存储 MySQL 数据库文件。--privileged=true
:为容器提供一些特权,以便在容器内执行特定的操作。-e MYSQL_ROOT_PASSWORD=123456
:设置环境变量MYSQL_ROOT_PASSWORD
的值为 "123456",用于设置 MySQL 数据库的 root 用户密码。--net mynet
:将容器连接到名为 "mynet" 的自定义网络中。--ip 172.20.0.200
:为容器指定 IP 地址为 "172.20.0.200",以便在自定义网络中进行通信。-d mysql/mysql-server:5.7
:使用 MySQL 官方提供的镜像mysql/mysql-server:5.7
创建并后台运行容器。授权
grant all on *.* to root@'%' identified by '123456';
数据库及脚本的创建
create database shop;
把数据库脚本放入到目录挂载的那个位置
一定要在刚刚创建好的数据库里面执行这个脚本哦
执行sql脚本
source /var/lib/mysql/book.sql
这时候我们再去访问项目,就可以连接到数据库了
2.安装nginx
①nginx相关介绍
相关概述
Nginx(发音为“engine X”)是一个流行的开源 Web 服务器,也可以用作反向代理、负载均衡器和 HTTP 缓存。它最初由 Igor Sysoev 创建,现在由 NGINX 公司维护。
Nginx 可以同时处理数万个并发连接,而且占用的系统资源非常少。这使得它成为高性能 Web 服务器和应用程序服务器的首选之一。除了 HTTP 和 HTTPS 之外,Nginx 还支持许多其他协议,例如 SMTP、POP3 和 IMAP。
Nginx 的设计强调了模块化和可扩展性,它的核心只包含了一些基本的特性,其他功能都由模块提供。这使得它非常灵活,可以根据需要轻松地添加或删除功能。
负载均衡
负载均衡是一种分布式计算技术,用于在计算机网络或服务器集群中分配工作负载,以实现资源的优化利用和提高系统性能。当一个系统面临大量的请求时,负载均衡可以将这些请求平均地分配给多个服务器或计算节点,确保每个服务器都能够承担适当的负载。
负载均衡的主要目标是避免某些服务器负载过重,而其他服务器处于空闲状态的情况,从而提高整个系统的吞吐量、响应速度和可靠性。通过合理地分发请求,负载均衡可以确保每个服务器都能够充分利用其计算和存储资源,并且在某个服务器出现故障时,其他服务器可以接管其工作,保证系统的连续性和可用性。
动静分离
动静分离(Dynamic-Static Separation)是一种将动态内容和静态内容分开处理的技术。在网络应用中,动态内容通常是指根据用户请求生成的、实时变化的数据,而静态内容则是指不变的、相对固定的文件,如HTML、CSS、JavaScript、图片等。
动静分离的目的是优化网站或应用程序的性能和可扩展性。通过将静态内容与动态内容分别存储和处理,可以提高系统的响应速度、减轻服务器负载,并降低带宽消耗。
动静分离可以提升性能,静态资源可以被缓存,减少了服务器生成内容的压力,加快了网页加载速度。减轻服务器负载,静态资源可以由CDN等专门的服务器提供,减轻了应用服务器的负载。节省带宽成本,通过CDN分发静态内容,可以减少对服务器带宽的需求,降低带宽成本
②nginx安装
拉取镜像
docker pull nginx
创建一个nginx容器
docker run -itd \ --name n1 \ -v /soft/nginx/conf.d:/etc/nginx/conf.d \ -v /soft/nginx/html:/etc/nginx/html \ -p 80:80 \ --net mynet \ --ip 172.20.0.104 \ nginx
docker run -itd
: 运行一个交互式容器,并将其设置为在后台运行。--name n1
: 为容器指定一个名称,这里是 "n1"。-v /soft/nginx/conf.d:/etc/nginx/conf.d
: 将本地目录/soft/nginx/conf.d
挂载到容器内的/etc/nginx/conf.d
目录,用于存放 Nginx 的配置文件。-v /soft/nginx/html:/etc/nginx/html
: 将本地目录/soft/nginx/html
挂载到容器内的/etc/nginx/html
目录,用于存放 Nginx 的静态网页文件。-p 80:80
: 将主机的 80 端口映射到容器的 80 端口,以便可以通过主机的 IP 地址访问 Nginx。--net mynet
: 将容器连接到网络mynet
,以便与其他容器进行通信。--ip 172.20.0.104
: 为容器分配一个指定的 IP 地址,这里是 172.20.0.104。nginx
: 指定要运行的镜像名称,这里是 Nginx。配置文件
#服务器的集群 upstream tomcatList { server 172.20.0.101:8080 weight=1; server 172.20.0.102:8080 weight=1; server 172.20.0.103:8080 weight=1; } server { listen 80; server_name www.wh.com; location / { root /etc/nginx/html/; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~^/api/ { rewrite ^/api/(.*)$ /$1 break; proxy_pass http://tomcatList; proxy_redirect default; } }
上面的这个配置文件是一个使用 Nginx 实现的服务器集群配置示例。该配置使用了反向代理和负载均衡来将请求分发给多个 Tomcat 服务器。
首先,在
upstream
指令中定义了一个名为tomcatList
的集群,其中包含了三个 Tomcat 服务器的 IP 地址和端口号。每个服务器都有相同的权重,表示它们将平均地接收到相同数量的请求。然后,在
server
块中配置了监听端口为 80,并设置了域名为www.wh.com
的虚拟主机。接下来,
location /
指令配置了根目录和默认的索引文件。
error_page
指令配置了处理服务器错误的页面。
location = /50x.html
指令配置了处理 500 错误的页面。最后,
location ~^/api/
指令使用了正则表达式匹配以 "/api/" 开头的请求,并将这些请求转发到tomcatList
集群中的 Tomcat 服务器上静态页面
这个可以自己写一个静态的页面,然后将一整个文件夹王目录挂载的地方放
这时候我们已经可以去访问项目了,因为用nginx做了反向代理,所以可以使用80端口进入,如果不接端口,默认也是80
这里已经可以访问了,但是现在没有数据,这是因为我们这里使用了域名进行访问,如果没有映射这个域名的话,那么就没有数据
域名映射
进入到电脑指定目录
C:\Windows\System32\drivers\etc\hosts
记得修改一下对文件的控制权,不然修改可能会不成功
在测试镜像的时候,突然出现了一个错误,在网上查询之后,是要删除自定义的网络重新创建,可结果在创建的时候又出现了那个问题。。。【问题的大概意思就是iptables 命令无法创建链或目标】
错误
[root@localhost ~]# docker network create --subnet=172.20.0.0/16 mynet
Error response from daemon: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables --wait -t nat -I DOCKER -i br-54d4ec12080f -j RETURN: iptables: No chain/target/match by that name.
(exit status 1))解决办法
输入命令service docker restart重启以下Docker即可
service docker restart
好啦,今天的分享就到这了,希望能够帮到你呢!