Docker

CentOS7下安装Docker

准备工作

  • 更新操作系统
1
yum update
  • 安装常用软件
1
2
yum install -y unzip zip wget vim net-tools lrzsz
# 打包镜像的机器根据开发语言的不同,按实际需要的进行安装

安装

  • Docker CE版本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#安装yum-utils软件包,以便使用yum-config-manager设置稳定库
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装最新版本的Docker
yum install docker-ce docker-ce-cli containerd.io

# Docker开机自启
systemctl enable docker

# 启动Docker
systemctl start docker

# 验证Docker是否安装成功
docker run hello-world

文档: https://docs.docker.com/engine/install/centos/

  • Docker开机自启

    1
    systemctl enable docker
  • Docker国内镜像加速

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    cd /etc/docker
    touch daemon.json
    vim daemon.json
    {
    "registry-mirrors":[
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
    ]
    }
    #重启服务
  • 安装Docker Compose
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 下载当前稳定版本(要安装其他版本的Compose,请替换1.26.2 为要使用的Compose版本)
curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 给文件添加执行权限
chmod +x /usr/local/bin/docker-compose

# 创建软链
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# 测试安装
docker-compose --version

# 安装redis
docker run -p 6379:6379 --restart=always -d redis:latest redis-server

# 安装redis 并限制100M内存
docker run -it -m 100M --memory-swap -1 -p 6379:6379 --restart=always -d redis:latest redis-server

文档: https://docs.docker.com/compose/install/

私有镜像库

  • 安装镜像库

    • 下载镜像

      1
      docker pull registry
    • 运行registry容器

      1
      2
      3
      4
      5
      6
      7
      8
      #参数说明
      #-itd:在容器中打开一个伪终端进行交互操作,并在后台运行;
      #-v:把宿主机的/data/registry目录绑定 到 容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化;
      #-p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了;
      #--restart=always:这是重启的策略,假如这个容器异常退出会自动重启容器;
      #--name registry:创建容器命名为registry,你可以随便命名;
      #registry:latest:这个是刚才pull下来的镜像;
      docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest
  • 上传镜像

    配置镜像服务器

    1
    2
    3
    4
    5
    [root@node ~]# vim /etc/docker/daemon.json 
    {
    "registry-mirrors": [ "https://registry.docker-cn.com"],
    "insecure-registries": [ "镜像服务器IP:5000"]
    }

    镜像打标签

    1
    docker tag test:latest  镜像服务器IP:5000/test:v1

    镜像上传

    1
    docker push 镜像服务器IP:5000/test:v1
  • 查看镜像

    1
    curl http://IP:5000/v2/_catalog
  • 查看test镜像都有哪些tag

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        http://镜像服务器IP:5000/v2/busybox/tags/list
    ···


    ### 常用组件

    - MinIO 文件存储(单实例运行)
    ```bash
    docker run -itd -p 9000:9000 --restart=always --name minio1 -v /data/minio:/data -e "MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE" -e "MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" minio/minio server /data

    # 纠删码方式

    docker run -itd -p 9000:9000 --restart=always --name minio1 -v /home/minio/data00:/data00 -v /home/minio/data01:/data01 -v /home/minio/data02:/data02 -v /home/minio/data03:/data03 -v /home/minio/data04:/data04 -v /home/minio/data05:/data05 -v /home/minio/data06:/data06 -v /home/minio/data07:/data07 -v /home/minio/data08:/data08 -v /home/minio/data09:/data09 -e "MINIO_ACCESS_KEY=qwert12345" -e "MINIO_SECRET_KEY=qwert12345" minio/minio server /data00 /data01 /data02 /data03 /data04 /data05 /data06 /data07 /data08 /data09

文档:https://docs.min.io/docs/minio-docker-quickstart-guide

  • MySQL5.7
1
2
3
4
5
6
# 创建MySQL 且不区别大小写,时区为东八区 密码为root
# 注意mysql数据保存位置,root用户名密码 镜像版本号
docker run -id --name=ry_mysql -e TZ=Asia/Shanghai -p 3306:3306 --restart=always -e MYSQL_ROOT_PASSWORD=root -v /home/mysqldata:/var/lib/mysql mysql:5.7.38 --lower_case_table_names=1

# 创建MySQL 限制内存
docker run -it -m 256M --memory-swap -1 -id --name=ry_mysql -e TZ=Asia/Shanghai -p 3306:3306 --restart=always -e MYSQL_ROOT_PASSWORD=root -v /home/mysqldata:/var/lib/mysql mysql:5.7.38 --lower_case_table_names=1
  • ElasticSearch
1
docker run -e "ES_JAVA_OPTS=-Xms64m -Xmx251m" --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node"  --restart=always -d elasticsearch:7.2.0

docker中的容器时区更改

  • 进入需要更改时区的容器
1
    docker exec -it 容器ID bash
  • 将宿主机的时区链接到容器里面
1
2
3
4
# 这里使用的是上海的时区
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 
    #如果本地时区不正确,可以更改本地时区:
    echo "Asia/Shanghai" > /etc/timezone
  • 退出容器并重启容器
1
2
    exit  # 退出容器
    docker restart 容器ID #重启容器
  • 删除无用和没有tag的镜像
1
docker image prune -f
  • 阿里云效容器加速打包
1
2
3
4
5
# jre8的版本 带字体修复
registry.cn-beijing.aliyuncs.com/qtubiao/openjdk:8-jre-alpine-font

# jdk17的版本 带字体修复
registry.cn-beijing.aliyuncs.com/qtubiao/openjdk:17-jdk-alpine3.14-font
  • 一键部署maven私服
1
docker run -d -p 48081:8081  --privileged=true --name nexus -v /data1/zhongyj/data/nexus-data:/nexus-data --restart=always sonatype/nexus3
  • 安装rockylinux
    1
    2


ApacheBench压力测试

CentOS下安装ApacheBench

1
yum install httpd-tools

执行命令

向某个链接的机器并发400发送20000个请求

1
ab -n 20000 -c 400 https://xxx.com

性能指标(某圈广告投放):

  • Requests per second: >=1500
  • Time per request: <=200ms

说明: 每秒QPS>=1500 响应时间<=200ms

FFmpeg常用命令

MP4转为GIF

为GIF提取色板

1
ffmpeg -i a.mp4 -vf fps=15,scale=-1:-1::flags=lanczos,palettegen palette.png

转为固定高度/12帧速的GIF图片

1
ffmpeg -i a.mp4 -i palette.png -lavfi fps=12,scale=-1:960:flags=lanczos[x];[x][1:v]paletteuse -y a.gif

PNG转为JPG

为JPG提取色板

1
ffmpeg -i tempchart1.png -vf fps=15,scale=-1:-1::flags=lanczos,palettegen -y palette.png

转为固定宽度的JPG图片

1
ffmpeg -i tempchart1.png -i palette.png -lavfi scale=400:-1:flags=lanczos[x];[x][1:v]paletteuse -y tempchart1.jpg

视频添加音频

1
2
3
4
#效果:音频淡入淡出  音频时长小于视频时 音频循环播放
ffmpeg -stream_loop -1 -i xxx.mp3 -i xxx.mp4 -af afade=t=in:st=0:d=3,afade=t=out:st=${overtime}:d=3 -ss 00:00:00 -to ${endTimeStr} -y -b:v 1024k -profile:v main -brand mp42 out.mp4
#参数:${overtime} 音频淡出的开始秒数
#参数:${endTimeStr} 视频结束时间

视频中减去音轨

1
ffmpeg -i xxx.mp4 -an -y xx.mp4

使用硬件加速

1
2
3
4
5
6
7
8
9
10
11
12

N卡支持情况: https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-new


# 使用nvidia GPU加速
ffmpeg -i xxxx.mp4 -c:v h264_nvenc -y xx.mp4

# 使用intel 核显加速
ffmpeg -i xxxx.mp4 -c:v h264_qsv -y xx.mp4

# 使用nvidia GPU加速 h265
ffmpeg -i xxxx.mp4 -c:v hevc_nvenc -c:a copy -y xx.mp4

转为固定尺寸视频

1
2
3
4
# 转为1080P
ffmpeg -i xxxx.mp4 -s hd1080 -y xx.mp4
# 转为720P
ffmpeg -i xxxx.mp4 -s hd720 -y xx.mp4

PNG转为带通道视频

1
2
3
4
5
6
7
8
9
10
11
# 两种方式生成mov视频
ffmpeg -f concat -safe 0 -i input.txt -vcodec png aa.mov
ffmpeg -f concat -safe 0 -i input.txt -vcodec qtrle bb.mov
# 转为WEBM格式
ffmpeg -i bb.mov -c:v libvpx-vp9 out.webm

# 生成的MOV文件过大的问题 可以转libx264
ffmpeg -f concat -safe 0 -i input.txt -vcodec png -c:v libx264 aaa.mov


ffmpeg -f concat -safe 0 -i input.txt -vcodec qtrle -pix_fmt yuva420p bb.mov

视频裁剪

1
2
3
4
5
6
7
# crop的参数格式为w:h:x:y
w、h为输出视频的宽和高,
x、y标记输入视频中的某点,将该点作为基准点,向右下进行裁剪得到输出视频。
如果x y不写的话,默认居中剪切

ffmpeg -i XX.mp4 -vf crop=400:400 XXX.mp4 -y
ffmpeg -i XX.mp4 -vf crop=400:400:0:0 XXX.mp4 -y

windows下 ffmpeg命令行批量转换视频

1
2
3
4
5
# 在命令行:
for %a in ("*.mp4") do ffmpeg -i "%a" -threads 2 -vcodec libx264 -preset slow -crf 20 -y "newfiles\%~na.mp4"

# 批处理文件中: 需要多加个%号
for %%a in ("*.mp4") do ffmpeg -i "%%a" -threads 2 -vcodec libx264 -preset slow -crf 20 -y "%%~na.mp4"

CentOS7/8下安装Node.js

官网

官网传送门:官网
CentOS安装: YUM安装

在 RHEL, CentOS, CloudLinux 或 Fedora 使用root权限

Node.js v18.x

As root

1
curl -fsSL https://rpm.nodesource.com/setup_18.x | bash -

No root privileges

1
curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -

Node.js v17.x

As root

1
curl -fsSL https://rpm.nodesource.com/setup_17.x | bash -

No root privileges

1
curl -fsSL https://rpm.nodesource.com/setup_17.x | sudo bash -

Node.js v16.x

As root

1
curl -fsSL https://rpm.nodesource.com/setup_16.x | bash -

No root privileges

1
curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -

Node.js LTS (16.x)

As root

1
curl -fsSL https://rpm.nodesource.com/setup_lts.x | bash -

No root privileges

1
curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash -

NodeJS 14.x

root权限

1
curl -sL https://rpm.nodesource.com/setup_14.x | bash -

非root权限

1
curl -sL https://rpm.nodesource.com/setup_14.x | sudo bash -

NodeJS 13.x

root权限

1
curl -sL https://rpm.nodesource.com/setup_13.x | bash -

非root权限

1
curl -sL https://rpm.nodesource.com/setup_13.x | sudo bash -

NodeJS 12.x

root权限

1
curl -sL https://rpm.nodesource.com/setup_12.x | bash -

非root权限

1
curl -sL https://rpm.nodesource.com/setup_12.x | sudo bash -

NodeJS 10.x

root权限

1
curl -sL https://rpm.nodesource.com/setup_10.x | bash -

非root权限

1
curl -sL https://rpm.nodesource.com/setup_10.x | sudo bash -

安装构建工具

1
yum install gcc-c++ make

更多版本Linux安装请移步: GitHub

Linux

常用命令

CPU占用最多的前10个进程

1
ps auxw|head -1;ps auxw|sort -rn -k3|head -10

内存消耗最多的前10个进程

1
ps auxw|head -1;ps auxw|sort -rn -k4|head -10

虚拟内存使用最多的前10个进程

1
ps auxw|head -1;ps auxw|sort -rn -k5|head -10

下载文件

1
wget XXXX

多线程下载

1
2
3
4
# 软件安装
yum install axel
# 执行下载
axel -n 10 -o /tmp/ http://XXXX

查询当前目录下各文件大小

1
2
3
4
du -h --max-depth=1  | sort -nr | head

# 按文件大小排序
du --max-depth=1 /opt | sort -nr | head

清空文件内容

1
cat /dev/null> access.log

限制 /var/log/journal 文件大小

1
2
3
4
5
# 保留最近一周
journalctl --vacuum-time=1w

# 限制文件大小为500MB
journalctl --vacuum-size=500M

CentOS7 安装更高版本git

1
yum -y install https://packages.endpointdev.com/rhel/7/os/x86_64/endpoint-repo.x86_64.rpm

CentOS7 安装code-server

更多: 安装code-server

CentOS7 安装C++17

1
2
3
4
5
6
7
yum install centos-release-scl

yum-config-manager --enable rhel-server-rhscl-7-rpms

yum install devtoolset-7

scl enable devtoolset-7 bash

CentOS 防火墙

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 开放80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
# 开放多个端口
firewall-cmd --zone=public --add-port=80-90/tcp --permanent && firewall-cmd --reload

#删除端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent
#查看防火墙所有信息
firewall-cmd --list-all

#查看防火墙开放的端口信息
firewall-cmd --list-ports

#启动
systemctl start firewalld

#查看状态
systemctl status firewalld

#开机不启动
systemctl disable firewalld

#关闭
systemctl stop firewalld

#开机启动
systemctl enable firewalld