阿里云 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
浙公网安备 33010602011771号