文章目录
- [1 Docker及编排工具部署](#1 Docker及编排工具部署)
-
- [1.1 Docker部署](#1.1 Docker部署)
- [1.2 docker compose部署](#1.2 docker compose部署)
- [2 MySQL、Nginx、Redis等镜像安装](#2 MySQL、Nginx、Redis等镜像安装)
-
- [2.1 MySQL镜像部署](#2.1 MySQL镜像部署)
- [2.2 Nginx镜像部署](#2.2 Nginx镜像部署)
- [2.3 Redis镜像部署](#2.3 Redis镜像部署)
- [2.4 ElasticSearch相关套件部署](#2.4 ElasticSearch相关套件部署)
-
- [2.4.1 ElasticSearch镜像部署](#2.4.1 ElasticSearch镜像部署)
- [2.4.2 Kibana镜像部署](#2.4.2 Kibana镜像部署)
- [2.4.3 IK分词器部署](#2.4.3 IK分词器部署)
- [3 learn部署](#3 learn部署)
-
- [3.1 生产模式部署(制作镜像)](#3.1 生产模式部署(制作镜像))
- [3.2 开发模式部署(挂载jar目录)](#3.2 开发模式部署(挂载jar目录))
1 Docker及编排工具部署
1.1 Docker部署
安装步骤大致包括:安装必要工具、添加Docker源、更新缓存、安装指定版本Docker、启动Docker、安装docker-compose-plugin
1. 安装必要工具
bash
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2. 安装docker&配置开机自启
bash
//添加Docker源(阿里云)
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
//更新缓存
sudo yum makecache fast
//列出可用版本
yum list docker-ce --showduplicates | sort -r
//安装指定版本(推荐稳定版)
sudo yum install -y docker-ce-20.10.24-3.el7
//启动Docker
sudo systemctl start docker
sudo systemctl restart docker
//设置开机自启
sudo systemctl enable docker
//验证状态
sudo systemctl status docker
docker --version
1.2 docker compose部署
bash
//安装docker-compose-plugin
sudo yum install -y docker-compose-plugin
//验证安装
docker compose version
2 MySQL、Nginx、Redis等镜像安装
2.1 MySQL镜像部署
1. 配置镜像源
bash
//配置镜像源
vim /etc/docker/daemon.json
//文件内容
{
"registry-mirrors": [
"http://docker.1ms.run",
"http://docker.mybacc.com",
"https://docker.m.daocloud.io",
"https://lispy.org",
"https://docker-0.unsee.tech",
"https://docker.xuanyuan.me",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://registry.docker-cn.com"
]
}
2. 获取镜像
bash
//拉镜像
docker pull mysql:5.7
//查看镜像
docker images
3. 目录结构

4. docker-compose.yml配置文件
bash
services:
mysql:
image: mysql:5.7 # MySQL 镜像版本,可替换为 5.7
container_name: mysql # 容器名称,自定义
restart: always # 开机自启,容器异常退出时自动重启
ports:
- "3306:3306" # 端口映射:主机 3306 -> 容器 3306
environment:
MYSQL_ROOT_PASSWORD: 123456 # root 密码,必须设置
MYSQL_INITDB_SKIP_TZINFO: "1" # 跳过时区初始化,避免警告
TZ: "Asia/Shanghai" # 设置容器时区为上海
volumes:
- ./mysql/data:/var/lib/mysql # 数据持久化挂载(提前创建对应宿主机目录)
- ./mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf # 自定义配置文件挂载(提前创建 my.cnf)
- ./mysql/sql:/data/mysql # 初始化脚本(提前创建对应宿主机目录)
- ./mysql/logs:/var/log/mysql # 日志目录(提前创建对应宿主机目录)
# 可选:解决部分系统的权限问题
privileged: true
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "--password=123456"]
interval: 5s
timeout: 3s
retries: 10
5. my.cnf配置文件
bash
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
init_connect='SET NAMES utf8mb4'
default-time-zone='+08:00'
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
max_connections=300
innodb_buffer_pool_size=1G
innodb_log_file_size=256M
innodb_flush_log_at_trx_commit=2
sync_binlog=0
slow_query_log=ON
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=2
log_error=/var/log/mysql/error.log
skip-name-resolve
symbolic-links=0
max_allowed_packet=128M
6. 启动镜像
bash
// 进入docker-compose.yml配置文件目录
//启动 停止 查看
docker compose down mysql
docker compose up -d mysql
docker ps -a
docker ps
//mysql测试
docker exec -it mysql /bin/bash
mysql -h localhost -u root -p

2.2 Nginx镜像部署
1. 获取镜像
bash
docker pull nginx:1.27.4
docker images
2. 目录结构

3. docker-compose.yml配置文件
bash
services:
nginx:
image: nginx:1.27.4
container_name: nginx
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro # 主配置
- ./nginx/conf.d:/etc/nginx/conf.d:ro # 虚拟主机配置
- ./nginx/html:/usr/share/nginx/html:rw # 静态资源
- ./nginx/logs:/var/log/nginx # 日志
- ./nginx/cert:/etc/nginx/ssl:ro # SSL 证书
- /etc/localtime:/etc/localtime:ro # 时区
ports:
- 80:80
- 8080:8080
environment:
TZ: Asia/Shanghai
restart: unless-stopped
healthcheck:
test: ["CMD", "nginx", "-t"]
interval: 10s
timeout: 3s
retries: 3
4. default.conf和nginx.conf配置文件
bash
//default.conf
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
//nginx.conf
events {}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}
5. 首页index.html文件
bash
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Nginx 部署成功</title>
<style>
body {
font-family: "Segoe UI", Arial, sans-serif;
background: linear-gradient(135deg, #1e3c72, #2a5298);
color: #fff;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
.card {
background: rgba(255, 255, 255, 0.15);
padding: 40px;
border-radius: 16px;
text-align: center;
backdrop-filter: blur(10px);
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);
}
h1 {
margin-bottom: 20px;
font-size: 2.5rem;
}
p {
font-size: 1.1rem;
opacity: 0.9;
}
.status {
margin-top: 20px;
padding: 10px 20px;
background: #27ae60;
border-radius: 20px;
display: inline-block;
font-weight: bold;
}
code {
background: rgba(0,0,0,0.3);
padding: 4px 8px;
border-radius: 4px;
}
</style>
</head>
<body>
<div class="card">
<h1>🚀 Nginx 部署成功</h1>
<p>当前时间:<span id="time"></span></p>
<div class="status">STATUS: RUNNING</div>
</div>
<script>
function updateTime() {
document.getElementById("time").innerText = new Date().toLocaleString();
}
updateTime();
setInterval(updateTime, 1000);
</script>
</body>
</html>
6. 启动镜像
bash
docker compose up -d nginx
docker compose down nginx
docker logs --tail 300 -f nginx

2.3 Redis镜像部署
1. 获取镜像
bash
docker pull redis:7.2
docker images
2. docker-compose.yml配置文件
bash
services:
redis:
image: redis:7.2
container_name: redis
restart: always
ports:
- "6379:6379"
volumes:
- ./redis/data:/data
- ./redis/redis.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf
healthcheck:
test: ["CMD", "redis-cli", "-p","6379", "ping"]
interval: 5s
timeout: 3s
retries: 10
3. redis.conf配置文件
bash
# 下载官方默认配置
wget https://raw.githubusercontent.com/redis/redis/7.2/redis.conf
# 修改如下配置
bind 0.0.0.0
protected-mode no
appendonly yes
4. 启动镜像
bash
# 启动容器
docker compose up -d redis
docker compose down redis
docker logs --tail 300 -f redis
# 测试
docker exec -it redis redis-cli

2.4 ElasticSearch相关套件部署
2.4.1 ElasticSearch镜像部署
1. 获取镜像
bash
docker pull elasticsearch:7.9.3
2. 目录结构

3. docker-compose.yml配置文件
bash
services:
elasticsearch:
image: elasticsearch:7.9.3
container_name: elasticsearch
restart: unless-stopped
environment:
- node.name=elasticsearch
- cluster.name=docker-cluster
- discovery.type=single-node
- xpack.security.enabled=false
- xpack.security.http.ssl.enabled=false
- xpack.security.transport.ssl.enabled=false
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- /home/docker/elasticsearch/data:/usr/share/elasticsearch/data
- /home/docker/elasticsearch/logs:/usr/share/elasticsearch/logs
- /home/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins
- /home/docker/elasticsearch/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
ports:
- "9200:9200"
networks:
- elastic
healthcheck:
test:
[
"CMD-SHELL",
"curl -sf 'http://localhost:9200/_cluster/health?wait_for_status=yellow&timeout=3s' || exit 1"
]
interval: 5s
timeout: 3s
retries: 10
kibana:
image: kibana:7.9.3
container_name: kibana
restart: unless-stopped
depends_on:
- elasticsearch
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
ports:
- "5601:5601"
networks:
- elastic
healthcheck:
test:
["CMD-SHELL", "curl -sf http://localhost:5601/app/home || exit 1"]
interval: 5s
timeout: 3s
retries: 10
networks:
elastic:
driver: bridge
4. elasticsearch.yml配置文件
bash
cluster.name: "docker-cluster"
network.host: 0.0.0.0
5. 启动镜像
bash
sudo chown -R 1000:0 conf data logs plugins
chmod 755 conf data logs plugins
docker compose up -d elasticsearch
docker compose down elasticsearch
6. curl命令
bash
//创建索引
curl -X PUT "localhost:9200/person_info?pretty" \
-H 'Content-Type: application/json' -d'
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"id_card": { "type": "keyword" },
"name": { "type": "text", "fields": { "keyword": { "type": "keyword" } } },
"gender": { "type": "keyword" },
"age": { "type": "integer" },
"phone": { "type": "keyword" },
"email": { "type": "keyword" },
"department": { "type": "keyword" },
"position": { "type": "text" },
"salary": { "type": "double" },
"join_date": { "type": "date" },
"address": { "type": "text" },
"is_active": { "type": "boolean" }
}
}
}'
//插入数据 指定ID
curl -X PUT "localhost:9200/person_info/_doc/1001?pretty" \
-H 'Content-Type: application/json' -d'
{
"id_card": "110101199003071234",
"name": "张三",
"gender": "男",
"age": 34,
"phone": "13800001234",
"email": "zhangsan@example.com",
"department": "技术部",
"position": "高级工程师",
"salary": 25000,
"join_date": "2020-06-15",
"address": "北京市朝阳区",
"is_active": true
}'
//插入数据 自增ID
curl -X POST "localhost:9200/person_info/_doc?pretty" \
-H 'Content-Type: application/json' -d'
{
"name": "李四",
"gender": "女",
"age": 28,
"department": "人事部"
}'
//按ID查询
curl -X GET "localhost:9200/person_info/_doc/1001?pretty"
//查询所有
curl -s -X GET "http://localhost:9200/person/_search?pretty" \
-H 'Content-Type: application/json' \
-d '{
"query": { "match_all": {} },
"from": 0,
"size": 10
}'
2.4.2 Kibana镜像部署
1. 获取镜像
bash
docker pull kibana:7.9.3
2. docker-compose.yml配置文件
bash
services:
kibana:
image: kibana:7.9.3
container_name: kibana
restart: unless-stopped
depends_on:
- elasticsearch
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
ports:
- "5601:5601"
networks:
- elastic
healthcheck:
test:
["CMD-SHELL", "curl -sf http://localhost:5601/app/home || exit 1"]
interval: 5s
timeout: 3s
retries: 10
networks:
elastic:
driver: bridge
3. 启动镜像
bash
docker compose up -d kibana
docker compose down kibana
4. kibana页面



2.4.3 IK分词器部署
1. 获取zip包
bash
wget https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-7.9.3.zip
2. 配置环境&启动
bash
unzip /home/docker/bak/elasticsearch-analysis-ik-7.9.3.zip /home/docker/elasticsearch/plugins/ik/
docker compose up -d elasticsearch
docker compose down elasticsearch
3. 验证
bash
docker exec elasticsearch elasticsearch-plugin list

3 learn部署
3.1 生产模式部署(制作镜像)
1. Dockerfile文件
bash
FROM eclipse-temurin:8-jre-alpine
MAINTAINER yyh
ENV TZ=Asia/Shanghai
WORKDIR /home/learn
RUN mkdir -p /home/learn/logs
COPY learn-1.1.0.jar /home/learn/learn-1.1.0.jar
EXPOSE 8088
2. 制作镜像
bash
docker build -t learn:1.1.0 .
docker images

3. docker-compose.yml配置文件
bash
services:
learn:
image: learn:1.1.0
container_name: learn
restart: unless-stopped
ports:
- "8088:8088"
volumes:
# 外挂配置文件
- /home/docker/learn/application.yml:/home/learn/application.yml:ro
# 日志目录
- /home/docker/learn/logs:/home/learn/logs
environment:
- TZ:Asia/Shanghai
command: java -Xms256m -Xmx512m -jar learn-1.1.0.jar --spring.profiles.active=prod
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://localhost:8088/learn/user/hello"]
interval: 5s
timeout: 3s
retries: 10
4. 文件目录

5. 启动镜像
bash
docker compose up -d learn
docker compose down learn
docker logs --tail 300 -f learn
docker exec -it learn /bin/bash
docker exec -it learn sh
docker compose stop learn
docker compose rm learn
6. 配置nginx转发
bash
//learn.conf
server {
listen 8080;
server_name localhost;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
#learn服务
location /learn/ {
proxy_pass http://192.168.10.102:8088;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
bash
docker exec nginx nginx -t
docker compose down nginx
docker compose up -d nginx

3.2 开发模式部署(挂载jar目录)
1. 配置服务目录

2. 配置文件
bash
services:
learn_test:
image: eclipse-temurin:8-jre-alpine
container_name: learn_test
restart: unless-stopped
ports:
- "8089:8089"
volumes:
- /home/docker/learn_test/learn-1.1.0.jar:/home/learn/learn-1.1.0.jar
# 外挂配置文件
- /home/docker/learn_test/application.yml:/home/learn/application.yml:ro
# 日志目录
- /home/docker/learn_test/logs:/home/learn/logs
- /etc/localtime:/etc/localtime
environment:
- TZ=Asia/Shanghai
working_dir: /home/learn
command: java -Xms256m -Xmx512m -jar learn-1.1.0.jar --spring.profiles.active=prod
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://localhost:8089/learn_test/user/hello"]
interval: 5s
timeout: 3s
retries: 10
3. 启动服务目录
bash
docker compose up -d learn_test
docker compose down learn_test
curl --request GET 'http://192.168.10.102:8089/learn_test/user/hello'
4. 配置nginx转发
bash
//learn.conf
server {
listen 8080;
server_name localhost;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
#learn_test服务
location /learn_test/ {
proxy_pass http://192.168.10.102:8089;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
bash
docker exec nginx nginx -t
docker compose down nginx
docker compose up -d nginx
