一些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.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 容器占用磁盘空间

  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-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集群 的项目跟集群不在一台服务器上,那么项目是没法使用集群的,因为是访问不通的。

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 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 等。

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 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

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:启动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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pytest系列——allure之在测试用例添加标题(@allure.title())

前言 通过使用装饰器allure.title可以为测试用例自定义一个更具有阅读性的易读的标题。 allure.title的三种使用方式&#xff1a; 直接使用allure.title为测试用例自定义标题&#xff1b;allure.title支持通过占位符的方式传递参数&#xff0c;可以实现测试用例标题参数化&a…

温度对射频电路性能的影响

对于射频电路,通常会有使用温度范围的要求,即在特定的温度范围内其性能变化不超出指标要求的值。对于工业级产品,一般要求使用温度范围为-40℃~+70℃,而军品要求使用温度范围为-55℃~+85℃。有一些其他特殊使用场景的产品会有不同的要求。 不同的温度对电路性能的影响,…

nginx安装在linux上

nginx主要用于反向代理和负载均衡&#xff0c;现在简单的说说如何在linux操作系统上安装nginx 第一步&#xff1a;安装依赖 yum install -y gcc-c pcre pcre-devel zlib zlib-devel openssl openssl-devel 第二步&#xff1a; 下载nginx&#xff0c;访问官网&#xff0c;ngin…

char和varchar的区别?

一、问题解析 char和varchar都是用于在数据库中存储字符串的数据类型。它们之间的主要区别在于存储空间的使用方式&#xff1a; char是一种定长的数据类型&#xff0c;它的长度固定且在存储时会自动在结尾添加空格来将字符串填满指定的长度。char的长度范围是0-255&#xff0c…

机器学习理论入门---线性回归从理论到实践

线性回归是机器学习里面最简单也是最常用的算法&#xff0c;理解了线性回归的推导之后对于后续的学习有很大帮助&#xff0c;所以我决定从这里开始深入学习相关的机器学习模型。 本篇首先从矩阵求导开始切入&#xff0c;然后介绍一次线性回归的推导&#xff0c;再到代码实现。本…

【八股】Redisson分布式锁

Redisson分布式锁 主要了解了Redisson分布式锁实现的三个功能&#xff1a; 1.可重入 -> 防止死锁 2.可重试&#xff08;i.e. 非阻塞获取锁&#xff09; 3.自动续约 1. 可重入 原理&#xff1a; 利用Redis的Hash结构&#xff0c;记录了使用当前锁的线程id和重用次数&#…

零基础小白,如何入门计算机视觉?

目录 前言 计算机视觉技术学习路线 基础知识 1. 数学基础 2. 编程基础 3. 图像处理基础 基础算法与技术 1. 特征提取与描述符 2. 图像分割与对象检测 3. 三维重建与立体视觉 机器学习与深度学习 1. 机器学习基础 2. 深度学习 高级主题与应用 1. 高级机器学习与深度学习 2. 计算…

Linux之 USB驱动框架-USB总线核心和主控驱动(4)

一、USB设备描述符 一个USB设备描述符中可以有多个配置描述符&#xff0c;即USB设备可以有多种配置&#xff1b;一个配置描述符中可以有多个接口描述符&#xff0c;即USB设备可以支持多种功能&#xff08;接口&#xff09;&#xff1b;一个接口描述符中可以有多个端点描述符。 …

【YOLOv8改进[Neck]】使用BiFPN助力V8更优秀

目录 一 BiFPN(双向特征金字塔网络) 1 BiFPN 2 EfficientDet 二 使用BiFPN助力模型更优秀 1 整体修改 2 配置文件 3 训练 其他 一 BiFPN(双向特征金字塔网络) BiFPN(双向特征金字塔网络&#xff0c; 2020)用于特征融合层。 官方论文地址&#xff1a;https://arxiv.org…

445. 两数相加 II

给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数字都不会以零开头。 示例1&#xff1a; 输入&#xff1a;l1 [7,2,4,3], l2 [5,6,4]…

什么地推网推拉新副业平台最值得推荐? 赚取互联网第一桶金

随着互联网的发展&#xff0c;新型行业层出不穷。其中地推网推拉新作为互联网行业具有收入高、门槛低、时间自由等优势&#xff0c;一部分人从中嗅到了商机&#xff0c;开始纷纷接触并加入了进来。但还是有一部分人对于地推网推拉新的了解很少&#xff0c;不知道如何才能加入其…

这个“高端智库”落地上塘,数字生活商务社区企航俱乐部正式成立

4月10日上午&#xff0c;由浙江省跨境电子商务产业联盟指导&#xff0c;上塘街道党工委、办事处主办&#xff0c;上塘街道数字生活商务社区、运河&#xff08;国际&#xff09;跨境电子商务园承办的上塘街道数字生活商务社区企航俱乐部成立仪式暨助力跨境电商高质量发展首期交流…

计算机考研都将采用408!?

这个根本不可能&#xff0c;高考还没做到全国统一考试呢 每个学校对于计算机招生的需求是不一样的&#xff0c;比如清华大学&#xff0c;专业课912&#xff0c;算的上是最难的计算机专业课了&#xff0c;那他为什么搞这么难啊&#xff0c;还不是因为那群敢考清华的卷王们太变态…

Re65:读论文 GPT-3 Language Models are Few-Shot Learners

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文全名&#xff1a;Language Models are Few-Shot Learners ArXiv网址&#xff1a;https://arxiv.org/abs/2005.14165 2020 NeurIPS&#xff1a;https://papers.nips.cc/paper/2020/hash/1457c0d6bfcb49674…

2024阿里云4核8G服务器租用优惠价格700元一年

阿里云4核8G服务器租用优惠价格700元1年&#xff0c;配置为ECS通用算力型u1实例&#xff08;ecs.u1-c1m2.xlarge&#xff09;4核8G配置、1M到3M带宽可选、ESSD Entry系统盘20G到40G可选&#xff0c;CPU采用Intel(R) Xeon(R) Platinum处理器&#xff0c;阿里云优惠 aliyunfuwuqi…

MSSQL 命令行操作说明 sql server 2022 命令行下进行配置管理

说明&#xff1a;本文的内容是因为我在导入Access2019的 *.accdb 格式的数据时&#xff0c;总是出错的背景下&#xff0c;不得已搜索和整理了一下&#xff0c;如何用命令行进行sql server 数据库和用户管理的方法&#xff0c;作为从Access2019 直接导出数据到sql server 数据库…

1997-2022年各省技术市场发展水平数据(原始数据+计算过程+计算结果)

1997-2022年各省技术市场发展水平数据&#xff08;原始数据计算过程计算结果&#xff09; 1、时间&#xff1a;2000-2022年 2、来源&#xff1a;国家统计局、统计年鉴 3、范围&#xff1a;30省 4、指标&#xff1a;技术市场成交额、国内生产总值、技术市场发展水平 5、计算…

牛仔裤哪个牌子质量好?平价高品质牛仔裤推荐

一条好的裤子&#xff0c;不仅穿着能够显瘦显高&#xff0c;同时质量也更加耐洗耐穿。但大家却极少能够选择到这些质量好的裤子。其实这都是因为目前市面上的裤子品牌实在太多&#xff0c;而且还有不少质量不够出色的品牌混杂在其中。那么要选什么品牌的裤子才好呢&#xff1f;…

iPad手绘+Ai二合一课程,Procreate+Mj+SD零基础到精通(10节视频课)

课程内容&#xff1a; 1 系统课 AI辅助设计流-从零进阶轻松驾驭AI设计,mp4 2 商务沟通阶段 ChatGPT Midjourney-聊天机器人 项目调研资料收集 ,mp4 3_商务沟通阶段 ChatGPT_Midjourney-Midjourney基础 界面初识初步设置 .mp4 4_商务沟通阶段 ChatGPT_Midjourney-Midjourney…

软件测试入门学习笔记

系统测试流程规范 一.研发模型 1.瀑布模型 从可行性研究&#xff08;或系统分析&#xff09;开始&#xff0c;需求 2.增量迭代模型 3.敏捷开发模型 二.质量模型