高级开发成为全栈的常用脚本集合

docker 文档部署常用要点

docker的安装部署

1.1 启动docker:

systemctl start docker

1.2 停止docker

systemctl stop docker

1.3 重启docker

systemctl status docker

1.4 开机启动docker

systemctl enable docker

1.5 查看docker概要信息

docker info

1.6 查看docker帮助文档

docker --help

1.7 拉取MySQL

docker pull mysql

1.8 查看镜像

docker images 之后会对应返回一个镜像key 和 imageId

1.9 配置数据库

docker run -id --name=mysql8 -p3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

docker run -it -d --restart=always -p 3307:3306  --name mysql01 -v $PWD/data:/var/lib/mysql -v $PWD/conf:/etc/mysql -v $PWD/log:/var/log/mysql -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=atcdi mysql

docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=atcdi -v $PWD/mysql/data/mysql:/var/lib/mysql -v $PWD/mysql/conf.d:/etc/mysql/conf.d -v $PWD/mysql:/etc/mysql --restart=always mysql
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_general_ci

/var/lib/mysql \ # mysql创建文件目录
/etc/mysql/conf.d \     #mysql 配置文件路径
var/log/mysql \  #mysql的日志目录

MYSQL_ROOT_PASSWORD=123456
root账号 密码123456

docker run -id -p 3306:3306 --name mysql01 -v $PWD/logs:logs  -v $PWD/data:/var/lib/mysql  -v $PWD/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=atcdi --restart=always mysql mysql


---注意mysql版本问题8的版本
docker run -it -p 3306:3306 --name mysql01 --restart=always  -v $PWD/logs:/var/log/mysql -v $PWD/data:/var/lib/mysql-files -v /usr/mydata/mysql/conf:/etc/mysql -v /etc/localtime:/etc/localtime:ro -e MYSQL_ROOT_PASSWORD=atcdi -d mysql



以上是安装指令脚本,下面对各个配置进行讲解

-d 后台运行

–restart=always 设置开机重启

–name mysqltest 设置该容器的名称,这儿是自定义,可以自由备注

-p 设置端口号映射,容器外端口:容器内端口

-v 卷挂载 (容器外目录:容器内目录)这儿我们对数据目录、配置文件目录和日志目录进行了挂载,类似这些需要被持久化的数据,需要的存储至容器外,避免容器删除后数据的丢失

-e msyql的环境配置

之后返回的是仓库的id

2.0进入容器

docker exec -it mysql8 /bin/bash

2.1 进入MySQL

mysql -u root -p 密码讲是上面设置的123456 位置的值

2.2 修改加密规则

alter user ‘root’@‘%’ identified with mysql_native_password by’12345’;

2.3 开放3306端口

此时使用navicat的时候可能会出现连不上10066 错误码,在阿里云防火墙里面开放3306端口

2.4 查看已经docker容器

docker ps -a

2.5 启动docker容器

docker start id id 为容器id,比如说启动数据库服务,数据库服务启动,就可以使用数据库了。

3. 容器命令

3.1 新建并启动容器

docker run [OPTIINS] image
OPTIINS: --name 容器名称
-d 后台运行容器,并返回容器ID,启动容器守护市容器(使用exit推出后,容器就在后台运行,并不会正真的退出)
-i 以交互模式运行容器(如果不加,容器没有使用的情况就会自动停止),通常与-t 一起使用。
-t 为容器重新分配一个伪输入终端,通常与-i同时使用
-p 随机端口映射

以交互模式创建并启动一个容器。例如:创建一个叫mycentos的容器,用的是centos这个镜像
docker run --name mycentos -it centos /bin/bash

以后台的方式创建并启动一个容器
docker run --name mycentos -d centos

docker run -it --name mytomcat tomcat /bin/bash
这里是进去到容器里面,ctrl+p+q退出去
docker ps 查询正在运行的容器,up是运行的时间。

启动容器
shell> docker start redis1
停止运行容器
shell> docker stop redis1
重启容器
shell> docker restart redis1

通过 容器名称 定位容器 删除容器是少一个i
shell> docker rm redisTest
通过 容器ID 定位容器
shell> docker rm d66021564fd4
通过 容器的长ID 定位容器
shell> docker rm d66021564fd4260cc31840dd231a1c15e4928f46c4154f16f1cb8e524371e3cc

数据卷

必须在启动容器时挂载数据卷。
docker run -p 宿主机端口:容器内服务监听端口 -d --name 容器名称 -v 宿主机目录:容器内目录 镜像名:镜像版本 | 镜像ID

如果想要宿主机可以修改数据卷内容,但是容器不能修改数据卷内容:
docker run -p 宿主机端口:容器内服务监听端口 -d --name 容器名称 -v 宿主机目录:容器内目录:ro 镜像名:镜像版本 | 镜像ID

一个容器可以挂载若干个数据卷,只需添加若干组 -v 宿主机目录:容器内目录即可:
docker run -p 宿主机端口:容器内服务监听端口 -d --name 容器名称 -v 宿主机目录1:容器内目录1 -v 宿主机目录2:容器内目录2
镜像名:镜像版本 | 镜像ID

二 阿里云服务的配置

阿里云里面搜索镜像加速器 找到对应的配置文件,镜像地址改写成自己的。再直接在centOS里面执行。

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://mptn8fdt.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

docker镜像的安装

1.1 Java项目启动指令的介绍

Linux 运行jar包命令如下:

方式一:

java -jar XXX.jar
特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出

那如何让窗口不锁定?

方式二

java -jar XXX.jar &
&代表在后台运行。

特定:当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行。

继续改进,如何让窗口关闭时,程序仍然运行?

方式三

nohup java -jar XXX.jar &
nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行
121.4.98.
当用 nohup 命令执行作业时,缺省情况下该作业的所有输出被重定向到nohup.out的文件中,除非另外指定了输出文件。

方式四

nohup java -jar XXX.jar >temp.txt &
解释下 >temp.txt

command >out.file

command >out.file是将command的输出重定向到out.file文件,即输出内容不打印到屏幕上,而是输出到out.file文件中。

可通过jobs命令查看后台运行任务

jobs
那么就会列出所有后台执行的作业,并且每个作业前面都有个编号。
如果想将某个作业调回前台控制,只需要 fg + 编号即可。

1.2 dockers 里面Redis 的安装

指定版本的redis的安装 docker pull redis:6.0-rc

启动redis docker run -itd --name redis6 -p 6379:6379 redis:6.0-rc(redis:6.0-rc 名称加上标签)

redis

  1. 创建挂载目录
    mkdir -p /docker/redis
    mkdir -p /docker/redis/data

  2. 进入挂载目录
    cd /docker/redis

  3. 下载 redis.conf 文件
    wget http://download.redis.io/redis-stable/redis.conf

  4. 更改 redis.conf 文件的权限
    chmod 777 redis.conf

  5. vi redis.conf

  6. 这行要注释掉,解除本地连接限制

bind 127.0.0.1 --> 需要注释掉

默认 yes,如果设置为 yes,则只允许在本机的回环连接,其他机器无法连接。

protected-mode no

默认 no 为不守护进程模式,docker 部署不需要改为 yes,docker run -d 本身就是后台启动,不然会冲突

daemonize no

设置密码

requirepass 123456

持久化

appendonly yes

  1. 启动脚本
    docker run --restart=always --name redis01 -it -d -p 6379:6379
    –privileged=true
    -v /docker/redis/redis.conf:/etc/redis/redis.conf
    -v /docker/redis/data:/data
    redis
    redis-server /etc/redis/redis.conf
    –appendonly yes

1.3进入容器里查看状态

docker exec -it redis6 /bin/bash

redis-cli

set tets 1

1.4 node的安装

下载:docker pull node

查看镜像:docker images

启动: docker run -i -t node /bin/bash

1.5 nginx 的安装

下载: docker pull nginx

查看镜像: docker images

先随便启动一个容器,为了后面的conf文件:docker run --name mynginx -dp 8086:80 nginx

启动之后有别称就可以使用

docker start 服务名称

docker start mynginx

docker stop mynginx

将nginx关键目录映射到本机

mkdir -p /home/one-map/front/{html,logs,conf}

然后在 root目录下新建 conf ,log, html这三个目录,目录定义的含义是:

html: 存放相关静态资源文件

log:nginx的日志目录

conf: nginx的配置文件目录,比如nginx.conf

先复制:注意要先复制config 和conf.d下面的default.config 文件,再重新启动新的容器挂载,这样宿主机改动容器里面的文件才会改动

docker run --name mynginx  -d nginx  
docker cp mynginx:/etc/nginx/nginx.conf /home/front/conf/

docker run -d -p 80:80 --name nginx01 -v /root/nginx/html:/usr/share/nginx/html -v /root/nginx/conf/nginx.conf:
/etc/nginx/nginx.conf -v /root/nginx/logs:/var/log/nginx --restart=always nginx

---------这个是挂载新的default.config

docker run -d  -p 8000:80 --name nginx01  -v /root/nginx/html:/usr/share/nginx/html -v /root/nginx/conf/conf.d/default.conf:/etc/nginx/conf.d/default.conf  -v /root/nginx/logs:/var/log/nginx  --restart=always  nginx

######### 注意要先随便启动一个,copy一个nginx.conf 后面启动的时候挂载,这个文件名也要是nginx.conf
docker run -d -p 8000:80 --name nginx01
-v /home/front/html:/usr/share/nginx/html
-v /home/front/conf/nginx.conf:/etc/nginx/conf.d/default.conf
-v /home/front/logs:/var/log/nginx --restart=always nginx

之后再docker cp mynginx:/etc/nginx/nginx.conf /root/nginx/conf/ defaut.conf就赋值到了

docker cp mynginx:/etc/nginx/nginx.conf /home/one-map/web-front/conf/nginx.conf


mkdir -p /home/one-map/front/{html,logs,conf}
mkdir -p /home/one-map/front/conf/conf.d

docker run --name nginx02 -it -p 9008:80
-v /home/one-map/front/conf/nginx.conf:/etc/nginx/nginx.conf
-v /home/one-map/front/conf/conf.d:/etc/nginx/conf.d
-v /home/one-map/front/html:/usr/share/nginx/html
-v /home/one-map/front/logs:/var/log/nginx -d nginx

docker run --name nginx02 -it -p 9008:80
-v /home/one-map/front/conf/nginx.conf:/etc/nginx/nginx.conf
-v /home/one-map/front/html:/usr/share/nginx/html
-v /home/one-map/front/logs:/var/log/nginx -d nginx

docker run --name nginx-report -it -p 8000:80
-v /home/report/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
-v /home/report/nginx/html:/usr/share/nginx/html
-v /home/report/nginx/logs:/var/log/nginx -d nginx

mkdir -p /home/one-map/web-front/{html,logs,conf}
mkdir -p /home/one-map/app/conf/conf.d

docker run --name map-app -it -p 9008:9008
-v /home/one-map/web-app/conf/nginx.conf:/etc/nginx/nginx.conf
-v /home/one-map/web-app/html:/usr/share/nginx/html
-v /home/one-map/web-app/logs:/var/log/nginx -d nginx

docker run --name map-app -it -p 9008:9008
-v /home/one-map/web-app/conf/default.conf:/etc/nginx/nginx.conf
-v /home/one-map/web-app/html:/usr/share/nginx/html
-v /home/one-map/web-app/logs:/var/log/nginx -d nginx

docker run -d -p 80:80 --name nginx01 -v $PWD/nginx/dist:/usr/share/nginx/html --restart=always nginx

复制nginx的docker容器中/etc/nginx/nginx.conf 文件到宿主主机下的/oup/docker_nginx_data/conf/目录下。这样可以直接进行默认的配置文件的编辑。

[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5e9b198b3dcb nginx “nginx -g 'daemon of…” 3 minutes ago Created runoob-nginx-test

[root@localhost ~]# docker rm 5e9b198b3dcb # 删除nginx容器
5e9b198b3dcb

再次启动一个nginx 新容器

[root@localhost ~]# docker run --name runoob-nginx-test -p 8081:80 -d nginx
a10f2a55d91e8446a4ba89b2cbd71fa557a7439554ae2292a96dda0e44e13a72

///

docker cp nginx:/etc/nginx/nginx.conf /home/front/conf/nginx.conf
docker cp nginx:/etc/nginx/conf.d /home/front/conf/conf.d
docker cp nginx:/usr/share/nginx/html /home/front/

docker rm -f nginx

docker run --name nginx01 -it -p 8000:80
-v /home/front/conf/nginx.conf:/etc/nginx/nginx.conf
-v /home/front/conf/conf.d:/etc/nginx/conf.d
-v /home/front/logs:/var/log/nginx
-v /home/front/html:/usr/share/nginx/html nginx

docker run --name nginx01 -it -p 8000:80
-v /home/front/conf/nginx.conf:/etc/nginx/nginx.conf
-v /home/front/html:/usr/share/nginx/html
-v /home/front/logs:/var/log/nginx -d nginx

systemctl start nginx.service

停止nginx

nginx -s stop

重启nginx

nginx -s reload

ps aux|grep nginx

,执行结果如下,的确Nginx服务已经启动。

img

然后执行

netstat -ntlp

查看80-端口是否被分配给了Nginx,执行结果如下:

img

一切正常啊,那到底情况出在何处呢?

经过查阅了网上的资料,终于找到解决办法

第一步,对80端口进行防火墙配置:

firewall-cmd --zone=public --add-port=8000/tcp --permanent

firewall-cmd --zone=public --add-port=8010/tcp --permanent

sudo firewall-cmd --zone=public --add-port=8002/[tcp|udp] --permanent
第二步,重启防火墙服务:

systemctl restart firewalld.service

systemctl start firewalld.service

然后重新在浏览器中访问你的ip,应该就可以访问了。

容器转镜像
docker commit 容器id 镜像名称:版本号

把容器转换成镜像后,再把镜像压缩成文件,这样就可以直接把压缩文件发给测试人员,测试人员把镜像压缩还原成容器,就可以直接测试了。
镜像不能直接传输,,只能变成压缩文件才可以传输。
镜像转变成压缩文件:

docker save -o 压缩文件名称 镜像名称:版本号
镜像再恢复成容器
docker load -i 压缩文件名称

举例:

docker commit xxxxxx yxc_redis:1.0 #把容器压缩成镜像
docker save -o yxc_redis.tar yxc_redis:1.0 #把镜像压缩成文件 压缩文件名称  镜像名称

测试:

docker rmi xxxx  #删除镜像
docker load -i yxc_tomcat.tar

四 JDK 的安装

4.1 文件上传到服务器

Java中使用Redis的几种方式

下载好的文件用xshell上传到服务器里面。需要先到容器里面运行指令:yum -y install lrzsz

之后在xshell里面云rz 就可以选择要上传的文件夹,当前服务器所在的位置就是文件到服务器的位置。

4.2 解压JDK 并且配置环境变量

安装 配置环境

运行指令tar -zxvf ja------- 包的名称

vim /etc/profile 配置环境变量

进入文本编辑,用按键"shift+g"定位到文件尾,点击’i’ 进入编辑,

另起一行写下如下数据

export JAVA_HOME=/home/jdk/jdk1.8.0_301

export PATH= P A T H : PATH: PATH:JAVA_HOME/bin: J A V A H O M E / j r e / b i n : JAVA_HOME/jre/bin: JAVAHOME/jre/bin:PATH

export CLASSPATH=.: J A V A H O M E / l i b : JAVA_HOME/lib: JAVAHOME/lib:JAVA_HOME/jre/lib

写完后,点击’esc’按钮退出

用命令’:wq!'保存退出

5.让环境变量生效

执行命令:source /etc/profile

6、然后执行以下命令验证是否安装成功:

java -version

按“Esc“键,退出”insert“模式,然后输入冒号(),紧接着输入下面的命令:q!

删除文件夹实例:
rm -rf /var/log/httpd/ahome
将会删除/var/log/httpd/access目录以及其下所有文件、文件夹

删除文件使用实例:
rm -f /var/log/httpd/access.log
将会强制删除/var/log/httpd/access.log这个文件

 GenericObjectPoolConfig poolconfig = new GenericObjectPoolConfig();
//       1.创建连接池
        long start = System.currentTimeMillis();
//        JedisPool jedisPool = new JedisPool("192.168.84.128", 6379);
        JedisPool jedisPool = new JedisPool(poolconfig, "192.168.84.131", 6379, 3000, "123456");
//       2.获取连接对象
        Jedis jedis = jedisPool.getResource();
//       3.未使用管道
        for (int i = 0; i < 100000; i++) {
            jedis.incr("pp");
        }
        System.out.println(System.currentTimeMillis() - start + "  未使用管道,循环一万次");
        long pipe = System.currentTimeMillis();


        /*******************使用管道***********************/
//        4.创建管道
        Pipeline pipeline = jedis.pipelined();
//        执行
        for (int i = 0; i < 100000; i++) {
            pipeline.incr("qq");

        }
//        输出
        pipeline.syncAndReturnAll();
//        释放资源
        jedis.close();
        System.out.println(System.currentTimeMillis() - pipe + "  使用管道,执行一万次效果");

Pipeline在某些场景下非常有用,比如有多个请求需要被“及时的”提交,而且他们对相应结果没有互相依赖,而且对结果响应也无需立即获得,那么pipeline就可以充当这种“批处理”的工具;而且在一定程度上,可以较大的提升性能,性能提升的原因主要是TCP链接中较少了“交互往返”的时间。例如:因为业务需要,我们需要把用户的操作过程记录在日志中以方便以后的统计,每隔3个小时生成一个新的日志文件,那么后台处理线程,那么我们就可以使用pipeline批量提交即可。

4.3 Redis的事务

Redis的事务:
把所有的指令放到一起,一次性操作,但是这个放到一起和关系型数据库的事务不太一样,关系型数据库的事务,这一个整体要么都成功,要么都失败.这是其原子性.这里面的事务,最后在执行的时候还是单独的执行.这个事务可能相对于其他的客户端,如果又其他的客户端执行了相同的key,那么之前开启的事务就自动消失.这其实就是分布式服务的一种锁.

1. 开启事务:multi
2. 输入要执行的命令
set name yang
set bitrhday 2000-01-01
3. 执行事务:exec
4. 取消事务:discard

# 如果中间输入错误-的指令,在执行之前也是没有问题的,执行的时候报错.
1. 开启事务:multi
2. 输入要执行的命令
set name yang
set bitrhday 2000-01-01
incr name
3. 执行事务:exec

现实中redis的事务想生效,需要和watch监听一起.
在开启事务之前,先通过watch命令去监听一个或者多个key,在开启事务之后,如果有其他客户端修改了改监听客户端的key,就会自动取消.执行或者取消事务watch都是自动清除.
1.先watch key
2.multi
3.set name xxx
set age 40
另一个客户端执行和前一个客户端的指令一样,修改了之前的数据
set age 50
再回到第一个客户端去执行事务,返回nil,事务取消,同时监听也会取消.

在第一个客户端进行监听name这个字段,再开启事务,之后再去第一个客户端.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

再新建一个客户端效果,同样对name进行操作,操作成功的,但是再回过头对第一个客户端的事务进行操作,那么事务已经取消了.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

grep -C 5 foo file 显示file文件中匹配foo字串那行以及上下5行

grep -B 5 foo file 显示foo及前5行

grep -A 5 foo file 显示foo及后5行

4.4缓存服务器出现常见的问题

4.4.1.缓存穿透

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们的理想情况下是客户端发送请求,经过tomcat先到Redis里面查询.如果Redis
里面有.直接返回客户端,如果没有,那么再去数据库里面查询一下,并且放到Redis里面,再放返回客户端.

缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。

缓存穿透问题可能会直接影响到后端的负载均衡变大,其实很多的后端的存储设备不具备高并发,所以简单的可能会导致数据库锁表,严重的会导致数据库服务宕机。通常可以在程序中分别统计调用总数,缓存的命中数,如果发现大量的存储层命中是空,可能就会出现缓存穿透的问题。
造成缓存穿透基本上就两种可能性:
第一:业务代码问题会导致数据出现问题,所以在自己编写代码的时候需要注意。
第二:一些恶意的攻击,爬虫等会造成大量的空命中。这里面需要做一些处理。

缓存穿透的解决方式(具体业务具体对待)
  1. 尽可能在业务设计的时候可以把控住查询条件的限制,比如说,查询的id范围只有0-1000,传进来的数据却是大于1000,那么也可以过滤掉.
  2. 利用Redis的set集合去判断过滤查询条件.在查询进入到Redis之前,先到set里面查询,符合条件的再进行,不符合返回去.
  3. 添加限制,比如说,大量固定ip且无用的请求,适当的限制访问频率也可以解决.
4.4.2 缓存击穿

缓存中的热点数据存在缓存中,但是由于热点数据过期了,所有大量的请求直接绕过缓存直接奔向数据库.突如其来的访问量,很可能会导致数据库服务宕机.

解决方案:

​ 1.在访问缓存中的数据的时候,添加一个锁,最好走不同的线程,让访问的数据让几个请求访问数据库,避免数据库的宕机.

​ 2.去掉缓存时间消失时间,指标不治本.

​ 3.适当的优化数据库服务等等

4.4.3缓存雪崩

在一开始预热的时候,数据同时存到缓存里面,而且设置了缓存到期时间一致,那么缓存里面的数据会同时到期.数据直接来到了数据库,导致宕机.和缓存击穿不同的是,缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库.

  1. 这一种的解决方式就是数据在预热的时候,有规律的去放到缓存中,并且根据实际的业务设置缓存失效的时间.
  2. 缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。
  3. 如果缓存数据库是分布式部署,将热点数据均匀分布在不同搞得缓存数据库中。
  4. 设置热点数据永远不过期。
4.4.4 key 的生存时间到了,Redis怎么删除
  1. 定时删除:Redis每隔一段时间就会主动的查看Redis设置过时间的key,100毫秒的间隔时间中默认删除三个key.
  2. 惰性删除: 当你查询一个已经过时的key的时候,Redis就会主动去看此key的生存时间,如果已经达到了,那么就直接删除,否则返回nil.
4.4.5 缓存是否会满,缓存满了怎么办?

对于一个缓存服务,理论上来说,随着缓存数据的日益增多,在容量有限的情况下,缓存肯定有一天会满的。如何应对?

  1. 给缓存服务,选择合适的缓存逐出算法,比如最常见的LRU。这个Redis里面的配置文件里面有8种.
  2. 针对当前设置的容量,设置适当的警戒值,比如10G的缓存,当缓存数据达到8G的时候,就开始发出报警,提前排查问题或者扩容
  3. 给一些没有必要长期保存的key,尽量设置过期时间。
启动cftd

sudo docker-compose up -d 启动项目定docker指令 在docker-compose目录下

sudo fuser -k -n tcp 8000 杀死进程

第一层CTFd里面,即serve.py 上一层 sudo gunicorn --bind 0.0.0.0:8000 -w 20 “CTFd:create_app()”

sudo docker exec -it f8e4b9f55d41 sh 进入docker 这里面id是docker ps -a 出现的容器id

退出docker的是CTRL+D

firewall-cmd --permanent --zone=public --add-port=7849/tcp
firewall-cmd --permanent --zone=public --add-port=8849/tcp
firewall-cmd --permanent --zone=public --add-port=9849/tcp
firewall-cmd --reload 刷新生效
firewall-cmd --zone=public --add-port=11434/tcp

firewall-cmd --permanent --zone=public --add-port=8000-9999/tcp
firewall-cmd --permanent --zone=public --add-port=80-81/udp
firewall-cmd --reload 刷新生效
— 最多两个端口

firewall-cmd --list-all

mysql8 安装

docker run -it -p 3306:3306 --name mysql-report
-v /home/report/mysql/conf:/etc/mysql/mysql.conf.d
-v /home/report/mysql/log:/var/log/
-v /home/report/mysql/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=Anjkjt@2023
mysql
–restart=always


sudo docker run -it -p 3306:3306 --name mysql-report
-v /home/report/mysql/log:/var/log/mysql
-v /home/report/mysql/data:/var/lib/mysql
-v /home/report/mysql/conf:/etc/mysql
-v /home/report/mysql/mysql-files:/var/lib/mysql-files
-e MYSQL_ROOT_PASSWORD=123456
–restart=always -d mysql:8.0.29
–lower_case_table_names=1

sudo docker run --privileged=true
-p 3306:3306 --name mysql-report
-v /home/report/mysql/log:/var/log/mysql
-v /home/report/mysql/data:/var/lib/mysql
-v /home/report/mysql/conf:/etc/mysql/conf.d
-e MYSQL_ROOT_PASSWORD=root
–restart=always
-d mysql:8.0.29

docker exec -it mysql8 /bin/bash

2.1 进入MySQL

mysql -u root -p 密码讲是上面设置的123456 位置的值

–lower_case_table_names=1

docker run -it -p 3306:3306 --name mysql01 --restart=always
-v $PWD/logs:/var/log/mysql
-v $PWD/data:/var/lib/mysql-files
-v /usr/mydata/mysql/conf:/etc/mysql
-v /etc/localtime:/etc/localtime:ro
-e MYSQL_ROOT_PASSWORD=atcdi -d mysql

redis

docker run --restart=always --name redis-report -it -d -p 6379:6379
–privileged=true
-v /home/report/redis/redis.conf:/etc/redis/redis.conf
-v /home/report/redis/data:/data
redis
redis-server /etc/redis/redis.conf
–appendonly yes

nginx

docker run --name nginx-report -it -p 8000:80
-v /home/report/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
-v /home/report/nginx/html:/usr/share/nginx/html
-v /home/report/nginx/logs:/var/log/nginx -d nginx

mkdir -p /home/report/nginx/{html,logs,conf}

docker run -id --name nginx-report -p 8000:80
-v /home/report/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro
-v /home/report/nginx/html:/usr/share/nginx/html:rw
-v /home/report/nginx/logs:/var/log/nginx
nginx

docker run --name mynginx -d nginx
docker cp mynginx:/etc/nginx/nginx.conf /home/report/nginx/conf/nginx.conf

minio

docker run -p 9000:9000 -p 9090:9090
–net=host
–name minio-report
-d --restart=always
-e “MINIO_ACCESS_KEY=minioadmin”
-e “MINIO_SECRET_KEY=minioadmin”
-v /home/minio/data:/data
-v /home/minio/config:/root/.minio
minio/minio server
/data --console-address “:9090” -address “:9000”

–用户

report
minio-report

–组
report-group


mkdir -p /home/report/front/conf \ # nginx 存放配置文件的目录
mkdir -p /home/report/front/logs \ # nginx 存放日志的目录
mkdir -p /home/report/front/html # nginx 启动网站目录(存放静态文件的目录)

启动成功的nginx服务

docker cp mynginx:/etc/nginx/nginx.conf /home/water/front/conf
docker cp mynginx:/etc/nginx/conf.d /home/water/front/conf/conf.d
docker cp mynginx:/usr/share/nginx/html /home/water/front/

docker run -p 8000:80 --name nginx-report
-v /home/report/front/conf/nginx.conf:/etc/nginx/nginx.conf
-v /home/report/front/conf/conf.d:/etc/nginx/conf.d
-v /home/report/front/logs:/var/log/nginx
-v /home/report/front/html:/usr/share/nginx/html
-d
–restart=always
nginx:latest

docker run -p 60:80 --name nginx-domian -d
-v /home/report/domain/conf/nginx.conf:/etc/nginx/nginx.conf
-v /home/report/domain/conf/conf.d:/etc/nginx/conf.d
-v /home/report/domain/logs:/var/log/nginx
-v /home/report/domain/html:/usr/share/nginx/html
–restart=always
nginx:latest

docker run -p 9000:80 --name water-app
-v /home/water/app/conf/nginx.conf:/etc/nginx/nginx.conf
-v /home/water/app/conf/conf.d:/etc/nginx/conf.d
-v /home/water/app/logs:/var/log/nginx
-v /home/water/app/html:/usr/share/nginx/html
-d
–restart=always
nginx:latest

docker run -p 8000:80 --name service-front
-v /home/front/conf/nginx.conf:/etc/nginx/nginx.conf
-v /home/front/conf/conf.d:/etc/nginx/conf.d
-v /home/front/logs:/var/log/nginx
-v /home/front/html:/usr/share/nginx/html
-d
–restart=always
nginx:latest

docker run --name mynginx -v /path/to/nginx.conf:/etc/nginx/nginx.conf:ro -p 80:80 -d nginx

docker run -p 60:80 --name nginx-domian -d -v /home/report/domain/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/report/domain/conf/conf.d:/etc/nginx/conf.d -v /home/report/domain/logs:/var/log/nginx -v /home/report/domain/html:/usr/share/nginx/html --restart=always nginx:latest

部署rocketMQ的流程

  1. 拉取镜像
docker pull rocketmqinc/rocketmq:4.4.0
  1. 新建文件夹

mkdir /home/rocket

  1. 启动docker 容器
    通过 docker 的 -v 参数使用 volume 功能,把你本地的目录映射到容器内的目录上。否则所有数据都默认保存在容器运行时的内存中,重启之后就又回到最初的起点。

docker run -d -p 9876:9876 \
--name rocket-mq \
--restart=always \
-v /home/rocket/data/logs:/root/logs \
-v /home/rocket/data/store:/root/store \
-e "MAX_POSSIBLE_HEAP=100000000" \
rocketmqinc/rocketmq:4.4.0 
  1. 创建配置文件

mkdir /home/rocket/conf 
  1. 在conf文件下面创建文件broker.conf

vim  broker.conf
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
brokerIP1 = 172.16.132.66
#brokerIP1 = {本地公网 IP} #192.168.136.131
  1. 启动容器

docker run -d \
-p 10911:10911 \
-p 10909:10909 \
--name rmqbroker \
--restart=always \
-v /home/rocket/data/broker/logs:/root/logs \
-v /home/rocket/data/broker/store:/root/store \
-v /home/rocket/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf \
--link rmqnamesrv:namesrv \
-e "NAMESRV_ADDR=rocket-mq:9876" \
-e "MAX_POSSIBLE_HEAP=200000000" rocketmqinc/rocketmq:4.4.0 \
sh mqbroker \
-c /opt/rocketmq-4.4.0/conf/broker.conf

docker run -d --name rocketmq -p 9876:9876 \
-v /home/rocket/data:/root/rocketmq/data \
-v /home/rocket/logs:/root/rocketmq/logs \
rocketmqinc/rocketmq sh rocketmq


docker run -d --name rmqbroker --link rocketmq:namesrv \
-e "NAMESRV_ADDR=127.0.0.1:9876" \
-p 10911:10911 -p 10909:10909 \
-v /home/rocket/data:/root/rocketmq/data \
-v /home/rocket/logs:/root/rocketmq/logs \
rocketmqinc/rocketmq sh mqbroker \
-c /home/rocket/conf/broker.conf

#####################
启动一个容器

docker run -d --restart=always --name rmqnamesrv --privileged=true -p 9876:9876 \
-v /home/rocket/logs:/root/logs \
-v /home/rocket/store:/root/store \
-e "MAX_POSSIBLE_HEAP=100000000" rocketmqinc/rocketmq sh mqnamesrv


创建broker.conf配置文件,我的目录是/home/rocket/conf/broker.conf,文件内容如下

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
brokerIP1 = 主机的IP

创建一个broker

 docker run -d --restart=always --name rmqbroker --link rmqnamesrv:namesrv \
 -p 10911:10911 -p 10909:10909 --privileged=true \
 -v /home/rocket/data/broker/logs:/root/logs \
 -v /home/rocket/data/broker/store:/root/store \
 -v /home/rocket/conf/broker.conf:/opt/docker/rocketmq/broker.conf \
 -e "NAMESRV_ADDR=namesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" \
 rocketmqinc/rocketmq sh mqbroker -c /opt/docker/rocketmq/broker.conf

控制台

docker pull pangliang/rocketmq-console-ng
 

启动控制台


docker run -d --restart=always --name rmqadmin \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=172.16.132.66:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" \
-p 8083:8080 pangliang/rocketmq-console-ng
 
docker  run \
--name water-nacos-prod -itd \
 -p 7850:7848 -p 8850:8848 -p 9850:9848 \
--privileged=true \
--restart=always \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e MODE=standalone \
-e PREFER_HOST_MODE=hostname \
-v /home/nacos-prod/logs:/home/nacos/logs \
-v /home/nacos-prod/conf/:/home/nacos/conf/  \
nacos/nacos-server


docker run -d \
--name water-nacos-prod    \                                       
-p 8850:8850 -p 9850:9850 \
--privileged=true \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e MODE=standalone \
-v /home/nacos-prod/logs/:/home/nacos/logs \
-v /home/nacos-prod/conf/:/home/nacos/conf/ \
--restart=always
nacos/nacos-server




docker run --restart=always --name redis01 -it -d -p 6379:6379 \
--privileged=true \
-v /home/redis/redis.conf:/etc/redis/redis.conf \
-v /home/redis/data:/data \
redis \
redis-server /etc/redis/redis.conf \
--appendonly yes 

  • 27
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值