阿里云 CentOS 7 安装docker、中间件

1、安装docker
安装参考:https://docs.docker.com/engine/install/centos/
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce docker-ce-cli containerd.io
systemctl start docker
docker ps

# 进入容器
docker exec -it 容器名称 bash

# 查看docker容器日志
docker logs -f my-app
docker logs --tail 100 my-app

# 查看docker容器中的文件
docker exec -it myOpenVPN cat /etc/openvpn/login.log

# 从容器中拷贝文件到宿主机
docker cp geoserver:/usr/local/tomcat/webapps/geoserver/WEB-INF/web.xml web.xml

# 端口冲突查询
netstat -tulnp | grep :80

 

2、设置国内镜像库
vi /etc/docker/daemon.json
{
    "registry-mirrors": [
        "https://y8yh50dy.mirror.aliyuncs.com",
    // "https://docker.mirrors.ustc.edu.cn",
        "https://docker.m.daocloud.io"
    ],
    "insecure-registries": [
        "39.100.100.111:51001"
    ],
    "ipv6": false
}

### 验证镜像是否可访问:curl -I https://docker.m.daocloud.io

### 重启docker:
systemctl daemon-reload
systemctl restart docker

### 测试hello-world,并进入容器
docker run hello-world

 

3、其他设置

#1 自定义网络
# 创建:docker network create my_network
# 查看:docker network ls
# 删除:docker network rm my_network
# 引用:docker network inspect my_network

 

4、拷贝容器

------ arm64(Mac M处理器,拉取镜像时加参数:--platform linux/amd64,导出到Intel服务器上才能使用) -------

docker pull --platform linux/amd64 nginx
docker run -dp 80:80 --name nginx nginx

docker commit nginx nginx-image-arm64
docker save -o nginx-image-arm64.tar nginx-image-arm64

docker load -i nginx-image-arm64.tar
docker run --name nginx -p 58001:80 -d nginx-image-arm64

------ x86 -------

docker pull nginx
docker run -dp 80:80 --name nginx nginx

docker commit nginx nginx-image-x86
docker save -o nginx-image-x86.tar nginx-image-x86

docker load -i nginx-image-x86.tar
docker run --name nginx -p 58001:80 -d nginx-image-x86

 

5、启动命令 (./runXXX.sh)

#!/bin/bash

# 停止容器
docker stop nginx

# 移除容器
docker rm nginx

# 运行 Docker 容器
docker run -d \
  -p 58001:58001 \
  --name nginx \
  --network my_network \
  --restart=always \
  -v /publish/app:/usr/share/nginx \
  -v /publish/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
  my-nginx-image

 

######### 启动命令参考 #########

docker run -d \ # 启动 Docker 容器(-d后台运行)
  -p 53306:3306 \ # 将容器的 3306 端口映射到宿主机的 53306 端口
  --name mysql8 \ # 设置容器名称为 mysql8
  --restart=always \ # 设置自动重启策略为 always
  --privileged=true \ # 赋予容器特权模式
  -e MYSQL_ROOT_PASSWORD=Root@123 \ # 设置 root 用户密码为 Root@123
  -e TZ=Asia/Shanghai \ # 设置时区为 Asia/Shanghai
  --lower_case_table_names=1 # 设置表名不区分大小写
  -v /publish/mysql/config:/etc/mysql/conf.d \ # 将配置文件目录映射到容器
  -v /publish/mysql/data:/var/lib/mysql \ # 将数据存储目录映射到容器
  -v /publish/mysql/logs:/var/log/mysql \ # 将日志目录映射到容器
  -v /publish/mysql/temp:/temp \ # 将临时文件目录映射到容器
  mysql:8.0 # 运行的镜像 名称:Tag

 

6、制作JDK11基础镜像
#1 Dockerfile(vi /publish/jdk/Dockerfile)
# 使用 JDK 11 基础镜像
FROM openjdk:11-jdk-slim

# 设置容器中的工作目录
WORKDIR /app

# 暴露容器的 8080 端口(默认端口为8080,在运行镜像时可通过:-e PORT=8081来更改)
EXPOSE 8080

# 运行 JAR 文件
ENTRYPOINT ["java", "-jar", "app.jar"]

 

#1 Dockerfile(vi /publish/jdk/Dockerfile)
# 使用 JDK 11 基础镜像
FROM openjdk:11-jdk-slim

# 切换到国内 Debian 镜像源(如清华源)
RUN sed -i 's|http://deb.debian.org|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list && \
sed -i 's|http://security.debian.org|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list

# 安装 AWT 字体依赖和中文字体(不安装POI导出Excel会报错)
RUN apt-get update && apt-get install -y \
fontconfig \
libfreetype6 \
fonts-noto-cjk \
--no-install-recommends && \
rm -rf /var/lib/apt/lists/*

# 设置容器中的工作目录
WORKDIR /app

# 暴露容器的 8080 端口(默认端口为8080,在运行镜像时可通过:-e PORT=8081来更改)
EXPOSE 8080

# 默认入口:java
ENTRYPOINT ["java"]

# 默认命令:运行 jar 文件
CMD ["-jar", "app.jar"]

 

#2 执行命令
# 构建
docker build -t jdk:11 .

# 运行
docker run -d \
  -p 0.0.0.0:59001:59001 \
  --name jdk11 \
  --network my_network \
  --restart=always \
  -v /publish/app/xxx/xxxxxx.jar:/app/app.jar \
  -v /publish/app/xxx/application.yml:/app/config/application.yml \
  -e TZ="Asia/Shanghai" \
  --log-driver=json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  jdk:11

 

7、Docker安装nginx
#1 预置nginx配置文件(vi /publish/nginx/conf/nginx.conf)
user nginx;
worker_processes auto;

error_log /var/log/nginx/error.log warn;
pid /run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    include mime.types;
    default_type application/octet-stream;

    access_log /var/log/nginx/access.log;

    sendfile on;
    keepalive_timeout 65;

    #gzip on;
    include /etc/nginx/conf.d/*.conf;

    server {
        listen 58001;

        location / {
            root /usr/share/nginx/cdp5/dist/;
            index index.html index.htm;
        }

        location /api {
            proxy_pass http://cdp5-xxx:57005;
            add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
            add_header Access-Control-Allow-Headers 'Content-Type, Authorization';
            rewrite ^/api/(.*)$ /$1 break;
        }

        location /xxx {
            proxy_pass http://localhost:57001/;
        }
    }
}

 

#2 执行命令
# 拉取镜像
docker pull nginx

# 运行
docker run -d \
  -p 0.0.0.0:58001-58019:58001-58019 \
  --name nginx \
  --network my_network \
  --restart=always \
  -v /publish/app/:/usr/share/nginx/ \
  -v /publish/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
  nginx

拷贝静态文件到:/publish/app/cdp5/dist
访问:http://IP:58001

 

8、Docker安装portainer
官方参考:https://docs.portainer.io/start/install-ce/server/docker/linux
docker pull portainer/portainer-ce

# run.sh(vi /publish/portainer/runPortainer.sh)
  docker run -d \
  -p 0.0.0.0:52002:9443 \
  --name portainer \
  --restart=always \
  -v /publish/portainer/docker.sock:/var/run/docker.sock \
  -v /publish/portainer/portainer_data:/data \
  portainer/portainer-ce

访问地址:https://IP:52002
账号:admin/a@1

 

9、Docker安装LibreSpeed
docker pull ghcr.io/linuxserver/librespeed

# run.sh(vi /publish/librespeed/runLibrespeed.sh)
docker run -d \
  -p 0.0.0.0:52003:80 \
  --name=librespeed \
  --restart=always \
  -v /publish/librespeed/config:/config \
  ghcr.io/linuxserver/librespeed

访问地址:http://IP:52003

 

10、Docker安装mysql
docker pull mysql:8.0

# run.sh(vi /publish/mysql/runMysql.sh)

docker run -d \
  -p 0.0.0.0:53306:3306 \
  --name mysql8 \
  --restart=always \
  --privileged=true \
  -e MYSQL_ROOT_PASSWORD=Root@123 \
  -e TZ=Asia/Shanghai \
  -v /publish/mysql/config:/etc/mysql/conf.d \
  -v /publish/mysql/data:/var/lib/mysql \
  -v /publish/mysql/logs:/var/log/mysql \
  -v /publish/mysql/temp:/temp \
  mysql:8.0 \
  --lower_case_table_names=1

 

docker exec -it mysql8 bash
mysql -u root -p

create database testdb;
create user 'test'@'%' identified by '123456';
grant all privileges on testdb.* to 'test'@'%';
revoke show databases on *.* from 'test'@'%';
flush privileges;

# 查询所有用户
select user, host from mysql.user;

 

11、Docker安装registry(DockerHub)
docker pull registry:2

# run.sh(vi /publish/docker/registry/runRegistry.sh)
docker run -d \
  -p 0.0.0.0:51001:5000 \
  --name registry \
  --restart=always \
  -v /publish/docker/registry/data:/var/lib/registry \
  registry:2

# 配置
vi /etc/docker/daemon.json
{
    "insecure-registries": [
        "39.100.100.111:51001"
    ]
}

#启动
systemctl restart docker

# 拉取镜像
docker pull nginx:latest
# 标记镜像
docker tag nginx:latest 39.100.100.111:51001/nginx:latest
# 推送Registry
docker push 39.100.100.111:51001/nginx:latest
# 验证推送
curl http://39.100.100.111:51001/v2/_catalog

#应用服务器拉取
docker pull 39.100.100.111:51001/nginx:latest

 

12、Docker安装geoserver
#1 Dockerfile(vi /publish/geoserver/Dockerfile)
# 使用官方最新 Tomcat 9 + JDK 11 版本镜像
FROM tomcat:9.0.104-jdk11

ENV GEOSERVER_VERSION=2.27.0
ENV GEOSERVER_URL=https://sourceforge.net/projects/geoserver/files/GeoServer/${GEOSERVER_VERSION}/geoserver-${GEOSERVER_VERSION}-war.zip
ENV GEOSERVER_DATA_DIR=/var/local/geoserver

# 修改 apt 镜像源为国内源
RUN echo "deb http://mirrors.ustc.edu.cn/ubuntu-ports/ focal main restricted universe multiverse" > /etc/apt/sources.list && \
echo "deb http://mirrors.ustc.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse" >> /etc/apt/sources.list && \
echo "deb http://mirrors.ustc.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse" >> /etc/apt/sources.list && \
echo "deb http://mirrors.ustc.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse" >> /etc/apt/sources.list

# 安装 unzip,部署 GeoServer,删除临时工具和默认工作空间
RUN apt-get update && \
apt-get install -y unzip && \
mkdir -p ${GEOSERVER_DATA_DIR} && \
wget -O /tmp/geoserver.zip ${GEOSERVER_URL} && \
unzip /tmp/geoserver.zip -d /tmp && \
mv /tmp/geoserver.war /usr/local/tomcat/webapps/geoserver.war && \
rm -rf /tmp/* && \
apt-get remove -y unzip && \
apt-get autoremove -y && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*

# 设置工作目录
WORKDIR /usr/local/tomcat

# 暴露 GeoServer 默认端口
EXPOSE 8080

# 启动 Tomcat
CMD ["catalina.sh", "run"]

 

#2 执行命令
#构建
docker build --no-cache --progress=plain -t geoserver:2.27 .

#运行
docker run -d \
  -p 0.0.0.0:53001:8080 \
  --name geoserver \
  --network my_network \
  --restart=always \
  -v /publish/geoserver/data:/var/local/geoserver \
  geoserver:2.27

访问地址:http://IP:53001/geoserver
账号:admin/geo

 

#3 设置可支持跨域访问(/usr/local/tomcat/webapps/geoserver/WEB-INF/web.xml,就在 <web-app ...> 标签后添加)
#从容器中拷贝文件到宿主机:docker cp geoserver:/usr/local/tomcat/webapps/geoserver/WEB-INF/web.xml web.xml

    <filter>
       <filter-name>CORS</filter-name>
       <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
       <init-param>
         <param-name>cors.allowed.origins</param-name>
         <param-value>*</param-value>
       </init-param>
       <init-param>
         <param-name>cors.allowed.methods</param-name>
         <param-value>GET,POST,PUT,DELETE,OPTIONS,HEAD</param-value>
       </init-param>
       <init-param>
         <param-name>cors.allowed.headers</param-name>
         <param-value>Origin,Accept,X-Requested-With,Content-Type,Authorization</param-value>
       </init-param>
       <init-param>
         <param-name>cors.support.credentials</param-name>
         <param-value>false</param-value>
       </init-param>
    </filter>

    <filter-mapping>
       <filter-name>CORS</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>


#4 查看tomcat版本
cat /.../tomcat/RELEASE-NOTES

 

13、docker安装wvp_pro
# 拉取镜像    # 可选:docker pull *rpi-*lhh3om9tq8f34jy.cn-zhangjiakou.personal.cr.aliyuncs.com/w***t/wvp_pro:1.0
docker pull 648540858/wvp_pro:latest

# run.sh(vi /publish/wvp/runWvp.sh)
docker run -d \
  --name wvp_pro \
  --restart=always \
  --env WVP_IP="39.100.100.111" \
  -p 0.0.0.0:80:80 \
  -p 0.0.0.0:55001:18080 \
  -p 0.0.0.0:55002:5060 \
  -p 0.0.0.0:55002:5060/udp \
  -p 0.0.0.0:55100-55100:30000-30000/tcp \
  -p 0.0.0.0:55100-55100:30000-30000/udp \
  wvp_pro:latest

# 备注:80端口不能随意更改,待验证:如需更改,使用Nginx代理

# 进入容器
docker exec -it wvp_pro bash

# 推流 - 输出rtsp
nohup ffmpeg \
-rtsp_transport tcp \
-stimeout 5000000 \
-i "rtsp://xxx.xxx.com/xxx_xxxx-xxxx_xxx" \
-tune zerolatency \
-c:v h264 \
-profile:v high \
-preset superfast \
-fflags nobuffer \
-an \
-crf 25 \
-bf 0 \
-g 10 \
-b:v 1000k \
-f rtsp \
-rtsp_transport tcp "rtsp://127.0.0.1:554/live/B2W1" &

# 参数注解
# -rtsp_transport tcp 指定使用 TCP 传输协议(通常比 UDP 更稳定)
# -stimeout 设置连接超时为5秒(单位为微秒),连接失败时将超时退出
# -i 输入流的 RTSP 源地址
# -tune zerolatency 调整编码参数以实现最小延迟,不设置可能增加流的延迟,不适合实时流媒体
# -c:v h264 使用 H.264 编码格式,不设置可能使用默认编码器,影响兼容性
# -profile:v high 使用 H.264 的 high profile,适合高质量视频,不设置可能导致视频质量下降
# -preset superfast 使用超快预设来减少编码延迟,默认通常是 medium,不设置可能导致编码速度变慢,增加延迟
# -fflags nobuffer 禁用内部缓冲,以减小延迟,不设置可能增加延迟
# -an 禁用音频,仅推送视频流
# -crf 25 设置质量因子为25,值越低,质量越高,但文件越大,默认通常为 23
# -bf 0 禁用 B 帧(帧间预测帧)以降低延迟,不设置可能使用 B 帧,增加延迟
# -g 10 设置GOP关键帧间隔为10帧,提高视频的快速恢复能力,默认通常为 25,不设置可能会导致更长的关键帧间隔,增加延迟
# -b:v 1000k 设置视频码率为 1000 kbps,即 1 Mbps,不设置可能导致流量不稳定
# -f rtsp 输出格式为 RTSP,不设置可能选择不兼容的输出格式
# -rtsp_transport tcp 设置输出 RTSP 服务器地址,如果输入和输出的传输协议相同,可以省略输出中的 -rtsp_transport tcp

# 关闭推流
ps aux | grep ffmpeg
kill kid

访问地址:http://IP:55001
账号:admin/admin

 

14、docker安装OpenVPN

#1 拉取镜像    # 可选:docker pull *rpi-*lhh3om9tq8f34jy.cn-zhangjiakou.personal.cr.aliyuncs.com/w***t/openvpn:1.0
docker pull kylemanna/openvpn
mkdir -p /publish/openvpn

#2 初始化 PKI(清空 PKI:rm -rf /publish/openvpn/pki)
docker run -v /publish/openvpn:/etc/openvpn \
  --rm kylemanna/openvpn \
  ovpn_genconfig -u udp://39.100.100.111:52001

#3 初始化 CA 密钥和证书(会提示你输入密码:OpenVPN@123,CA名字:vpn-ca)
docker run -v /publish/openvpn:/etc/openvpn \
  -it --rm -e EASYRSA_REQ_CN=vpn-ca \
  kylemanna/openvpn ovpn_initpki

#4 启动 OpenVPN 服务端容器
docker run -d \
  -p 0.0.0.0:52001:1194/udp \
  --name openvpn \
  --restart=always \
  --cap-add=NET_ADMIN \
  -v /publish/openvpn:/etc/openvpn \
  kylemanna/openvpn

#5 创建密码验证文件(/publish/openvpn/checkpsw.sh)
#!/bin/sh

echo "LOGIN attempt: $username / $password" >> /etc/openvpn/login.log

PASSFILE="/etc/openvpn/psw-file"
CORRECT_PASSWORD=$(grep "^$username:" "$PASSFILE" | cut -d ':' -f 2)

if [ "$CORRECT_PASSWORD" = "$password" ]; then
    exit 0
else
    exit 1
fi

### 执行生效
chmod +x /publish/openvpn/checkpsw.sh

### 查看日志

echo "logs" > /publish/openvpn/login.log
docker exec -it openvpn cat /etc/openvpn/login.log

#6 创建密码文件(/publish/openvpn/psw-file)
echo "user1:123456" > /publish/openvpn/psw-file
chmod 600 /publish/openvpn/psw-file

#7 启用密码认证(/publish/openvpn/openvpn.conf,在末尾追加)

### add route
push "route 10.8.0.0 255.255.255.0"
push "route 172.22.31.0 255.255.255.0"

### add user pwd require
auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env
script-security 3
username-as-common-name

#8 进入docker 修改相关文件权限
docker exec -it openvpn sh
chmod 644 /etc/openvpn/psw-file
chmod 666 /etc/openvpn/login.log
chmod +x /etc/openvpn/checkpsw.sh

#9 重启 OpenVPN

#10 创建客户端配置(比如 client.ovpn)
docker exec -it openvpn easyrsa build-client-full client nopass
docker exec -it openvpn ovpn_getclient client > /publish/openvpn/client.ovpn

#11 在 /publish/openvpn/client.ovpn 末尾加入:auth-user-pass,示例:
# 开启全局代理
redirect-gateway def1

# 启用用户名密码认证
auth-user-pass

#12 添加其他用户
echo "user2:pwd123" >> /publish/openvpn/psw-file

 

15、Docker安装redis
docker pull redis:7.2

mkdir -p /publish/redis/data
mkdir -p /publish/redis/conf
# 配置文件(vi /publish/redis/conf/redis.conf)
bind 0.0.0.0
port 6379
requirepass Redis@123
appendonly yes

# run.sh(vi /publish/redis/runRedis.sh)
docker run -d \
  -p 0.0.0.0:56379:6379 \
  --name redis \
  --restart=always \
  -v /publish/redis/data:/data \
  -v /publish/redis/conf/redis.conf:/etc/redis/redis.conf \
  redis:7.2 \
  redis-server /etc/redis/redis.conf

验证:redis-cli -h 127.0.0.1 -p 6379 -a Redis@123

posted @ 2024-06-27 23:03  vv_online  阅读(177)  评论(0)    收藏  举报