Linux - Docker及常用镜像部署

文章目录

  • [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
相关推荐
xUxIAOrUIII1 小时前
守护进程(daemon)
linux·运维
2603_954708311 小时前
微能网的核心硬件协调控制装置有哪些功能?
大数据·运维·人工智能·架构·能源
Lucas_coding1 小时前
SSH 常见用法(四):使用 SCP 和 SFTP 远程传输文件
运维·ssh
流浪0011 小时前
Linux系统篇44——线程(九) 互斥锁的接口与原理,从 xchgb 的原子交换说起
linux·操作系统·线程·互斥锁·互斥锁原理
Fcy6481 小时前
Linux下 网络层IP协议详解
linux·运维·tcp/ip
zhangx1234_1 小时前
javaEE 多线程1
java·linux·服务器
沙滩上的一颗石头1 小时前
裴讯N1刷Armbian后写入EMMC引导失败解决方法
linux
NPE~1 小时前
CMDB科普:配置管理数据库——运维相关
运维·数据库·科普·cmdb·配置管理数据库
陌上花开缓缓归以3 小时前
arm linux ddr 内存布局
linux·arm开发