常用命令
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.tar docker 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.2 dns 8.8.8.8 备dns 8.8.4.4 3.设置cenos7 中ip cd /etc/sysconfig/network-scripts/ vi ifcfg-ens33 修改内容如下: BOOTPROTO=static IPADDR=192.168.63.200 NETMASK=255.255.255.0 GATEWAY=192.168.63.2 ONBOOT=yes === 修改DNS vi /etc/resolv.conf 添加如下内容 nameserver 8.8.8.8 nameserver 8.8.4.4 4.重启centos7 网络 service network restart ping 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 - Community Version: 20.10.8 API version: 1.41 Go version: go1.16.6 Git commit: 3967b7d Built: Fri Jul 30 19:55:49 2021 OS/Arch: linux/amd64 Context: default Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.8 API version: 1.41 (minimum version 1.12) Go version: go1.16.6 Git commit: 75249d8 Built: Fri Jul 30 19:54:13 2021 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.4.9 GitCommit: e25210fe30a0a703442421b0f60afac609f950a3 runc: Version: 1.0.1 GitCommit: v1.0.1-0-g4144b63 docker-init: Version: 0.19.0 GitCommit: de40ad0
docker 容器占用磁盘空间
-
问题 docker容器日志导致主机磁盘空间满了。docker logs -f container_name噼里啪啦一大堆,很占用空间,不用的日志可以清理掉了。
-
解决方法 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-node6 docker 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 1 docker 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:6379 slots:[0-5460] (5461 slots) master M: aac17d1c3e7938cfcede505b557fd6bd128e569c 172.17.0.4:6379 slots:[5461-10922] (5462 slots) master M: 299ebe4735338735271261d8c3748dac60d237bb 172.17.0.5:6379 slots:[10923-16383] (5461 slots) master S: a3459eb5511dd2e6c1586dff1e1bf2163c761a8e 172.17.0.6:6379 replicates 299ebe4735338735271261d8c3748dac60d237bb S: 17720633911622e26aeaa7007541c6a4bae06919 172.17.0.7:6379 replicates f8cac8654fc56120b37e2323610e91067769c69b S: 1fb20460ed08095d120892b0c6e32610ceccf441 172.17.0.8:6379 replicates 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:6379 slots:[0-5460] (5461 slots) master 1 additional replica(s) M: aac17d1c3e7938cfcede505b557fd6bd128e569c 172.17.0.4:6379 slots:[5461-10922] (5462 slots) master 1 additional replica(s) S: a3459eb5511dd2e6c1586dff1e1bf2163c761a8e 172.17.0.6:6379 slots: (0 slots) slave replicates 299ebe4735338735271261d8c3748dac60d237bb M: 299ebe4735338735271261d8c3748dac60d237bb 172.17.0.5:6379 slots:[10923-16383] (5461 slots) master 1 additional replica(s) S: 17720633911622e26aeaa7007541c6a4bae06919 172.17.0.7:6379 slots: (0 slots) slave replicates f8cac8654fc56120b37e2323610e91067769c69b S: 1fb20460ed08095d120892b0c6e32610ceccf441 172.17.0.8:6379 slots: (0 slots) slave replicates 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集群
的项目跟集群不在一台服务器上,那么项目是没法使用集群的,因为是访问不通的。
一种解决方案是让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 6339 docker 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 6340 docker 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 6341 docker 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 6342 docker 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 6343 docker 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
等。
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 1 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 1 redis-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 1 redis-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 1 redis-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 1 redis-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 1 redis-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 1 redis-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
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
至此,本次基于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:启动NameServer docker run -d -p 9876:9876 --name rmqserver --net host --restart=always foxiswho/rocketmq:server-4.3.2 docker run -d -p 9876:9876 --name rmqserver --restart=always foxiswho/rocketmq:server-4.3.2 docker run -d -p 9999:9876 --name rmqserver-hp foxiswho/rocketmq:server-4.3.2
如果需要 docker 重启时自动启动 加上--restart=always
4:启动Broker docker 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:安装Console docker 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/bash vi /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-centos docker 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 Plugins 1)安装推荐插件 2)安装maven插件 git插件 3)安装Publish Over SSH 插件, 用来把打包后的项目发布到远程服务器 4)安装Config File Provider Plugin 插件, 配置文件管理 2.系统配置 Configure System 1)执行者数量 配置同时执行的最大数量 2)SSH Servers 远程服务器配置 name 名称 示例:gs11 host 主机 示例:192.168.0.11 Username 登录主机的账号 示例:root Remote Directory 对应主机的目录,连接远程服务器时对应的目录 示例:/home/data 即 上传时直接上传到/home/data/ 目录下 3.全局配置 Manage Jekins->Golbal Tool Configuration 1) Maven 配置 默认settings 提供 选择 Provided settings.xml 选择在 自己配置的settings.xml(Managed files中设置好的) 2)JDK 选择你的JDK版本,这里我安装的1.8版本 JAVA_HOME 填写 安jdk安装路径 3)Git git安装路径 4)Maven 选择你要的版本。我选择的时3.3.9 4.Manage Jekins-> Managed files 1)添加Maven的setttings.xml Add a new Config-> 勾选 Maven settings.xml 输入 name 名称 Comment 描述 Replace All Content 内容 中 增加你的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 Set Source 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/war docker 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 master Use 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/data vi /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.yml vi /data/elk6/kibana2/config/kibana.yml vi /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.git C:\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/vsftpd 3,控制台安全组配置开放端口范围 21100-21110 4,新建用户文件夹 1)进入到容器里面 docker exec -it vsftpd bash 2)可以看到在 /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 bash 2)创建新用户的文件夹: mkdir /home/vsftpd/payne 3)编辑用户配置文件: 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.db 5)退出重启 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/vsftpd container_name: ftpnw restart: always networks: smart-network: aliases: - ftpnw ports: - 20-21:20-21 - 21100-21200:21100-21200 environment: TZ: "Asia/Shanghai" PASV_ENABLE: "YES" PASV_ADDR_RESOLVE: "YES" PASV_ADDRESS: 172.26.83.31 PASV_MIN_PORT: "21100" PASV_MAX_PORT: "21200" FTP_USER: admin FTP_PASS: admin IDLE_SESSION_TIMEOUT: 0 volumes: - ../ftp/data:/home/vsftpd - ../ftp/logs:/log/vsftpd - ../ftp/conf/vsftpd.conf:/etc/vsftpd/vsftpd.conf networks: 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 -v v16.17.1 [root@ciserver ~]# npm -v 8.15.0 3.
linux 安装jdk
yum install -y java-11-openjdk-static-libs.x86_64