程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 容器部署 - Docker

    • Docker - 介绍
    • Docker - 安装
    • Docker - 常用命令
    • Docker - 镜像原理
    • Docker - 网络网桥
    • Docker - 数据卷
    • Docker - 软件安装
      • 1. Tomcat安装使用
        • 版本选择
        • 安装修改
        • 启动使用
        • 挂载特性
        • 相关指令
      • 2. MySQL安装
        • 安装启动
        • 其他命令
      • 3. Redis安装
        • 安装
        • 启动
        • 其他
      • 4. ElasticSearch安装
        • 安装
        • 配置
        • 启动
      • 5. Kibana安装
      • 6. 可视化工具Portainer
        • 安装启动
        • docker-compose安装启动
        • 登录和注册
    • Docker - Dockerfile
    • Docker - Compose
    • Docker - Ideal集成
  • 持续集成 - Jenkins

  • 容器管理 - kubernetes

  • 运维工具
  • 容器部署 - Docker
scholar
2023-11-24
目录

Docker - 软件安装

  • 1. Tomcat安装使用
    • 版本选择
    • 安装修改
    • 启动使用
    • 挂载特性
    • 相关指令
  • 2. MySQL安装
    • 安装启动
    • 其他命令
  • 3. Redis安装
    • 安装
    • 启动
    • 其他
  • 4. ElasticSearch安装
    • 安装
    • 配置
    • 启动
  • 5. Kibana安装
  • 6. 可视化工具Portainer
    • 安装启动
    • docker-compose安装启动
    • 登录和注册

# 1. Tomcat安装使用

tomcat 版本网址:https://registry.hub.docker.com/_/tomcat (opens new window)

# 版本选择

tomcat 有很多的版本分支,一个版本可能有多个分支,如 8-jre 代表 Tomcat 8 内置 jre8 的版本、 8-jdk8 代表 Tomcat 8 内置 jdk8 的版本等等。所以根据需求进行版本选择。(jdk 包括了 jre,但是相对而言比较大)

image-20211125005004035

# 安装修改

这里选择的是 8.5.73-jre8-temurin-focal 版本,先下载:

docker pull tomcat:8.5.73-jre8-temurin-focal
1

下载的版本名太长,我们可以创建短的版本,然后删除掉长的版本






 











 

# 执行命令
docker images tomcat

# 返回结果
REPOSITORY    TAG                         IMAGE ID       CREATED        SIZE
tomcat        8.5.73-jre8-temurin-focal   7ec084df520c   24 hours ago   249MB

# 新增短版本
docker tag 7ec084df520c tomcat:8.5.73
# 删除长版本
docker rmi tomcat:8.5.73-jre8-temurin-focal

# 查询查看镜像
docker images tomcat

# 返回结果
REPOSITORY    TAG                         IMAGE ID       CREATED        SIZE
tomcat        8.5.73                      7ec084df520c   24 hours ago   249MB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 启动使用

Tomcat 的使用相比较其他还是非常简单的,Tomcat 启动后,进入容器的默认目录是 /usr/local/tomcat,这里提供几个启动命令:

  • 命名后台启动

    docker run -d --name tomcat01 -p 8080:8080 tomcat:8.5.73
    
    1
  • webapps 启动:创建 webapps 的数据卷,在宿主机的挂载目录部署项目,就会同步到容器的 webapps 目录下

    docker run -d --name tomcat01 -p 8080:8080 -v tomcat01-webapps:/usr/local/tomcat/webapps tomcat:8.5.73
    
    1
  • 配置文件启动:创建配置文件的数据卷,在宿主机的挂载目录修改配置文件,就会同步到容器的配置文件中

    docker run -d --name tomcat01 -p 8080:8080 -v tomcat01-webapps:/usr/local/tomcat/webapps -v tomcat01-conf:/usr/local/tomcat/conf tomcat:8.5.73
    
    1

    tomcat01-webapps 和 tomcat01-conf 根据需求创建数据卷名。

我给的启动命令都是 默认目录挂载 方式,不建议使用具体目录挂载方式,一:位置不统一,不好维护。二:创建时(空目录)会把 Tomcat 容器的挂载目录覆盖掉(清空)。

以第二个启动命令为例子,我们先启动 Tomcat 容器,并进入该容器内部:

# 启动容器
docker run -d --name tomcat01 -p 8080:8080 -v tomcat01-webapps:/usr/local/tomcat/webapps tomcat:8.5.73

# 进入容器内部
docker exec -it tomcat01 bash
1
2
3
4
5

进入 webapps 目录,查看内容:

root@038e7c8efee3:/usr/local/tomcat# cd webapps
root@038e7c8efee3:/usr/local/tomcat/webapps# ls

# 内容为空
1
2
3
4

会发现为空,这是因为 Tomcat 官方把所有的初始化文件放到了 webapps.dist 目录下,我们去看看:

root@038e7c8efee3:/usr/local/tomcat/webapps# cd ../webapps.dist
root@038e7c8efee3:/usr/local/tomcat/webapps.dist# ls

# 返回结果
docs  examples  host-manager  manager  ROOT
1
2
3
4
5

所以我们需要把 webapps.dist 的内容拷贝到 webapps 目录中,为什么不删除 webapps 目录然后把 webapps.dist 重命名呢?因为容器运行期间无法删除文件,而不运行我们无法进入容器内部,所以只能一个一个拷贝过去

root@038e7c8efee3:/usr/local/tomcat/webapps.dist# cp -r docs ../webapps
root@038e7c8efee3:/usr/local/tomcat/webapps.dist# cp -r examples/ ../webapps
root@038e7c8efee3:/usr/local/tomcat/webapps.dist# cp -r host-manager/ ../webapps
root@038e7c8efee3:/usr/local/tomcat/webapps.dist# cp -r manager/ ../webapps
root@038e7c8efee3:/usr/local/tomcat/webapps.dist# cp -r ROOT/ ../webapp
1
2
3
4
5

此时我们进入默认目录 /var/lib/docker/volumes/tomcat01-webapps/_data 下查看拷贝的内容是否同步过来:

# 进入默认目录并查看内容
cd /var/lib/docker/volumes/tomcat01-webapps/_data
ls

# 返回结果
docs  examples  host-manager  manager  ROOT
1
2
3
4
5
6

虽然同步过来了,但是这样子会很累对吧,而且重新启动一个新的 Tomcat 容器,必须要重新执行 5 个拷贝操作,我们可以利用数据卷来同步数据。

# 挂载特性

可以利用数据卷特性:

  • 默认目录挂载:
    • 当宿主机挂载目录已经存在时,双方挂载完成后,宿主机挂载目录覆盖容器挂载目录
    • 当宿主机挂载目录不存在时,双方挂载完成后,容器挂载目录覆盖宿主机挂载目录
  • 具体目录挂载
    • 当宿主机挂载目录无论存不存在,双方挂载完成后,宿主机挂载目录都会覆盖容器挂载目录

所以我们有两种方式:

首先我们手动拷贝一份 tomcat01 的宿主机挂载目录,该目录已经将数据同步过来,目录有 webapps 的内容了

cd /var/lib/docker/volumes

# 拷贝一份 tomcat01 的宿主机挂载目录,新的目录名叫 tomcat02-webapps
cp -r tomcat01-webapps tomcat02-webapps
1
2
3
4

方式 1:默认目录挂载

启动第二个 Tomcat 容器,利用 默认目录挂载 的第一个特性进行与容器的挂载

docker run -d --name tomcat02 -p 8081:8080 -v tomcat02-webapps:/usr/local/tomcat/webapps tomcat:8.5.73
1
# 进入 tomcat02 容器
docker exec -it tomcat02  bash

# 进入 webapps 目录,并查看内容
root@50edd2a86a8d:/usr/local/tomcat# cd webapps
root@50edd2a86a8d:/usr/local/tomcat/webapps# ls

# 返回结果
docs  examples  host-manager  manager  ROOT
1
2
3
4
5
6
7
8
9

说明同步成功。

方式 2:具体目录挂载

启动第三个 Tomcat 容器,利用 具体目录挂载 方式进行与容器的挂载(缺点:指定到 _data 目录,因为该方式是从指定的目录覆盖容器的目录)

docker run -d --name tomcat03 -p 8082:8080 -v /var/lib/docker/volumes/tomcat02-webapps/_data:/usr/local/tomcat/webapps tomcat:8.5.73
1

进入容器看看,是否同步过来了

# 进入 tomcat03 容器
docker exec -it tomcat03 bash

# 进入 webapps 目录,并查看内容
root@ba7961226856:/usr/local/tomcat# cd webapps
root@ba7961226856:/usr/local/tomcat/webapps# ls

# 返回结果
docs  examples  host-manager  manager  ROOT
1
2
3
4
5
6
7
8
9

说明同步成功。

总结:

推荐方式 1,因为方式 2 必须指定到 _data 目录,不灵活。而使用方式 1,必须先确保宿主机存在该目录,并且目录里有想要的内容。

Tomcat 也有配置文件,里面可以修改 8080 端口,上面的第三个启动命令就是给配置文件进行数据卷挂载,步骤和 webapps 的两个例子一样,这里不演示了。

值得注意的是:修改完配置文件的端口后,需要重新 run 一个新的 Tomcat 容器,然后该容器和宿主机修改后的配置文件目录挂载,才能真正实现端口的修改,因为第一次端口映射在 run 时是 8080:8080,无法修改为 8080:XXXX(修改的端口),需要重新 run 才行,而 run 出来的配置文件默认端口还是 8080,所以需要利用数据卷特性,让宿主机的配置文件覆盖容器的 8080 端口配置文件。

# 相关指令

进入 Tomcat 容器

docker exec -it <容器名或 id> bash
1

查看 Tomcat 容器的日志

# 加 -f 代表实时监听日志动态
docker logs [-f] <容器名或 id>
1
2

# 2. MySQL安装

MySQL 版本网址:https://registry.hub.docker.com/_/mysql (opens new window)

# 安装启动

  • 拉取镜像到本地

    docker pull mysql:tag   # tag 默认不加是最新版
    
    docker pull mysql:8.0.27   # 目前最新版本为 8.0.27
    
    1
    2
    3
  • 简单运行 MySQL 服务,将需要挂载的目录拷贝出来

    docker run -d --name mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.27
    
    1

    密码自行修改。使用 3307 是因为宿主机可能已经安装了 MySQL,它占用了 3306 端口。

    拷贝挂载的目录:

    # 先创建挂载目录
    mkdir -p /docker/mysql
    
    # MySQL的相关文件同步到挂载目录
    docker cp mysql:/var/lib/mysql /docker/mysql/data
    docker cp mysql:/etc/mysql/conf.d /docker/mysql/conf
    docker cp mysql:/var/log /docker/mysql/log
    
    1
    2
    3
    4
    5
    6
    7

    为什么要拷贝出来呢?因为一旦挂载成功,宿主机的挂载目录会覆盖容器的目录,所以我们确保宿主机的挂载目录不能为空,必须要有原来容器目录的文件。

  • 宿主机与容器实现挂载,保证数据安全,对应上方拷贝出来的目录

    无注解版(可用)

    docker run -d \
        --name mysql \
        --restart always \
        -p 3307:3306 \
        -e MYSQL_ROOT_PASSWORD=123456 \
        -v /docker/mysql/data:/var/lib/mysql \
        -v /docker/mysql/conf:/etc/mysql/conf.d \
        -v /docker/mysql/log:/var/log \
        mysql:8.0.27
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

    有注解版(只看不用)

    docker run -d \
        --name mysql \								# 容器名为 mysql
        --restart always \							# Docker 重启,容器也重启
        -p 3307:3306 \								# 将容器内部 3306 端口映射到 主机的 3306 端口
        -e MYSQL_ROOT_PASSWORD=123456 \				# 设置登陆密码为 123456,登陆用户为 root
        -v /docker/mysql/data:/var/lib/mysql \		# 将容器的「数据」挂载到主机的相应文件夹
        -v /docker/mysql/conf:/etc/mysql/conf.d \   # 将容器的「自定义配置文件夹」挂载到主机的相应文件夹
        -v /docker/mysql/log:/var/log \				# 将容器的「日志文件夹」挂载到主机的相应位置
        mysql:8.0.27
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

    宿主机的挂载目录、conf.d 目录、data 数据目录、日志目录根据需求决定,包括密码。

    这里说明一下:主配置文件名叫 my.cnf,位置在 /etc/mysql,但是不建议直接操作 my.cnf 主配置文件,官方也是如此,所以官方提供了 conf.d 目录,只要在 conf.d 目录下创建 xx.cnf 配置文件,那么该配置文件自动被引入 my.cnf 主配置文件,避免直接操作 my.cnf 引起安全问题。

    my.cnf 文件里有这么一句代码:

    includedir /etc/mysql/conf.d/
    
    1

    可以看出,my.cnf 会自动读取该目录下的所有 .cnf 配置文件。

    笔记

    确保简单启动的密码和挂载启动的保持一致,因为启动后,密码保存在 /var/lib/mysql 目录下,而挂载的时候,宿主机的该目录会覆盖容器的目录,导致密码是简单启动的密码。所以确保两种启动方式密码保持一致。

    2024-01-10 @scholar

如果MySQL数据库连接过多导致无法创建新的连接,可以通过一下步骤解决

可以在宿主机挂载的配置文件conf目录下新建一个.cnf结尾的文件,输入一下配置(适用于无法连接上MySQL)

max_connections = 500
1

如果还能连接上MySQL,可以通过一下命令解决

SHOW VARIABLES LIKE 'max_connections';   # 检查最大连接数
SET GLOBAL max_connections = 新的连接数;  # 增加最大连接数
SHOW PROCESSLIST; 	# 查看当前的连接情况
1
2
3
  • 配置 UTF-8 编码

    进入宿主机的配置文件挂载目录:/docker/mysql/conf,有一个 mysql.cnf 配置文件,编辑它

    cd /docker/mysql/conf
    vim mysql.cnf
    
    1
    2

    添加如下内容(如果文件有 [mysql],必须先删除掉):

    [mysqld]
    character-set-server=utf8
    collation-server=utf8_general_ci
    
    [client]
    default-character-set=utf8
    
    1
    2
    3
    4
    5
    6

    image-20211211231915077

  • 进入 MySQL 容器,配置 UTF-8 编码

    # 语法
    docker exec -it 容器名 | 容器id bash
    
    docker exec -it mysql bash
    
    1
    2
    3
    4

    进入容器后,登录 MySQL

    mysql -uroot -p123456
    
    1

    查看数据库的编码是否是 UTF-8

    SHOW VARIABLES LIKE '%char%';
    
    1

    如图则代表配置成功:

    image-20211211232140907

    国际上的 UTF-8,在 MySQL 中,对标的是 uft8mb4。

  • 外部查看 MySQL 日志(可选)

    docker logs 容器id | 容器名
    
    1

# 其他命令

  • 将 MySQL 数据库备份为 sql 文件

    • 导出全部数据库的数据为 sql 文件

      docker exec 容器名 | 容器 id bash -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /opt/all-database.sql 
      
      1

      用户名要根据需求替换、/opt/all-database 是导出文件的路径,需要根据需求修改。密码不需要修改,它会自动获取登录的密码。

    • 导出指定的数据库数据的 sql 文件

      docker exec 容器名 | 容器 bash -c 'exec mysqldump --databases 库名 -uroot -p"$MYSQL_ROOT_PASSWORD"' > /opt/one-database.sql
      
      1

      同理根据需求修改。

    • 导出指定的数据库,但是不要数据

      docker exec 容器名 | 容器 bash -c 'exec mysqldump --no-data --databases 库名 -uroot -p"$MYSQL_ROOT_PASSWORD"' > /opt/one-database.sql
      
      1
  • 执行 sql 文件到 MySQL 中

    docker exec 容器名 | 容器id bash -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /opt/xxx.sql
    
    1

    /opt/xxx.sql 是 sql 文件的路径。

# 3. Redis安装

# 安装

Redis 版本网址:https://registry.hub.docker.com/_/redis (opens new window)

Redis 的安装还是比较简单的,这里安装 6.62 版本

docker pull redis:6.2.6

# 查看 docker 容器
docker images
1
2
3
4

# 启动

Redis 启动后,进入容器的默认目录是 /data

启动指令:

  • 简单的启动,也是最快速的个人使用启动:

    docker run -d --name redis -p 6379:6379 redis:6.2.6
    
    1
  • AOP 持久化启动

    指定持久化的 .aop 文件路径,宿主机的文件路径根据需求存放,容器的文件路径默认在 /data

    docker run -d --name redis -p 6379:6379 -v redis_data:/data redis:6.2.6 redis-server --appendonly yes
    
    1

    容器的 /data 是 AOP 文件的默认路径,redis_data 根据需求修改,是宿主机的挂载目录,而 redis-server --appendonly yes 是必须的,这个命令会覆盖默认的命令,默认的命令是关闭持久化。

  • 自定义配置文件启动:指定配置文件的路径和容器的 /usr/local/etc/redis 挂载,一旦挂载后,容器的该目录获得配置文件,然后通过 redis-server /usr/local/etc/redis/redis.conf 启动该配置文件

    docker run -d --name redis -p 6379:6379 -v /opt/redis_conf:/usr/local/etc/redis redis:6.2.6 redis-server /usr/local/etc/redis/redis.conf
    
    1

    /opt/redis_conf 是在宿主机的配置文件路径,根据需求修改。

    注意:Redis 容器内没有 redis.conf 文件,启动的配置信息都是默认的。我们需要自己准备好一份 redis.conf 文件,然后通过数据卷传进容器内

    如何准备一份 redis.conf 文件呢?

    • 去官网下载对应的 Windows 版本,然后拷贝 redis.conf 到 Linux 下,再启动配置,这样很麻烦对吧

    • 直接 Linux 下创建一个 redis.conf 文件,虽然不如原生的全面,但是我们只需要加入自己的一些配置即可,其他配置 Redis 自动使用默认的

      比如:

      # 根据需求指定创建路径
      cd /opt
      vim redis_conf
      
      # 在 redis.conf 加入如下内容
      # 限制能访问 redis 的地址,根据需求修改
      bind 0.0.0.0
      
      # 默认是 yes,开启保护模式
      protected-mode no
      
      # 配置 redis 连接密码,可选
      requirepass 123456
      
      # 以守护进程方式启动,可后台启动
      daemonize no
      
      # 更改本地 redis 数据库存放文件夹(可选)
      dir ./
      
      # AOP 持久化
      appendonly yes
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      redis.conf 常用的配置
      • bind 0.0.0

        限制 redis 只能本地访问,根据需求修改

      • protected-mode no

        默认是 yes,开启保护模式,限制为本地访问

      • requirepass 123456

        配置redis连接密码,默认是注释的

      • daemonize no

        默认 no,改为 yes 代表以守护进程方式启动,可后台运行,除非kill进程(可选),改为 yes 会使配置文件方式启动 redis 失败

      • dir ./

        更改本地 redis 数据库存放文件夹(可选)

      • appendonly yes

        redis 持久化(开启了这个,redis 就不会每次重启时自动清空了)

      如果不加入 appendonly yes,可以利用 AOP 持久化启动来指定 appendonly yes 启动。

# 其他

启动后进入 redis 容器

docker exec -it redis bash
1

查看 redis 的日志

# 加 -f 代表实时监听日志动态
docker logs [-f] redis
1
2

输入 redis-cli 连接 redis,如果是连接其他服务器的 redis,则需要加参数

redis-cli -h IP地址 -p 6379
1

# 4. ElasticSearch安装

# 安装

ElasticSearch 版本网址:https://registry.hub.docker.com/_/elasticsearch (opens new window)

这里下载的版本是 7.14.2

docker pull elasticsearch:7.14.2
1

# 配置

如果启动报错

max virtual memory areas vm.max_map_count [65530] is too low,increase to at least [262144]
1

则需要进行配置,没有出现错误可以跳过

# 修改配置 sysctl.conf
vim /etc/stsctl.conf

# 加入配置信息
vm.max_map_count=262144

# 启用配置
sysctl -p
1
2
3
4
5
6
7
8

# 启动

三种启动方式:

  • 简单启动

    docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 elasticsearch:7.14.2
    
    1

    如果报错,请看 配置 进行解决

    浏览器访问的是 9200 端口

  • 持久化和配置文件启动

    ES 中所有的数据都在容器中的 /usr/share/elasticsearch/data 目录,配置文件在 /usr/share/elasticsearch/config,所以需要挂载出来

    docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -v es_data:/usr/share/elasticsearch/data -v es_config:/usr/share/elasticsearch/config elasticsearch:7.14.2
    
    1

    挂载成功后,哪怕容器被删除了,数据还是会存在宿主机的 /.../es_data 目录下

  • ik 分词器启动

    方式 1:

    首先下载好 ik 分词器,版本要和 ES 版本一致,放到 Linux 系统中,我们知道,ES 的插件目录是 /usr/share/elasticsearch/plugins 下,所以需要挂载出来

    docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -v es_data:/usr/share/elasticsearch/data -v es_config:/usr/share/elasticsearch/config -v es_plugins:/usr/share/elasticsearch/plugins elasticsearch:7.14.2
    
    1

    此时的 es_plugins 目录下为空,我们把下载好的 ik 分词器放到该目录下,然后重启 ES 即可

    cp <ik 分词器> /var/lib/docker/volumes/es_plugins/_data
    
    # 重启 es
    docker restart elasticsearch
    
    1
    2
    3
    4

    方式 2:

    先创建数据卷,把 ik 分词器放到数据卷里

    docker volume create es_plugins
    
    cp <ik 分词器> /var/lib/docker/volumes/es_plugins/_data
    
    1
    2
    3

    再启动容器进行挂载

    docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -v es_data:/usr/share/elasticsearch/data -v es_config:/usr/share/elasticsearch/config -v es_plugins:/usr/share/elasticsearch/plugins elasticsearch:7.14.2
    
    1

# 5. Kibana安装

Kibana 版本网址:https://registry.hub.docker.com/_/kibana (opens new window)

下载 Kibaba 镜像,版本要和 ElasticSearch 一致。

docker pull kibana:7.14.2
1

启动

  • 简单启动

    此时没有指定连接 ES

    docker run -d --name kibana -p 5601:5601 kibaba:7.14.2
    
    1
  • 连接 ES 启动

    docker run -d --name kibana -p 5601:5601 -e ELASTICSEARCH_URL=http://IP地址:9200 kibaba:7.14.2
    
    1
  • 先简单启动,后在配置文件再连接 ES,重启生效

    首先知道配置文件的路径是 /usr/share/kibana/config,将它挂载出来

    docker run -d --name kibana -p 5601:5601 -v kibana_conf:/usr/share/kibana/config kibaba:7.14.2
    
    1

    启动后进入宿主机的 kibana_conf 目录或者 容器的 /usr/share/kibana/config 目录,这里演示前者

    cd /var/lib/docker/volumes/kibana_conf/_data
    
    vim kibana.yml
    
    1
    2
    3

    修改为 ES 的 IP 地址

    image-20211125131216888

# 6. 可视化工具Portainer

# 安装启动

官方安装地址:https://www.portainer.io/installation (opens new window)

# 下载 portainer
docker pull portainer/portainer

# 创建 portainer 的数据卷
docker volume create portainer_data

# 启动 portainer,指定映射端口等信息,--restart=always 代表该容器被关闭了也会自启动
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

# 可以查看容器是否成功启动
docker ps
1
2
3
4
5
6
7
8
9
10
11

# docker-compose安装启动

如果没学到 docker-compose 相关内容,可以忽略,或者 我的传送门。

在 docker-compose.yml 文件里添加入内容:

version "3.0"

services:
  portainer:
    image: portainer/portainer
    container_name: portainer
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data
    networks:
      - kele
    ports:
      - "8000:8000"
      - "9000:9000"
1
2
3
4
5
6
7
8
9
10
11
12
13
14

其中需要修改的是第 11 行网桥名,根据需求自行填写,其他尽量不变,如果端口被占用,可以修改。

# 登录和注册

用浏览器访问:http://localhost:9000 或者 http://IP地址:9000

第一次打开界面要注册用户名和密码,密码要求 8 位以上,如:admin123

编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
Docker - 数据卷
Docker - Dockerfile

← Docker - 数据卷 Docker - Dockerfile→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式