一些docker安装配置以及常见命令

​常用命令

docker 命令

//进去容器内部,找到需要拷贝的文件及目录
docker exec -it 2c2600fb60f8 /bin/bash
​
//将container id为4db8edd86202的容器内elasticsearch.yml文件拷贝到宿主机指定目录下:
docker cp 4db8edd86202:/usr/share/elasticsearch/config/elasticsearch.yml /home/haopeng/es
//复制问价到 容器id为4db8edd86202中
docker cp /home/haopeng/es/elasticsearch.yml  4db8edd86202:/usr/share/elasticsearch/config/
//查看已运行的容器  加上-a 就显示全部的(包含未启动的容器)
docker ps
​
//查看镜像
docker images
​
//删除容器
docker rm 容器ID/容器名
​
//查看日志
docker logs
​
​
启动        systemctl start docker
守护进程重启   sudo systemctl daemon-reload
重启docker服务   systemctl restart  docker
重启docker服务  sudo service docker restart
关闭docker service docker stop
关闭docker systemctl stop docker
​
​

迁移拷贝容器

1. 查看镜像docker images
2.复制镜像文件docker save ngix:luxi -o /root/ngix_test.tardocker save [images name]:[tag] -o /root/ngix_test.tar
3.使用scp 拷贝到其它服务器
scp /root/ngix_test.tar root@192.168.0.11:/root/
4.加载镜像文件
docker load < /root/ngix_test.tar

linux 命令

//解压
unzip -oq /home/data/aa.war -d /home/data/source/aa
​
//cp 复制   mv 移动    [其中 -rf  也可以用来复制文件夹]
cp /home/source/aa.war /home/act/aa.war
mv /home/data/aa.war /home/source/
​
//查看磁盘使用情况
df -h
​
//执行命令脚本 *.sh
sh *.sh

安装虚拟机

此处选择的系统镜像为CentOS-7-x86_64-DVD-2003.iso

根据步骤新建好虚拟机。并进入系统

配置网络

1.点击vm的 编辑->虚拟网络编辑器->NAT设置,查看ip地址信息例如我的子网IP   192.168.63.0 子网掩码  255.255.255.0网关IP   192.168.63.2这里需要记住 网关IP ,要配置到虚拟网卡 VMnet8 上
2.配置VMnet8 ip地址鼠标右键点击网络(wifi图标)->打开网络和Internet设置->更改适配器选项->找到VMnet8 右键属性 ->双击Ipv4设置 例如我的子网IP   192.168.63.1 子网掩码  255.255.255.0网关IP   192.168.63.2dns  8.8.8.8备dns 8.8.4.43.设置cenos7 中ipcd /etc/sysconfig/network-scripts/vi ifcfg-ens33修改内容如下:BOOTPROTO=staticIPADDR=192.168.63.200NETMASK=255.255.255.0GATEWAY=192.168.63.2ONBOOT=yes===修改DNSvi /etc/resolv.conf添加如下内容nameserver 8.8.8.8nameserver 8.8.4.4
4.重启centos7 网络service network restartping www.baidu.com 试试可不可以安装net-tools,执行ifconfig命令查看网卡信息yum install net-tools

项目环境搭建

Centos 7 安装docker

一、安装docker

1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。

通过 uname -r 命令查看你当前的内核版本

$ uname -r

2、使用 root 权限登录 Centos。确保 yum 包更新到最新。

$ sudo yum update

3、卸载旧版本(如果安装过旧版本的话)

$ sudo yum remove docker  docker-common docker-selinux docker-engine

4、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

5、设置yum源

$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

6、可以查看所有仓库中所有docker版本,并选择特定版本安装

$ yum list docker-ce --showduplicates | sort -r

7、安装docker

$ sudo yum install docker-ce  #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0
$ sudo yum install <FQPN>  # 例如:sudo yum install docker-ce-17.12.0.ce
sudo yum install docker-ce-20.10.8 
​

8、启动并加入开机启动

$ sudo systemctl start docker
$ sudo systemctl enable docker

开启docker 2375端口

vi /usr/lib/systemd/system/docker.service

修改ExecStart ,添加 -H tcp://0.0.0.0:2375

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
​

重新加载docker配置

systemctl daemon-reload  //1.加载docker 守护线程
systemctl restart docker //2.重启docker

防火墙开放端口

firewall-cmd --permanent --add-port=2375/tcp
firewall-cmd --reload

9、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)

$ docker version
[root@MServer-1 ~]# docker --version
Client: Docker Engine - CommunityVersion:           20.10.8API version:       1.41Go version:        go1.16.6Git commit:        3967b7dBuilt:             Fri Jul 30 19:55:49 2021OS/Arch:           linux/amd64Context:           defaultExperimental:      true
​
Server: Docker Engine - CommunityEngine:Version:          20.10.8API version:      1.41 (minimum version 1.12)Go version:       go1.16.6Git commit:       75249d8Built:            Fri Jul 30 19:54:13 2021OS/Arch:          linux/amd64Experimental:     falsecontainerd:Version:          1.4.9GitCommit:        e25210fe30a0a703442421b0f60afac609f950a3runc:Version:          1.0.1GitCommit:        v1.0.1-0-g4144b63docker-init:Version:          0.19.0GitCommit:        de40ad0
​

docker 容器占用磁盘空间

  1. 问题 docker容器日志导致主机磁盘空间满了。docker logs -f container_name噼里啪啦一大堆,很占用空间,不用的日志可以清理掉了。

  2. 解决方法 2.1 找出Docker容器日志 在linux上,容器日志一般存放在/var/lib/docker/containers/container_id/下面,查看各个日志文件大小的脚本docker_log_size.sh,内容如下:

    #!/bin/sh 
    echo "======== docker containers logs file size ========"  
    ​
    logs=$(find /var/lib/docker/containers/ -name *-json.log)  
    ​
    for log in $logs  do  ls -lh $log   done
    # chmod +x docker_log_size.sh
    ​
    # ./docker_log_size.sh

    2.2 清理Docker容器日志(治标) 如果docker容器正在运行,那么使用rm -rf方式删除日志后,通过df -h会发现磁盘空间并没有释放。原因是在Linux或者Unix系统中,通过rm -rf或者文件管理器删除文件,将会从文件系统的目录结构上解除链接(unlink)。如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。正确姿势是cat /dev/null > *-json.log,当然你也可以通过rm -rf删除后重启docker。接下来,提供一个日志清理脚本clean_docker_log.sh,内容如下:

    #!/bin/sh 
    echo "======== start clean docker containers logs ========"  
    ​
    logs=$(find /var/lib/docker/containers/ -name *-json.log)  
    ​
    for log in $logs  do  echo "clean logs : $log"  cat /dev/null > $log  done  
    ​
    echo "======== end clean docker containers logs ========"
    # chmod +x clean_docker_log.sh
    ​
    # ./clean_docker_log.sh

    但是,这样清理之后,随着时间的推移,容器日志会像杂草一样,卷土重来。

    2.3 设置Docker容器日志大小(治本) 设置一个容器服务的日志大小上限 上述方法,日志文件迟早又会涨回来。要从根本上解决问题,需要限制容器服务的日志大小上限。这个通过配置容器docker-compose的max-size选项来实现

    nginx: image: nginx:1.12.1 restart: always logging: driver: “json-file” options: max-size: “5g” 

    重启nginx容器之后,其日志文件的大小就被限制在5GB,再也不用担心了。

    全局设置 新建/etc/docker/daemon.json,若有就不用新建了。添加log-dirver和log-opts参数,样例如下:

    # vim /etc/docker/daemon.json
    ​
    {"log-driver":"json-file","log-opts": {"max-size":"500m", "max-file":"3"}
    }

    max-size=500m,意味着一个容器日志大小上限是500M, max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json。

    // 重启docker守护进程
    ​
    # systemctl daemon-reload
    ​
    # systemctl restart docker

    注意:设置的日志大小,只对新建的容器有效。

docker 安装tomcat 7 jdk1.8 项目

一 docker 拉取 tomcat 镜像

1.docker search tomcat7 查询 相关镜像

[root@GServer-1 ~]# docker search tomcat7
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
maluuba/tomcat7                                                                   9                    [OK]
maluuba/tomcat7-java8             Tomcat7 with java8.                             6                    
bbytes/tomcat7                    Tomcat 7 image with easy war deploy from com…   3                    [OK]
mbentley/tomcat7-oracle                                                           2                    [OK]
zhaiweiwei/tomcat7-jdk7           CentOS7.4, JDK1.7.0_79 and Tomcat7.0.82         2                    
mbentley/tomcat7                                                                  2                    [OK]
pgalves/tomcat7                   Tomcat7 container                               1                    
wjw465150/tomcat7                 Dockerfile For Tomcat7                          1                    
dhlzj/tomcat7_jdk8                tomcat7_jdk8                                    1                    
stratice/tomcat7-oracle                                                           1                    [OK]
inovatrend/tomcat7-java7          Tomcat 7 on Java 7                              1                    [OK]
99taxis/tomcat7                   Tomcat7                                         1                    [OK]
picoded/tomcat7                   tomcat7 with jre8 and MANAGER_USER / MANAGER…   1                    [OK]
quintenk/tomcat7                  DEPRECATED in favour of quintenk/tomcat:7  T…   1                    
​

2.docker pull 拉取镜像

docker pull maluuba/tocat7-java8

我是用这个 docker pull tomcat:7-jre8

3 docker image ls 查看镜像

[root@GServer-1 ~]# docker image ls
REPOSITORY              TAG       IMAGE ID       CREATED       SIZE
maluuba/tomcat7-java8   latest    98a0fcf6d133   4 years ago   662MB
​

下载错误。。可以使用docker image rm maluuba/tomcat7-java8【要删除的镜像名】 进行删除 镜像

4 使用 docker run 启动容器

实际使用会加一些参数:

docker run -d -p 8081:8080 \
--name web \
-v /home/data/hao123/web/war/:/usr/local/tomcat/webapps/ \
-v /home/data/hao123/web/logs/:/usr/local/tomcat/logs/ \
tomcat:7-jre8
​
docker run -d -p 7046:8080 -p 9046:9046 \
--name server \
-v /home/data/hao123/server/webapps/:/usr/local/tomcat/webapps/ \
-v /home/data/hao123/server/logs/:/usr/local/tomcat/logs/ \
-v /home/data/hao123/server/conf/server.xml:/usr/local/tomcat/conf/server.xml \
tomcat:7-jre8
​
--name 指定容器的名称,后面可以根据名称停止,启动,删除容器的
-v 把本机的目录与容器内的目录关联起来,我这里把bin目录(方便修改启动文件),webapps目录(方便部署应用),logs目录(方便查看日志),conf目录(方便修改配置文件)都映射出来了
-d让容器在后台启动,如果不加这个参数,容器启动就跟你平时执行catalina.sh run的效果一样,ctrl+c的话tomcat也就停止了
-p 把容器里面监听的端口映射到本机的端口,我这里把8080映射到了本机的8081
还有一些这次没用到的但是常用的参数
-rm关闭容器后直接删除容器,我估计一般就做测试的时候用?容器删了里面的数据啊,配置啊都没啦,下次启动就是个光溜溜的东西了
-e 指定环境变量,比如我们看下mysql官方镜像
里面关于可配置环境变量的介绍,每个变量的含义啥的 

一些错误

//tomcat 启动项目时报这个错误
java.lang.ClassNotFoundException: org.springframework.instrument.classloadin
​
//原因 缺少tomcat 包
​
//添加jar 到tomcat docker 里
docker cp spring-instrument-tomcat-4.2.0.RELEASE.jar 6f61cbd3c9f2:/usr/local/tomcat/lib/
​

docker 安装 postgresql 10

1 拉取 postgesql 10 镜像

docker pull postgres:10

2 启动容器

如果需要 docker 重启时自动启动 加上--restart=always

docker run -d  --name=postgresql10 --net host -v /home/user/pgdata:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 --restart=always postgres:10
​
docker run -d -p 8432:5432 --name=postgresql10_8432  -v /home/user/pgdata8432:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 --restart=always postgres:10
参数说明:
-d:表示在后台启动容器;
-p 5432:5432:容器内部的 5432 端口映射主机的 5432 端口;
--name postgresql:将容器命名为 postgresql
-v /home/user/pgdata:/var/lib/postgresql/data:挂载目录,其中 /home/user/pgdata 是宿主机的目录
-e POSTGRES_PASSWORD=123:数据库 postgres 密码设置为 123

执行 docker ps 命令确认容器启动成功:

3,开放端口

如果服务器开启了防火墙的话,还要执行如下命令开放端口

firewall-cmd --permanent --add-port=5432/tcp
firewall-cmd --permanent --add-port=2375/tcp
firewall-cmd --permanent --add-port=9432/tcp
firewall-cmd --reload
​
​
firewall-cmd --permanent --add-port=3306/tcp
​
firewall-cmd --permanent --add-port=8081/tcp

4。一些sql

--查询活跃连接
select * from pg_stat_activity;
--查询当前连接数
select count(*) from pg_stat_activity;
​
--分组统计连接占用情况
select  datname,usename,client_addr,count(*) as num,query
from pg_stat_activity
where query is not null
group by datname,usename,client_addr,query 
order by num desc;
​
--查看数据库版本
select version();
​
--查看最大连接数
show max_connections;
​
​

docker 安装redis 集群

1.拉取镜像

docker  pull  redis:5.0.5

2 创建 redis 容器

docker create --name redis-node1 -v /data/redis-data/node1:/data -p 6339:6379 redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-1.conf
​
docker create --name redis-node2 -v /data/redis-data/node2:/data -p 6340:6379 redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-2.conf
​
docker create --name redis-node3 -v /data/redis-data/node3:/data -p 6341:6379 redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-3.conf
​
docker create --name redis-node4 -v /data/redis-data/node4:/data -p 6342:6379 redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-4.conf
​
docker create --name redis-node5 -v /data/redis-data/node5:/data -p 6343:6379 redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-5.conf
​
docker create --name redis-node6 -v /data/redis-data/node6:/data -p 6344:6379 redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-6.conf 

3、启动并组建集群

首先通过命令docker start来启动3个Redis容器:

docker start redis-node1 redis-node2 redis-node3 redis-node4 redis-node5 redis-node6docker start redis2-node1 redis2-node2 redis2-node3 redis2-node4 redis2-node5 redis2-node6

执行完运行命令后检查一下容器的启动情况:

docker ps -a

如果出现 Exited (1) 3 seconds ago,可以通过 docker logs 查看

根据日志 进行 修改

组建集群

查看6个Redis在Docker中分配的ip结点信息:

执行「docker inspect redis-node1」得到 redis-node1 ip 信息为:172.17.0.3
执行「docker inspect redis-node2」得到 redis-node2 ip 信息为:172.17.0.4 
执行「docker inspect redis-node3」得到 redis-node3 ip 信息为:172.17.0.5
执行「docker inspect redis-node4」得到 redis-node1 ip 信息为:172.17.0.6 
执行「docker inspect redis-node5」得到 redis-node2 ip 信息为:172.17.0.7 
执行「docker inspect redis-node6」得到 redis-node3 ip 信息为:172.17.0.8

拿到 ip 信息后(每个人的ip信息可能不一样),接下来进入某一个容器进行组建集群:

# 这里以进入 node1 为例
docker exec -it redis-node1 /bin/bash# 接着执行组建集群命令(请根据自己的ip信息进行拼接) 其中 cluser-replicas 1 表示 1个主对应一个从,即三主三从
redis-cli --cluster create 172.17.0.3:6379  172.17.0.4:6379  172.17.0.5:6379 172.17.0.6:6379 172.17.0.7:6379 172.17.0.8:6379 --cluster-replicas 1docker exec -it redis2-node1 /bin/bash
oot@0f537640056b:/data# redis-cli --cluster create 172.17.0.3:6379  172.17.0.4:6379  172.17.0.5:6379 172.17.0.6:6379 172.17.0.7:6379 172.17.0.8:6379 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 172.17.0.7:6379 to 172.17.0.3:6379
Adding replica 172.17.0.8:6379 to 172.17.0.4:6379
Adding replica 172.17.0.6:6379 to 172.17.0.5:6379
M: f8cac8654fc56120b37e2323610e91067769c69b 172.17.0.3:6379slots:[0-5460] (5461 slots) master
M: aac17d1c3e7938cfcede505b557fd6bd128e569c 172.17.0.4:6379slots:[5461-10922] (5462 slots) master
M: 299ebe4735338735271261d8c3748dac60d237bb 172.17.0.5:6379slots:[10923-16383] (5461 slots) master
S: a3459eb5511dd2e6c1586dff1e1bf2163c761a8e 172.17.0.6:6379replicates 299ebe4735338735271261d8c3748dac60d237bb
S: 17720633911622e26aeaa7007541c6a4bae06919 172.17.0.7:6379replicates f8cac8654fc56120b37e2323610e91067769c69b
S: 1fb20460ed08095d120892b0c6e32610ceccf441 172.17.0.8:6379replicates aac17d1c3e7938cfcede505b557fd6bd128e569c
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
......
>>> Performing Cluster Check (using node 172.17.0.3:6379)
M: f8cac8654fc56120b37e2323610e91067769c69b 172.17.0.3:6379slots:[0-5460] (5461 slots) master1 additional replica(s)
M: aac17d1c3e7938cfcede505b557fd6bd128e569c 172.17.0.4:6379slots:[5461-10922] (5462 slots) master1 additional replica(s)
S: a3459eb5511dd2e6c1586dff1e1bf2163c761a8e 172.17.0.6:6379slots: (0 slots) slavereplicates 299ebe4735338735271261d8c3748dac60d237bb
M: 299ebe4735338735271261d8c3748dac60d237bb 172.17.0.5:6379slots:[10923-16383] (5461 slots) master1 additional replica(s)
S: 17720633911622e26aeaa7007541c6a4bae06919 172.17.0.7:6379slots: (0 slots) slavereplicates f8cac8654fc56120b37e2323610e91067769c69b
S: 1fb20460ed08095d120892b0c6e32610ceccf441 172.17.0.8:6379slots: (0 slots) slavereplicates aac17d1c3e7938cfcede505b557fd6bd128e569c
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
root@0f537640056b:/data# 

ok,此时集群搭建完了,我们接下来测试一下。

测试集群

使用 redis-cli -c 命令连接到集群结点,然后 set 值,set 值之后会自动重定向到 0.2 ip地址,然后通过 get 获取一下,获取成功证明集群有效。

root@0f537640056b:/data# redis-cli -c 
127.0.0.1:6379> set test 11231
-> Redirected to slot [6918] located at 172.17.0.4:6379
OK
172.17.0.5:6379> set test3 test3
OK
172.17.0.5:6379> set test4 test4
-> Redirected to slot [517] located at 172.17.0.3:6379
OK
172.17.0.3:6379> set test5 test5
OK
172.17.0.4:6379> get test
"11232"
172.17.0.4:6379> get test3
-> Redirected to slot [13026] located at 172.17.0.5:6379
"test3"
172.17.0.5:6379> get test4
-> Redirected to slot [517] located at 172.17.0.3:6379
"test4"
172.17.0.3:6379> get test5
"test5"

4、存在的问题-直接从这装

按照如上的步骤,虽然集群搭建成功了,但其实还是有点问题的,由于集群结点中的 ip地址 是docket内部分配的,如:172.17.0.2 等,如果使用 redis集群 的项目跟集群不在一台服务器上,那么项目是没法使用集群的,因为是访问不通的。

img

一种解决方案是让Docker使用 host模式 的网络连接类型,Docker在使用host模式下创建的容器是没有自己独立的网络命名空间的,是跟物理机共享一个网络空间,进而可以共享物理机的所有端口与IP,这样就可以让公共网络直接访问容器了,尽管这种方式有安全隐患,但目前来说还没找到其他可行性模式。

就存在的问题我们重新采用 host模式,重新创建一下容器:

1、停止已运行的容器
docker stop redis-node1 redis-node2 redis-node3
2、删除之前创建的容器
docker rm redis-node1 redis-node2 redis-node3# 清空上面创建的配置文件
rm -rf /data/redis-data/node*
3、重新基于host模式创建
docker create --name redis-node1 --restart=always --net host -v /data/redis-data/node1:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-1.conf --port 6339docker create --name redis-node2 --restart=always --net host -v /data/redis-data/node2:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-2.conf --port 6340docker create --name redis-node3 --restart=always --net host -v /data/redis-data/node3:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-3.conf --port 6341docker create --name redis-node4 --restart=always --net host -v /data/redis-data/node4:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-4.conf --port 6342docker create --name redis-node5 --restart=always --net host -v /data/redis-data/node5:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-5.conf --port 6343docker create --name redis-node6 --restart=always --net host -v /data/redis-data/node6:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-6.conf --port 6344

跟之前创建命令不同,一是指定了 --net 网络类型为 host,二是这种情况下就不需要端口映射了,比如 -p 6379:6379,因为此时需要对外共享容器端口服务,所以只需要指定对外暴露的端口 -p 6379-p 6380 等。

img

4、启动容器并组建集群
# 启动命令
docker start redis-node1 redis-node2 redis-node3 redis-node4 redis-node5 redis-node6# 进入某一个容器
docker exec -it redis-node1 /bin/bash
docker exec -it redis-node2 /bin/bash
docker exec -it gs-redis-node1 /bin/bash
docker exec -it redis1 /bin/bash
# 组建集群,10.211.55.4为当前物理机的ip地址
redis-cli --cluster create 192.168.0.51:6339 192.168.0.51:6340 192.168.0.51:6341 192.168.0.51:6342 192.168.0.51:6343 192.168.0.51:6344 --cluster-replicas 1redis-cli --cluster create 192.168.0.51:6339 192.168.0.51:6340 192.168.0.51:6341 192.168.0.51:6342 192.168.0.51:6343 192.168.0.51:6344 --cluster-replicas 1redis-cli --cluster create 127.0.0.1:6339 127.0.0.1:6340 127.0.0.1:6341 127.0.0.1:6342 127.0.0.1:6343 127.0.0.1:6344 --cluster-replicas 1redis-cli --cluster create 172.:6339 192.168.0.51:6340 192.168.0.51:6341 192.168.0.51:6342 192.168.0.51:6343 192.168.0.51:6344 --cluster-replicas 1redis-cli --cluster create 192.168.0.52:6339 192.168.0.52:6340 192.168.0.52:6341 192.168.0.52:6342 192.168.0.52:6343 192.168.0.52:6344 --cluster-replicas 1redis-cli --cluster create 192.168.0.52:6239 192.168.0.52:6240 192.168.0.52:6241 192.168.0.52:6242 192.168.0.52:6243 192.168.0.52:6244 --cluster-replicas 1redis-cli --cluster create 192.168.0.52:6139 192.168.0.52:6140 192.168.0.52:6141 192.168.0.52:6142 192.168.0.52:6143 192.168.0.52:6144 --cluster-replicas 1redis-cli --cluster create 172.104.206.78:6339 172.104.206.78:6340 172.104.206.78:6341 172.104.206.78:6342 172.104.206.78:6343 172.104.206.78:6344 --cluster-replicas 1

img

5、查看集群信息
root@DataService:/data# redis-cli -h 192.168.0.51 -p 6339
192.168.0.51:6339> cluster nodes
c4b611659e7c9665f266d08b871a691efb9affcb 192.168.0.51:6344@16344 slave 366eed1c8f8bd989ed9be059cce78935a01cd1b5 0 1632380133162 6 connected
86e4a315f6aae61a4b179ec59be23b66751dc2dd 192.168.0.51:6339@16339 myself,master - 0 1632380129000 1 connected 0-5460
366eed1c8f8bd989ed9be059cce78935a01cd1b5 192.168.0.51:6340@16340 master - 0 1632380132000 2 connected 5461-10922
15402c4a352f18a61048645a1541be8ffadc5677 192.168.0.51:6343@16343 slave 86e4a315f6aae61a4b179ec59be23b66751dc2dd 0 1632380132161 5 connected
da54b28dedefac73c0d3ee82070da324a701b64a 192.168.0.51:6341@16341 master - 0 1632380131000 3 connected 10923-16383
032259d8cf6c04e21e6d73e84e98e95977776991 192.168.0.51:6342@16342 slave da54b28dedefac73c0d3ee82070da324a701b64a 0 1632380131157 4 connected
192.168.0.51:6339> 
6、测试集群

使用 redis-cli -c 连接到集群上,set一个值,然后从其他节点再获取值查看是否成功:

 root@DataService:/data# redis-cli -c -h 192.168.0.51 -p 6339 
192.168.0.51:6339> get cc
"cc"
192.168.0.51:6339> get nn
-> Redirected to slot [9549] located at 192.168.0.51:6340

img

至此,本次基于Docker的Redis集群单副本模式算是搭建好了,文中3个redis都是用的主节点,关于多副本、主从架构高可用在后文补充。

7 防火墙

客户端测试 时发现取不到数据。

redis.clients.jedis.exceptions.JedisConnectionException: no reachable node in cluster

查询发现有可能时 防火墙问题。

后面把防火墙 关闭 就行了

一、iptables防火墙 1、基本操作

# 查看防火墙状态

service iptables status

# 停止防火墙

service iptables stop

# 启动防火墙

service iptables start

# 重启防火墙

service iptables restart

# 永久关闭防火墙

chkconfig iptables off

# 永久关闭后重启

chkconfig iptables on  

2、开启80端口

vim /etc/sysconfig/iptables # 加入如下代码 -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT 保存退出后重启防火墙

service iptables restart 二、firewall防火墙 1、查看firewall服务状态

systemctl status firewalld

出现Active: active (running)切高亮显示则表示是启动状态。

出现 Active: inactive (dead)灰色表示停止,看单词也行。 2、查看firewall的状态

firewall-cmd --state 3、开启、重启、关闭、firewalld.service服务

# 开启 service firewalld start # 重启 service firewalld restart # 关闭 service firewalld stop 4、查看防火墙规则

firewall-cmd --list-all 5、查询、开放、关闭端口

# 查询端口是否开放 firewall-cmd --query-port=8080/tcp # 开放80端口 firewall-cmd --permanent --add-port=80/tcp # 移除端口 firewall-cmd --permanent --remove-port=8080/tcp #重启防火墙(修改配置后要重启防火墙) firewall-cmd --reload

# 参数解释 1、firwall-cmd:是Linux提供的操作firewall的一个工具; 2、--permanent:表示设置为持久; 3、--add-port:标识添加的端口;

docker 安装Zookeeper

下载zookeeper 镜像

docker pull zookeeper

=启动并添加映射

docker run --privileged=true -d --name zookeeper --net host --publish 2181:2181 -d zookeeper:latest

docker 安装 rocket MQ

1.查询镜像 docker search rocketmq
2:查看某一个镜像里面的所有版本(如foxiswho/rocketmq)curl https://registry.hub.docker.com/v1/repositories/foxiswho/rocketmq/tags\| tr -d '[\[\]" ]' | tr '}' '\n'\| awk -F: -v image='foxiswho/rocketmq' '{if(NR!=NF && $3 != ""){printf("%s:%s\n",image,$3}}'
3:启动NameServerdocker run -d -p 9876:9876 --name rmqserver --net host --restart=always  foxiswho/rocketmq:server-4.3.2docker run -d -p 9876:9876 --name rmqserver --restart=always  foxiswho/rocketmq:server-4.3.2docker run -d -p 9999:9876 --name rmqserver-hp foxiswho/rocketmq:server-4.3.2

如果需要 docker 重启时自动启动 加上--restart=always

4:启动Brokerdocker run -d -p 10911:10911 -p 10909:10909\--name rmqbroker --restart=always --link rmqserver:namesrv\-e "NAMESRV_ADDR=namesrv:9876" -e "JAVA_OPTS=-Duser.home=/opt"\-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m"\foxiswho/rocketmq:broker-4.3.2
5:安装Consoledocker run -d --name rmqconsole -p 8180:8080 --link rmqserver:namesrv\-e "JAVA_OPTS=-Drocketmq.namesrv.addr=namesrv:9876\-Dcom.rocketmq.sendMessageWithVIPChannel=false"\-t styletang/rocketmq-console-ng
6:查看是否安装成功docker ps|grep rocketmq
7:再服务器上会存在跨域,
com.alibaba.rocketmq.remoting.exception.RemotingConnectException: connect to <172.17.0.4:10911> failed解决:
修改服务器中broker的配置,添加服务器IP(公网)即可
docker exec -it rmqbroker /bin/bashvi /etc/rocketmq/broker.conf
最后增加
brokerIP1=xx.xx.xx.xx退出重启
docker restart rmqbroker
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
brokerIP1=192.168.0.52
#Broker 对外服务的监听端口
listenPort=10911
#主要用于slave同步master
fastListenPort=10909

docker 安装 portainer

1.查询镜像

docker search portainer

2.拉取 镜像

docker pull portainer/portainer

【不写 版本拉取的为最新版本的,也可以指定版本】

3 创建容器

本机模式

docker create -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock --restart=always --name prtainer portainer/portainer

远程模式

docker run -d -p 9000:9000 --restart=always --name prtainer portainer/portainer

4 运行容器

docker start prtainer

5.访问Portainer容器

http://IP:9000

  • 首次登录需要设置admin的密码

  • 选择docker连接

    • 选择Local,代表本地模式,portainer仅管理本机的docker容器

    • 选择Remote,代表远程模式,名称随意,在Endpoint URL中填写docker节点的地址:docker远程端口(docker安装教程中的设置的-H 0.0.0.0:2375中的2375

开启docker 2375端口

vim /usr/lib/systemd/system/docker.service

修改ExecStart ,添加 -H tcp://0.0.0.0:2375

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375

重新加载docker配置

systemctl daemon-reload  //1.加载docker 守护线程
systemctl restart docker //2.重启docker

防火墙开放端口

firewall-cmd --permanent --add-port=2375/tcp
firewall-cmd --reload

6.对需要的项目设置 docker 重启时自动重启

也可以在容器 启动时 加--restart=always

可以在 portainer上操作

containers -> 点击你要改的容器 -> Actions 里的【Duplicat/Edit】 -> 拉到底部 Advanced Container settings -> Restart plicy -> 选择 Always

然后 Deploy the container 重新部署

7 iptables 错误

[root@7con ] pkill docker                         #终止进程
[root@7con ] iptables -t nat -F                 	 #清空nat表的所有链
[root@7con ] ifconfig docker0 down        		 #停止docker默认网桥
--	 yum install -y net-tools
[root@7con ] yum install bridge-utils -y	# 部分机器是无法使用brctl,所以需要提前安装
[root@7con ] brctl delbr docker0                  #删除网桥  
[root@7con ] systemctl restart docker             #重启docker

docker 安装 jenkins

 

安装

拉取镜像

我这里安装的版本是2.222.3-centos,可以去这里获取你需要的版本: https://hub.docker.com/_/jenkins?tab=tags

docker pull jenkins/jenkins:2.222.3-centosdocker pull jenkins/jenkins 拉取 最新的镜像

创建本地数据卷

mkdir -p /data/jenkins_home/

需要修改下目录权限,因为当映射本地数据卷时,/data/jenkins_home/目录的拥有者为root用户,而容器中jenkins用户的 uid 为 1000

# chown -R 1000:1000 /data/jenkins_home/

创建容器

docker run -d --name jenkins2 -p 8080:8080 -p 50000:50000 -v /data/jenkins_home2:/var/jenkins_home jenkins/jenkins:2.222.3-centos----  --privileged=true 
docker create -it --privileged=true  --name jenkins -p 8080:8080 -p 50000:50000 -v /data/jenkins_home:/var/jenkins_home jenkins/jenkins:2.222.3-centos

-d 标识是让 docker 容器在后台运行 --name 定义一个容器的名字,如果没有指定,那么会自动生成一个随机数字符串当做UUID -p 8040:8080 端口映射,我本地的8080被占用了,所以随便映射了一个8040 -p 50000:50000 端口映射 -v /data/jenkins_home:/var/jenkins_home 绑定一个数据卷,/data/jenkins_home是刚才创建的本地数据卷

访问 jekins http://ip:8040

为了确保管理员安全地安装 Jenkins,密码已写入到日志中(不知道在哪里?)该文件在服务器上:

/var/jenkins_home/secrets/initialAdminPassword

而我们已经把 jenkins_home 文件夹映射到 /data/jenkins_home 了 因此,在 /data/jenkins_home/secrets/initialAdminPassword 上获取密码

使用

1.安装插件  Manage Jekins->Manage Plugins1)安装推荐插件 2)安装maven插件  git插件3)安装Publish Over SSH 插件, 用来把打包后的项目发布到远程服务器4)安装Config File Provider Plugin 插件, 配置文件管理
2.系统配置 Configure System1)执行者数量  配置同时执行的最大数量2)SSH Servers 远程服务器配置name 名称  示例:gs11host 主机	 示例:192.168.0.11Username 登录主机的账号  示例:rootRemote Directory  对应主机的目录,连接远程服务器时对应的目录 示例:/home/data 即 上传时直接上传到/home/data/  目录下
3.全局配置 Manage Jekins->Golbal Tool Configuration1) Maven 配置默认settings 提供 选择 Provided settings.xml 选择在 自己配置的settings.xml(Managed files中设置好的)2)JDK 选择你的JDK版本,这里我安装的1.8版本JAVA_HOME 填写 安jdk安装路径3)Gitgit安装路径4)Maven 选择你要的版本。我选择的时3.3.9
4.Manage Jekins-> Managed files1)添加Maven的setttings.xmlAdd a new Config-> 勾选 Maven settings.xml 输入 name 名称 Comment 描述Replace AllContent 内容 中 增加你的maven 仓库私服 信息我这只加了<server><id>public</id><username>admin</username><password>123123</password></server><server><id>snapshots</id><username>admin</username><password>123123</password></server>服务配置,用来把maven项目打包后,发送到私服仓库中
5.Manage Jekins->Security-> Manage Credentials 凭证管理(密码管理)右上角 Dashboard>凭据  鼠标放上去后。有个向下的箭头出现系统,鼠标放上去,出现 添加域 添加一个git 域  即 填写下域名就行填写完后,点击系统,出现全部域点击域添加凭据

添加项目,打包后发送到maven的私服仓库

1)新建Item

输入任务名, 选择 Maven 项目(如果没有该选项,需要 添加Maven 插件)

2)配置General

.描述  即 对该项目的描述

3) 源码管理

.选择Git  Repositories Url git地址Credentials  选择git的凭证,(没有的话需要在设置中添加)选择分支  默认*/master
 

出现stderr: No ECDSA host key问题

ssh key 生成
进入jenkins容器:docker exec -it jenkins /bin/bash
生成SSH密钥:ssh-keygen,一路回车使用默认值
查找密钥:cat /var/jenkins_home/.ssh/id_rsa.pub
复制公钥 到 git仓库 上 添加ssh key
查找私钥:cat /var/jenkins_home/.ssh/id_rsa
复制私钥到jenkins 上
发现 出现 stderr: No ECDSA host key 错误。并且它提示“git ls-remote -h -- git@repos.com:server/framework.git HEAD”这是由于新机器。git不信任抛出的错误,因此需要执行 这个命令,授信一下, 这个问题就可以解决了

4)构建触发器

Build whenever a SNAPSHOT dependency is built 勾选   每当生成快照依赖项时生成

5)Build

.Root POM  根据pom.xml 进行打包 
.Goals and options  clean  package
.点开高级Settings file 选择 Provided settings.xml 选择你配置的 settings.xml

6)构建后操作

选择  Deploy artifacts to Maven repository

添加项目,打包后发送到远程服务器重启docker容器

基本相同。不同点:1)构建环境勾选 Send files or execute commands over SSH after the build runs (打包后发送到远程服务器)SSH server 选择你要的服务器Transfer SetSource files    target/service-manager.war  对应的文件Remove prefix   target/   要去除的前缀Remote directory  /service/   上传后放的目录 (注:这里的需要结合你配置的SSH server的目录如:我SSH server 中有配置连接目录/root,那么 这个打包后会把 service-manager.war 发送到服务器的/root/service/ 目录下)Exec command  发布后执行的命令rm -rf /home/data/manager/service/war/*     mv /home/data/war/service/* /home/data/manager/service/wardocker restart manager-service注:删除容器下项目的内容, 把war包移动到 对应的目录下, 最后重启docker 容器(其中docker容器是里有tomcat,/home/data/manager/service/war/映射的是tomcat里的weapps)

jenkins 打包cocos 项目

jenkins 是在windows底下, cocos打包 需要在 windows 服务器上安装 CocosDashboard

Cocos Creator - 高效轻量的跨平台3D/2D图形引擎

然后在下载 Cocos Creator 这里 我们使用的Cocos Creator 版本是 2.4.6

jenkins 新增cocos项目

1.新增一个 Freestyle project 项目
2.配置源码管理。
3.在构建里选择 Execute Windows batch command。  执行windows 批处理命令cocos的打包命令。 Cocos Creator的绝对路径C:\CocosDashboard_1.0.18\creator\CocosCreator_v2.4.6_20210727_win/CocosCreator.exe --path . --build "platform=web-mobile;debug=true; md5Cache=true"
4.保存

直接执行项目 会发现。在settings language 卡住。 于是百度教程发现 需要改jenkins的用户权限

右键点击此电脑 -> 管理 -> 服务 -> 找到jenkins 右键 -> 属性 -> 登录 -> 勾选此账户 -> 输入当前登录的管理员账号和密码( 注: 如果登录的管理员账号没有密码 去设置一个。不然还是不行)
最后右键jenkins  重新启动

经过上面配置后,发现 不会卡在settings language了,但是在build woker 又卡主了。而且等待好久好久之后,才会报错“getParameter” is null 错误。

而cocos 打包的命令。在服务器上cmd命令窗口直接执行是没问题的。

因此又各种百度,不得其所

后面再cocos 的论坛中搜索jenkins 打包卡住问题,发现通道中人很多。

Jenkins构建项目卡住 - Creator 2.x - Cocos中文社区

于是一顿好找。

发现有人说卡主是卡在掉用GUI时权限不够,导致卡顿。说在2.1 版本以前 改用户权限用,在版本之后,需要弄成代理模式。

于是参试改成代理模式

1. Manage jenkins -> manage Nodes and Clouds ->新建节点输入节点名称。windows -》确定
2.开始配置节点西信息名称  windows描述  用来执行有window命令任务的代理节点执行器数量  1远程工作目录  C:\windowsJenkinsAgent标签用法 Only build jobs with label expressions matching this node启动方式  Lauch agent by connecting it to the masterUse Websock 勾选保存	
3.jenkins 设置启动方式中如果没有Lauch agent by connecting it to the master需要开启 Manage Jenkins -》 Configure Global Security 代理选择: 随机选取
4.下载节点文件在代理机上下载。(我直接使用服务器,即在服务器上下载)如果服务器有装java 执行环境 ,就点Launch那个黄色的 下载。如果只是有jdk,不是可直接执行环境,那么可以选择命令执行,下载jar包,把jar 拷贝到 jdk/bin 目录下,然后cmd 命令窗口 切换到 jdk/bin 目录,执行 刚才页面的命令
5.刷新节点,发现已经连接成功了
6.打开 cocs 项目的打包任务。 -》  配置 在general 下限制项目的运行节点 勾选  -》  输入 代理的节点名称  windows保存
7.build now 执行任务,发现 就可以执行成功了

创建linux 代理用来打包 node js 项目

1. 创建node js 环境2.创建代理工作空间mkdir /home/data/jenkinsWork
3.jenkins 创建节点
4.拷贝agent.jar 到工作目录,按代码启动代理节点
安装git
1. yum install git

docker 安装elasticsearch

0.准备

1.设置max_map_count不然会启动不起来

查看max_map_count的值 默认是65530

cat /proc/sys/vm/max_map_count

重新设置max_map_count的值

sysctl -w vm.max_map_count=262144

2.下载镜像并运行

#拉取镜像
docker pull elasticsearch:6.6.2#启动镜像
docker run --name elasticsearch -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 elasticsearch:6.6.2 docker run --name es -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" --restart=always -e "discovery.type=single-node" -v /data/elk6/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/elk6/es/data:/usr/share/elasticsearch/data -p 9200:9200 -p 9300:9300 elasticsearch:6.6.2 mkdir -p /data/elk6/es/config
mkdir -p /data/elk6/es/datavi /data/elk6/es/config/elasticsearch.yml
cluster.name: "escluster-dev"
network.host: 0.0.0.0
http.cors.enabled: true 
http.cors.allow-origin: "*"

3.修改docker 中的elasticsearch 的elasticsearch.yml文件

docker exec -it elasticsearch /bin/bash (进不去使用容器id进入)vi config/elasticsearch.yml

在最下面添加2行

http.cors.enabled: true 
http.cors.allow-origin: "*"

作用时 避免跨域问题。

4 重启容器

docker restart elasticsearch

5.安装elasticsearch-head

#拉取镜像
docker pull mobz/elasticsearch-head:5#创建容器
docker create --name elasticsearch-head -p 9100:9100 mobz/elasticsearch-head:5#启动容器
docker start elasticsearch-head
or
docker start 容器id (docker ps -a 查看容器id ) 

6 ElasticSearch-head 操作时不修改配置,默认会报 406错误码

#复制vendor.js到外部
docker cp fa85a4c478bf:/usr/src/app/_site/vendor.js /usr/local/#修改vendor.js
vim vendor.js

修改两处地方

1. 6886行contentType: "application/x-www-form-urlencoded" 改成 contentType: "application/json;charset=UTF-8"
2. 7574 行 var inspectData = s.contentType === "application/x-www-form-urlencoded" &&改成var inspectData = s.contentType === "application/json;charset=UTF-8" && 

修改完成再复制回容器

docker cp /usr/local/vendor.js  fa85a4c478bf:/usr/src/app/_site

重启elasticsearch-head

docker restart 容器id

docker 安装 kibana

安装的版本要跟 elasticsearch 对应,即 如果elasticsearch 下载的时 6.6.2 版本,那么kibana就下载6.6.2版本

下载镜像

docker pull kibana:6.6.2

配置文件

mkdir -p /data/elk6/kibana/config/
vi /data/elk6/kibana/config/kibana.ymlvi /data/elk6/kibana2/config/kibana.ymlvi /data/elk6/kibana3/config/kibana.yml
#
# ** THIS IS AN AUTO-GENERATED FILE **
## Default Kibana configuration for docker target
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://127.0.0.1:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true 

注意:请根据实际情况,修改elasticsearch地址。

启动

  docker run -d \--name=kibana \--restart=always \-p 5601:5601 \--allow-root \-v /data/elk6/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml \kibana:6.6.2

查看日志

docker logs -f kibana

git@192.168.0.28:game/client/cocos-india-game.gitC:\CocosDashboard_1.0.18\creator\CocosCreator_v2.4.6_20210727_win/CocosCreator.exe --path . --build "platform=web-mobile;debug=true; md5Cache=true"C:\CocosDashboard_1.0.18\creator\CocosCreator_v2.4.6_20210727_win/CocosCreator.exe --path . --build "platform=web-mobile;debug=true; md5Cache=true"<span>${views.menu['menu.api']}</span>
"${views.common['nicknameAccurateQuery']}"

连不 上es

{"type":"log","@timestamp":"2022-06-21T09:19:10Z","tags":["warning","elasticsearch","data"],"pid":1,"message":"Unable to revive connection: http://192.168.0.52:8700/"}
{"type":"log","@timestamp":"2022-06-21T09:19:10Z","tags":["warning","elasticsearch","data"],"pid":1,"message":"No living connections"}
{"type":"log","@timestamp":"2022-06-21T09:19:10Z","tags":["license","warning","xpack"],"pid":1,"message":"License information from the X-Pack plugin could not be obtained from Elasticsearch for the [data] cluster. Error: No Living connections"}
{"type":"log","@timestamp":"2022-06-21T09:19:10Z","tags":["warning","elasticsearch","admin"],"pid":1,"message":"Unable to revive connection: http://192.168.0.52:8700/"}
{"type":"log","@timestamp":"2022-06-21T09:19:10Z","tags":["warning","elasticsearch","admin"],"pid":1,"message":"No living connections"}

nuxes3 启动

1.管理员打开命令窗口
2.切换到nexus 的bin目录
cd  C:\server\nexus\nexus-3.20.1-01-win64\nexus-3.20.1-01\bin 
3.启动
nexus /run
sudo docker run -d --net=host --name nexus3 --restart=always -p 8088:8088 -p 8081:8081 -p 5000:5000 -v /var/lib/nexus-data:/nexus-data sonatype/nexus3 3

1.查找镜像

docker search nexus

2.拉取镜像

docker pull sonatype/nexus3

3.启动容器

#创建挂载目录
mkdir -p /home/nexus/nexus-data
#启动nexus时可能会遇到权限的问题,赋予最高权限
chmod 777 /home/nexus/nexus-data
docker run -d --name nexus3 -p 9081:8081 -p 9082:8082 -p 9083:8083 -v /home/nexus/nexus-data:/nexus-data sonatype/nexus3
## -v /home/nexus/nexus-data:/nexus-data 将数据挂载到宿主机
## 8081:nexus3网页端
## 8082:docker(hosted)私有仓库,可以pull和push
## 8083:docker(proxy)代理远程仓库,只能pull

docker 搭建ftp服务器

1,拉取镜像 :docker pull fauria/vsftpd
2,启动容器: 参数说明
/home/ftp:/home/vsftpd:映射 docker 容器 ftp 文件根目录(冒号前面是宿主机的目录)
-p:映射 docker 端口(冒号前面是宿主机的端口)
-e FTP_USER=test -e FTP_PASS=test :设置默认的用户名密码(都为 test)
PASV_ADDRESS:宿主机 ip,当需要使用被动模式时必须设置
PASV_MIN_PORT~ PASV_MAX_PORT:给客服端提供下载服务随机端口号范围,默认 21100-21110,与前面的 docker 端口映射设置成一样
-d 后台运行,  20:20分别为宿主机端口和容器端口,容器端口可重复,宿主机端口不能重复 , -v 挂载目录,将宿主机的 /home/ftp 挂载到容器中的 /home/vsftpd
-e 设置环境变量(以下是被动模式)  –network 连接容器到一个网络 , --name 给容器取个名称,容器重启策略 --restart=always表示在容器退出时总是重启容器docker run -d -v /home/ftp:/home/vsftpd -p 20:20 -p 21:21 -p  21100-21110:21100-21110 -e FTP_USER=test -e FTP_PASS=test -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 --name vsftpd --restart=always fauria/vsftpd3,控制台安全组配置开放端口范围 21100-211104,新建用户文件夹1)进入到容器里面  docker exec -it vsftpd bash2)可以看到在  /home/vsftpd/  文件夹下面有个 test 文件夹,启动的时候设置用户名为 test 已经自动创建了对应的 test 用户文件夹3)在 test 用户文件夹下新建一个 1.txt 文件,用来访问该文件, vi /home/vsftpd/test/1.txt    (由于挂载到了宿主机的 /home/ftp 目录,所以也可以在容器外面的 /home/ftp 目录下创建文件)5,使用浏览器进行访问ftp://test:test@39.97.240.142:21
6,如果不想使用 test 用户,可以新增一个用户1)进入到容器里面: docker exec -it vsftpd bash2)创建新用户的文件夹: mkdir /home/vsftpd/payne3)编辑用户配置文件: vi /etc/vsftpd/virtual_users.txt  里面已经有了 test  test  ,添加一个 payne 123456 保存4)执行以下命令,把登录的验证信息写入数据库: /usr/bin/db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db5)退出重启  exit docker restart vsftpd 7,使用 FileZilla 连接的话,站点管理器中选择如下8, 如果在 test 目录下新建一个文件夹 sca_2/ ,chown -R  设置目录以及其子目录下的所有文件的独写权限,需要超级用户 root 的权限才能执行此命令。chown root /home/vsftpd/test    更新 test 所属者为 root ,更新 test 所属组为 chgrp newgroup /home/vsftpd/test,如果在宿主机上使用 root 用户建的目录,挂载对应的容器里面的 test 目录的权限就是 root ,此时使用 test 用户登录到 ftp 由于 test 目录(所属 root 用户)的权限限制会无法操作,需要在 /home/vsftpd/test 目录下 chmod -R 777 sca_2/ 修改权限,公共独写执行权限, test 连接上 ftp 后就能够操作该目录chmod -R 777,第一个7代表文件所属者的权限,第二个7代表文件所属者所在组的权限,第三个7代表其它用户的权限 775 中 5表示读和执行  4 是读  2 写 1 执行-R 是递归遍历子目录9,使用 compose,在 /data/compose/bin/docker-compose.yml 中:version: '2'services:ftp:image: fauria/vsftpdcontainer_name: ftpnwrestart: alwaysnetworks:smart-network:aliases:- ftpnwports:- 20-21:20-21- 21100-21200:21100-21200environment:TZ: "Asia/Shanghai"PASV_ENABLE: "YES"PASV_ADDR_RESOLVE: "YES"PASV_ADDRESS: 172.26.83.31PASV_MIN_PORT: "21100"PASV_MAX_PORT: "21200"FTP_USER: adminFTP_PASS: adminIDLE_SESSION_TIMEOUT: 0volumes:- ../ftp/data:/home/vsftpd- ../ftp/logs:/log/vsftpd- ../ftp/conf/vsftpd.conf:/etc/vsftpd/vsftpd.confnetworks:smart-network:driver: bridge../ftp/conf/vsftpd.conf 的内容:# Run in the foreground to keep the container running:
background=NO# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO# Uncomment this to allow local users to log in.
local_enable=YES## Enable virtual users
guest_enable=YES## Virtual users will use the same permissions as anonymous
virtual_use_local_privs=YES# Uncomment this to enable any form of FTP write command.
write_enable=YES## PAM file name
pam_service_name=vsftpd_virtual## Home Directory for virtual users
user_sub_token=$USER
local_root=/home/vsftpd/$USER# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
chroot_local_user=YES# Workaround chroot check.
# See https://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/
# and http://serverfault.com/questions/362619/why-is-the-chroot-local-user-of-vsftpd-insecure
allow_writeable_chroot=YES## Hide ids from user
hide_ids=YES## Enable logging
xferlog_enable=YES
xferlog_file=/var/log/vsftpd/vsftpd.log## Enable active mode
port_enable=YES
connect_from_port_20=YES
ftp_data_port=20##?Disable seccomp filter sanboxing
seccomp_sandbox=NO
pasv_addr_resolve=YES
pasv_enable=YES
pasv_address=172.26.83.31
pasv_max_port=21200
pasv_min_port=21100
idle_session_timeout=0
pasv_enable=YES
xferlog_std_format=NO
reverse_lookup_enable=YES
pasv_promiscuous=NO
pasv_address=172.26.83.31
pasv_max_port=21200
pasv_min_port=21100
pasv_addr_resolve=YES
pasv_enable=YES
file_open_mode=0666
local_umask=077
xferlog_std_format=NO
reverse_lookup_enable=YES
pasv_promiscuous=NO
port_promiscuous=NO

MySql数据库迁移到PostgreSQL

1.分别建立连接需要数据传输的MySQL、PostgreSQL 数据库。2.MySQL连接中,选中数据源数据库,右击,在菜单中选中【数据传输】。3.【数据传输】窗口,【常规】页面中,左边配置数据源数据库,右面选择连接配置目的数据库(这里即连接的postgresql数据库)。4.【数据传输】窗口,【高级】页面中,选中【转换对象名为】以及下面的【小写】。5.点击【开始】按钮,等待结束。PS:传输的新数据库可能索引或主键不全,需要自行补全 

git 生成 ssh key

 ssh-keygen -t rsa -C "你的邮箱"

另外一种

1. 在桌面右击 选择git bash here
2.配置全局的用户名和邮箱,输入如下命令git config --global user.name "自定义用户名"git config --global user.email "邮箱"3. 输入ssh-keygen命令 一路回车4.成功之后id_rsa,id_rsa.pub两个文件默认在user/.ssh目录下。5.pub 公钥 复制到git上
 

linux 安装vue环境

1.安装node js

1.设置源curl -sL https://rpm.nodesource.com/setup_14.x | bash -
2.安装yum install -y nodejs--查看版本号[root@ciserver ~]# node -vv16.17.1[root@ciserver ~]# npm -v8.15.03. 

linux 安装jdk

yum install -y java-11-openjdk-static-libs.x86_64

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/823828.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git出现错误 fail to push some refs to “xxx“

问题产生原因&#xff1a;根据测试猜测造成这一错误的原因是在码云的远程仓库上删除了一个文件,本地没有pull下来,直接进行了commit,commit到本地仓库后,如果在pull下来,也是无法提交的 问题解决办法: 使用 git pull --rebase,拉取远程仓库,并将本地仓库新的提交作为最顶层的提…

张大哥笔记:电脑周边的10大刚需创业小项目

hello&#xff0c;大家好&#xff0c;我是张大哥&#xff0c;今天一口气给大家分享围绕电脑周边的10大刚需创业小项目&#xff0c;本文章旨在帮助大家如何快速切入到细分领域里面搞钱&#xff01; 如何赚钱&#xff0c;无非就是解决人群痛点&#xff0c;你要懂得根据用户痛点去…

实现 Table 的增加和删除,不依赖后端数据回显

需求 删除前 删除后 分析 首先写一个 Table <a-card style"width:100%"><template#extra><a-button type"text" click"addSelectItem" style"margin-right: 5px">添加</a-button><a-button type&quo…

融合创新!全局特征+局部特征,性能优于Transformer

在图像处理领域&#xff0c;全局特征和局部特征融合是一种常见且十分高效的策略&#xff0c;用于提高图像分析和识别任务的性能。 全局特征反映了图像的整体属性&#xff0c;如颜色分布、形状轮廓等&#xff0c;它们通常对图像的尺度和旋转具有不变性。 局部特征关注于图像中特…

python 如何获得重定向输入

通过内置的fileinput模块即可实现&#xff0c;创建文件filein.py&#xff1a; #!/usr/bin/env python import fileinput f_input fileinput.input() for line in f_input:print(line, end)增加可执行权限&#xff1a; chmod ax filein.py 使用&#xff1a; $ ls | ./filein.py…

Latex学习(从入门到入土)2

第一章 &#xff1a;插图 在LaTeX中插入插图可以通过graphicx宏包来实现&#xff0c;这个宏包提供了强大的图像处理功能。以下是如何使用graphicx宏包插入图像的基本步骤&#xff1a; ### 1. 加载宏包 在文档的序言部分&#xff08;\begin{document}之前&#xff09;&#x…

Pr2024安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 Premiere简称“Pr”&#xff0c;是一款超强大的视频编辑软件&#xff0c;它可以提升您的创作能力和创作自由度&#xff0c;它是易学、高效、精确的视频剪辑软件&#xff0c;提供了采集、剪辑、调色、美化音频、字幕添加、输出、D…

贝锐蒲公英自研异地组网新技术:远程视频监控,流畅度、清晰度大幅提升

在远程视频监控过程中&#xff0c;若遇到网络带宽若遇到网络波动&#xff0c;如&#xff1a;丢包、高延迟等&#xff0c;往往会导致视频流传输时发生数据丢失或延迟现象&#xff0c;从而严重影响视频画面的清晰度和流畅度。 比如&#xff1a;在公司总部集中监看远程矿山或户外水…

Unity 点击次数统计功能

介绍 &#x1f4a1;.调用方便&#xff0c;发生点击事件后直接通过"xxx".CacheClick缓存 &#x1f4a1;. 在允许的时间间隔内再次点击会累计点击次数&#xff0c;直到超出后触发事件 传送门&#x1f448;

Element入门

安装ElementUI组件库 npm install element-ui2.15.3 引入 import Vue from vue; import ElementUI from element-ui; import element-ui/lib/theme-chalk/index.css; import App from ./App.vue;Vue.use(ElementUI);new Vue({el: #app,render: h > h(App) }); 应用 模板 …

一篇文章带你快速认识边缘计算(必看)

引言 5G时代带来了万物互联的飞跃&#xff0c;但随之而来的是数据量爆炸性增长与集中式数据中心处理模式的瓶颈&#xff1a;响应延迟、带宽压力、安全隐忧。边缘计算应运而生&#xff0c;借鉴生物智能分布式原理&#xff0c;将计算与分析推向数据源头&#xff0c;有效解决了以上…

Linux的重要命令(一)

目录 一.查看当前的工作目录-pwd 二.切换工作目录-cd 三.列表显示目录内容或文件本身-ls 四.通配符 通配符用法 五.设置别名-alias 六.统计文件或目录空间占用情况 七.创建新目录-mkdir 八.创建新文件-touch 九.创建链接文件-ln 十.复制文件或目录 十一.删除文件或目…

通过抖音短视频获客 只需要六步

抖音是当前最受欢迎的短视频平台之一&#xff0c;拥有庞大的用户群体和强大的社交矩阵&#xff0c;已经成为企业打造品牌口碑和快速获客的一种有效方式。那么&#xff0c;如何利用抖音短视频快速获客&#xff0c;打造品牌口碑呢&#xff1f;小马识途营销顾问简要分析如下&#…

文件操作;

目录 1.文件的打开与关闭&#xff1b; 打开文件&#xff1b; 关闭文件&#xff1b; 2.文件的打开方式&#xff1b; “r”&#xff08;只读&#xff09;&#xff1b; “w”&#xff08;只写&#xff09;&#xff1b; 3.文件的顺序读写&#xff1b; 字符输入函数fgetc 代…

离岸人民币与人民币国际化

参考 什么是离岸人民币&#xff1f;它有什么用&#xff1f; - 知乎 “人民币就是人民币&#xff0c;为什么要在它前面加上离岸二字&#xff1f;” “既然有离岸人民币&#xff0c;是否有在岸人民币&#xff1f;” 今天我们就简单了解一下什么是离岸人民币。 离岸/在岸人民币…

matlab关于COE文件之读取操作

平台&#xff1a;matlab2021b 场景&#xff1a;在使用fir滤波器后&#xff0c;我们使用matlab生成coe文件后。在xilinx新建IP的后&#xff0c;数据流经过FIR的IP核后数据位宽变宽。这时候我们需要对数据进行截位。这时候需要读取coe文件求和后&#xff0c;计算我们需要截位的位…

突破销售瓶颈!淘宝商品关键词搜索电商API接口助力增长

近年来&#xff0c;随着电商行业的飞速发展&#xff0c;越来越多的卖家遇到了销售瓶颈的问题。无论是面对竞争激烈的市场环境&#xff0c;还是受到新产品引领的冲击&#xff0c;找到突破口成为了卖家们迫切需要解决的难题。联讯数据将介绍一种能够助力增长的方法——淘宝商品关…

C语言入门第五天(复合类型)

一、结构体 1.结构体的概述 结构体(struct)可以理解为用户自定义的特殊的复合的“数据类型” 2.结构体变量的定义和初始化 定义结构体变量的方式&#xff1a; 先声明结构体类型再定义变量名在声明类型的同时定义变量 语法格式&#xff1a; // 先声明结构体类型再定义变量名 st…

低噪声放大器是如何实现低噪声放大的功能的

灵敏度作为接收机最重要的指标之一,直接决定了接收机能分辨的最小信号。接收机的灵敏度计算公式如下所示。 Psensitivity=-174dBm+NF+10*lg(BW)+SNR 由接收机灵敏度的计算公式可知,影响接收机灵敏度的指标有噪声系数、带宽和信噪比,因此一旦带宽和信噪比确定了,那么能决…

Java设计模式——代理模式

静态代理&#xff1a; Java静态代理是设计模式中的一种&#xff0c;它通过创建一个代理类来代替原始类&#xff0c;从而提供额外的功能或控制原始类的访问。 如何使用Java静态代理 要创建一个静态代理&#xff0c;你需要有一个接口&#xff0c;一个实现该接口的目标类&#…