【Docker笔记02】【常用软件安装】

news2024/11/29 2:53:03

一、前言

本系列是根据 B 站 尚硅谷 Docker 视频 学习记录笔记。因为没有视频课件,部分内容摘自 https://www.yuque.com/tmfl/cloud/dketq0。

本系列仅为自身学习笔记记录使用,记录存在偏差,推荐阅读原视频内容或本文参考笔记。


本文主要介绍 Tomcat、Mysql、Redis 在 Docker 中的安装过程。

二、Tomcat 安装

[root@192 ~]# docker search tomcat
[root@192 ~]# docker pull tomcat
[root@192 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
tomcat       latest    fb5657adc892   2 years ago   680MB
# 启动
[root@192 ~]# docker run -it -p 8080:8080 tomcat
# 查看
[root@192 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND             CREATED          STATUS          PORTS                                       NAMES
58f903e80a2b   tomcat    "catalina.sh run"   12 seconds ago   Up 11 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   great_nash


需要注意:

Docker 版本的 Tomcat 无法访问默认Tomcat 页面,因为其webapps 目录下是空的,如果需要可以将容器内部的tomcat 目录下的webapps.dist 替换 webapps 如下:

# 查看目录下内容
root@58f903e80a2b:/usr/local/tomcat# ls
BUILDING.txt	 LICENSE  README.md	 RUNNING.txt  conf  logs	    temp     webapps.dist
CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin	      lib   native-jni-lib  webapps  work
# 删除旧的 webapps 目录,替换新的
root@58f903e80a2b:/usr/local/tomcat# rm -rf webapps
root@58f903e80a2b:/usr/local/tomcat# mv webapps.dist/ webapps
root@58f903e80a2b:/usr/local/tomcat# ls
BUILDING.txt  CONTRIBUTING.md  LICENSE	NOTICE	README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  work
root@58f903e80a2b:/usr/local/tomcat# cd webapps/
root@58f903e80a2b:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager

也可以通过如下命令下载tomcat8 免修改版的镜像

[root@192 ~] docker pull billygoo/tomcat8-jdk8

三、Mysql 安装

1. 简单安装

[root@192 ~]# docker pull mysql:5.7
[root@192 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
tomcat       latest    fb5657adc892   2 years ago   680MB
mysql        5.7       c20987f18b13   2 years ago   448MB
[root@192 ~]# docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
c54db5ffd8521af204b77fcd6fac10016b8b60d62d555950eafb4b3654d2589e
[root@192 ~]# docker ps
CONTAINER ID   IMAGE       COMMAND                   CREATED              STATUS              PORTS                                                  NAMES
c54db5ffd852   mysql:5.7   "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   lucid_murdock
58f903e80a2b   tomcat      "catalina.sh run"         24 minutes ago       Up 24 minutes       0.0.0.0:8080->8080/tcp, :::8080->8080/tcp              great_nash
# 进入容器
[root@192 ~]# docker exec -it c54db5ffd852 /bin/bash
# 连接Mysql
root@c54db5ffd852:/usr/local# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.36 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

# 需要注意,默认情况下Docker mysql 5.7 版本编码可能会出现问题,需要修正编码
# 如果使用外部建表工具(如 navicat )建表会按照 navicat 的字符集来创建表
# 如果使用命令直接建表则按照服务器字符集版本建表可能出现中文乱码
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

外界可以通过虚拟机的映射连接

在这里插入图片描述

2. 复杂安装

相较于上面需要解决两个问题:

  1. 数据库使用数据卷备份数据问题
  2. 数据库字符编码不对导致中文乱码问题
# 使用数据卷挂载,完成数据备份问题
[root@192 ~]# docker run -d -p 3306:3306 --privileged=true -v /mydocker/mysql/log:/var/log/mysql -v /mydocker/mysql/data:/var/lib/mysql -v /mydocker/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root --name mysql  mysql:5.7 
fda0fd20ea3e73ce45aa4044a5b183c334502a21a595aa4031929d48bce083cb

# 解决中文乱码: 新建并修改my.cnf 文件
[root@192 ~]# cd /mydocker/mysql/conf/
[root@192 conf]# ls
[root@192 conf]# vim my.cnf
[root@192 conf]# cat my.cnf 
[client]
default_character_set=utf8
[mysqld]
collation_server=utf8_general_ci
character_set_server=utf8
[root@192 conf]# 
[root@192 conf]# docker ps
CONTAINER ID   IMAGE       COMMAND                   CREATED          STATUS          PORTS                                                  NAMES
fda0fd20ea3e   mysql:5.7   "docker-entrypoint.s…"   10 minutes ago   Up 9 minutes    0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
58f903e80a2b   tomcat      "catalina.sh run"         52 minutes ago   Up 52 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp              great_nash

# 重启Mysql 
[root@192 conf]# docker restart mysql
mysql
[root@192 conf]# docker exec -it fda0fd20ea3e /bin/bash
root@fda0fd20ea3e:/# 
# 连接 Mysql
root@fda0fd20ea3e:/# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.36 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
# 查看修改后的字符集
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

四、 Redis 安装

1. 基础安装

[root@192 /]# docker pull redis:6.0.8

[root@192 /]# docker run -d -p 6379:6379 redis:6.0.8
b38f0175807ec031bbd5e9c4194311fb0bfc8486d982a7464a807db1ab962e46
[root@192 /]# docker ps
CONTAINER ID   IMAGE         COMMAND                   CREATED             STATUS             PORTS                                                  NAMES
b38f0175807e   redis:6.0.8   "docker-entrypoint.s…"   4 seconds ago       Up 3 seconds       0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              heuristic_matsumoto
fda0fd20ea3e   mysql:5.7     "docker-entrypoint.s…"   20 minutes ago      Up 10 minutes      0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
58f903e80a2b   tomcat        "catalina.sh run"         About an hour ago   Up About an hour   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp              great_nash
[root@192 /]# docker exec -it b38f0175807e /bin/bash
root@b38f0175807e:/data# redis-cli
127.0.0.1:6379> set k v
OK
127.0.0.1:6379> get k
"v"

2. 复杂安装

相较于上面需要解决两个问题:

  1. Redis 数据挂载在宿主机
  2. 使用指定的Redis 配置文件启动

具体过程如下:

  1. 宿主机新增redis.conf 文件并修改主要是以下几点:

    # 新增:开启密码验证
    requirepass 123
    # 注释:允许外地连接
    # bind 127.0.0.1 -::1
    # daemonize 设置为 no 或者注释,否则与docker run 的 -d 冲突
    daemonize no
    # 开启 AOF 持久化, 可选
    appendonly yes
    # 保护模式关闭:可选
    protected-mode no
    
  2. 启动 docker 中的redis

    [root@192 redis]# docker run -p 6379:6379 --name myredis --privileged=true -v /mydocker/redis/redis.conf:/etc/redis/redis.conf -v /mydocker/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf
    9a0d7ee72fa10d8fd3a6ca13d7597efec767776a6b0b03c12f7ef6ec4b04283f
    [root@192 redis]# docker ps 
    CONTAINER ID   IMAGE         COMMAND                   CREATED         STATUS         PORTS                                       NAMES
    9a0d7ee72fa1   redis:6.0.8   "docker-entrypoint.s…"   4 seconds ago   Up 3 seconds   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   myredis
    58f903e80a2b   tomcat        "catalina.sh run"         3 hours ago     Up 3 hours     0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   great_nash
    # 进入容器
    [root@192 redis]# docker exec -it myredis /bin/bash
    root@9a0d7ee72fa1:/data# redis-cli
    # 执行命令没有权限
    127.0.0.1:6379> set k1 v1
    (error) NOAUTH Authentication required.
    127.0.0.1:6379> exit
    
    # 使用密码重新连接后执行命令
    root@9a0d7ee72fa1:/data# redis-cli -a 123
    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
    127.0.0.1:6379> set k1 v1
    OK
    

    也可以通过Redis 客户端工具连接查看
    在这里插入图片描述

需要注意:

  1. 需要注意,不同版本的 Redis Conf 文件使用可能会有问题,建议使用同版本 Redis conf 文件
  2. 启动时返回容器id,容器却没启动成功可以通过 docker logs [容器id] 查看容器启动错误日志
    [root@192 redis]# docker run -p 6379:6379 --name myredis --privileged=true -v /mydocker/redis/redis.conf:/etc/redis/redis.conf -v /mydocker/redis/data:/data -d redis:6.0.8 /usr/local/bin/redis-server /etc/redis/redis.conf
    9e92ef584f78a335495890f93be807ebefe1b9b713069ed4ddbbcc4f47c6d0dc
    [root@192 redis]# docker ps -a
    CONTAINER ID   IMAGE         COMMAND                   CREATED          STATUS                      PORTS                                       NAMES
    9e92ef584f78   redis:6.0.8   "docker-entrypoint.s…"   11 seconds ago   Exited (1) 11 seconds ago                                               myredis
    c54db5ffd852   mysql:5.7     "docker-entrypoint.s…"   2 hours ago      Exited (0) 2 hours ago                                                  lucid_murdock
    58f903e80a2b   tomcat        "catalina.sh run"         2 hours ago      Up 2 hours                  0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   great_nash
    # 查看容器启动日志,发现是 redis.conf 配置文件问题
    [root@192 redis]# docker logs 9e92ef584f78
    
    *** FATAL CONFIG FILE ERROR (Redis 6.0.8) ***
    Reading the configuration file, at line 343
    >>> 'set-proc-title yes'
    Bad directive or wrong number of arguments
    

五、参考内容

B 站 尚硅谷 Docker 视频
https://www.yuque.com/tmfl/cloud/dketq0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1559973.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Adobe ColdFusion 任意文件读取漏洞复现(CVE-2024-20767)

0x01 产品简介 Adobe ColdFusion是美国奥多比(Adobe)公司的一套快速应用程序开发平台。该平台包括集成开发环境和脚本语言,将可扩展、改变游戏规则且可靠的产品的愿景变为现实。 0x02 漏洞概述 由于 Adobe ColdFusion 的访问控制不当,未经身份认证的远程攻击者可以构造恶…

go语言基础学习-通道(续)

1、如何有序的从通道取值 第一种 判断ok的值 package day13import "fmt"func D131() {ch1 : make(chan int)// 开始goroutine将0-100的数据发送到ch1中go func() {for i : 0; i < 100; i {ch1 <- i}close(ch1)}()for {i, ok : <-ch1 // 通道关闭后再取值o…

计算机网络-HTTP相关知识(一)

HTTP基础 基本概念&#xff1a;HTTP是一种计算机之间交流通信的规范&#xff0c;它允许数据在两点之间传输&#xff0c;这个过程可以包括中转或接力。HTTP不仅仅包括文本&#xff0c;还可以包括图片、音频等超文本。状态码&#xff1a;HTTP状态码分为五类&#xff1a; 2xx&…

移植DM9000驱动至内核(linux-2.6.32.24)

目录 概述 1 移植 DM9000驱动 1.1 添加设备驱动代码 1.2 调整 DM9000 所用的位宽寄存器 1.3 配置MAC地址 2 配置和编译DM9000 Driver至内核 3 验证 概述 本文主要介绍如何移植DM9000的驱动到linux-2.6.32.24内核&#xff0c;笔者详细记录了内核移植过程中遇见的问题&…

【InternLM 实战营第二期笔记】InternLM1.8B浦语大模型趣味 Demo

体验环境 平台&#xff1a;InternStudio GPU&#xff1a;10% 配置基础环境 studio-conda -o internlm-base -t demo 与 studio-conda 等效的配置方案 conda create -n demo python3.10 -y conda activate demo conda install pytorch2.0.1 torchvision0.15.2 torchaudio2…

如何使用 Python 本地客户端操作读写云服务器 Redis 缓存数据库详细教程(更新中)

Redis 基本概述 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的使用 ANSI C 语言编写的、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库&#xff0c;并提供多种语言的 API。它通常被称为数据结构服务器&#xff0c;因为值&#xff08;value…

Docker配置Mysql

1.首页搜索mysql镜像 2.选择对应版本的MySQL&#xff0c;点击pull 3.pull完成以后&#xff0c;点击images&#xff0c;这里可以看到刚刚pull完成的mysql版本 4.打开命令界面&#xff0c;运行命令 docker images ,查看当前已经pull的images 5.运行命令设置mysql docker run -it…

PHP三种方式读取RSA密钥加解密、签名验签完整教程

目录 第一步、生成公私钥 第二步、三种方式读取RSA密钥 第1种&#xff1a;公私钥弄成一行&#xff0c;必须一行没有空格和换行 第2种&#xff1a;直接复制生成公私钥 第3种;复制密钥存储为.pem文件后缀 第三步、RSA加解密 第四步、RSA签名以及验证签名 第五步、封装完整…

[图像处理] MFC载入图片并进行二值化处理和灰度处理及其效果显示

文章目录 工程效果重要代码完整代码参考 工程效果 载入图片&#xff0c;并在左侧显示原始图片、二值化图片和灰度图片。 双击左侧的图片控件&#xff0c;可以在右侧的大控件中&#xff0c;显示双击的图片。 初始画面&#xff1a; 载入图片&#xff1a; 双击左侧的第二个控件…

QT记事本

QT记事本 1.概述 2.界面  2.1 界面布局  2.2 UI美化stylesheet   2.2.1 准备   2.2.2 stylesheet   2.2.3 效果 2.3 窗口大小调整与子控件自适应 3.信号与槽  3.1 简述  3.2 信号与槽设置   3.2.1 UI控件设置   3.2.2 UI转到槽&#xff08;自动连接&am…

Go 源码之 gin 框架

Go 源码之 gin 框架 go源码之gin - Jxy 博客 一、总结 gin.New()初始化一个实例&#xff1a;gin.engine&#xff0c;该实例实现了http.Handler接口。实现了ServeHTTP方法 注册路由、注册中间件&#xff0c;调用addRoute将路由和中间件注册到 methodTree 前缀树&#xff08;节…

flutter官方案例context_menus

1&#xff1a;根据项目中的案例进行部署 2&#xff1a;运行查看有什么用&#xff0c;可不可以直接复制粘贴 案例地址 https://github.com/flutter/samples/tree/main/context_menus案例展示方法 直接把这个文件夹中的文件复制到lib文件夹中 3&#xff0c;19&#xff0c;4的fl…

关系型数据库mysql(10)MHA的高可用

一. MHA 的相关知识 1. 什么是 MHA MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。MHA 的出现就是解决MySQL 单点的问题。MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。MHA能在故障…

[Windows]防火墙,出入站规则失效。

场景&#xff1a; 因为具体需要&#xff0c;在内网中&#xff0c;不想别人发现我们的nacos端口8848&#xff0c;因此我们设置了入站规则&#xff0c;特定的ip地址才能访问。但是实际测试中发现并不起作用。。。 经过一番排查得到一下结果。 为什么有些应用绕过了防火墙配置 有…

JimuReport积木报表 v1.7.4 公测版本发布,免费的JAVA报表工具

项目介绍 一款免费的数据可视化报表&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于excel操作风格&#xff0c;通过拖拽完成报…

Linux速览(2)——环境基础开发工具篇(其一)

本章我们来介绍一些linux的常用工具 目录 一. Linux 软件包管理器 yum 1.什么是软件包? 2. 查看软件包 3. 如何安装软件 4. 如何卸载软件 5.yum补充 6. 关于 rzsz 二. Linux编辑器-vim使用 1. vim的基本概念 2. vim的基本操作 3. vim正常模式命令集 4. vim末行模式…

计算机网络-从输入网址到访问网站的全过程

当我们在浏览器中输入一个网址并按下回车键时&#xff0c;会发生一系列复杂的过程&#xff0c;最终使我们能够看到网页的内容。以下是这个过程的详细步骤&#xff1a; 客户端&#xff1a;首先&#xff0c;用户在浏览器中键入网址&#xff0c;然后浏览器会根据这个网址生成一个H…

vultr ubuntu 服务器远程桌面安装及连接

一. 概述 vultr 上开启一个linux服务器&#xff0c;都是以终端形式给出的&#xff0c;默认不带 ui 桌面的&#xff0c;那其实对于想使用服务器上浏览器时的情形不是很好。那有没有方法在远程服务器安装桌面&#xff0c;然后原程使用呢&#xff1f;至少ubuntu的服务器是有的&am…

C练习题(1)

变种水仙花&#xff08;来自牛课网&#xff09; 题目 变种水仙花数 - Lily Number&#xff1a;把任意的数字&#xff0c;从中间拆分成两个数字&#xff0c;比如1461 可以拆分成&#xff08;1和461&#xff09;,&#xff08;14和61&#xff09;,&#xff08;146和1),如果所有拆…

IDEA 如何快速创建 Springboot 项目,面试题kafka数据丢失问题

&#xff08;3&#xff09;填写并选择&#xff1a; 1&#xff0c;2 处&#xff1a;是 Maven 工程的两个属性唯一标识&#xff0c;随意填。 3处&#xff1a;类型选择 Maven 项目 4处&#xff1a;语言选择 Java 5处&#xff1a;打包方式选择 Jar 6处&#xff1a;Java版本选择…