七、Docker常规软件安装

目录

一、总体步骤

二、安装tomcat

1、docker hub上查找tomcat镜像

三、安装MySQL

1、查看MySQL镜像

2、拉取MySQL镜像到本地,本次拉取MySQL5.7

3、使用MySQL镜像创建容器

4、使用Windows数据库工具,连接MySQL实例

5、常见问题

6、创建MySQL容器实例

7、新建my.cnf通过容器卷同步给MySQL容器实例

8、重启下MySQL容器实例

9、进入MySQL

四、安装redis

1、拉取镜像

2、启动镜像创建容器实例

3、在宿主机新建redis目录,/usr/redis 作为docker容器的宿主机目录

4、启动redis镜像创建redis实例

5、测试redis连接


一、总体步骤

1、搜索镜像

2、拉去镜像

3、查看镜像

4、启动镜像

5、停止容器

6、移除容器

二、安装tomcat

1、docker hub上查找tomcat镜像

#查找镜像
[root@localhost tmp]# docker search tomcat
#拉去tomcat 镜像
[root@localhost tmp]# docker pull tomcat
#docker images 查看拉去的tomcat镜像
[root@localhost tmp]# docker images tomcat
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
tomcat       latest    fb5657adc892   2 years ago   680MB#使用tomcat镜像创建容器实例(也叫运行镜像)
[root@localhost tmp]# docker run -d -p 8080:8080 --name tomcat1 tomcat
e2770f6be6dc13015344e36c4e54769df600708b696e767690ada53f2c4972b5
[root@localhost tmp]# 
[root@localhost tmp]# docker ps
CONTAINER ID   IMAGE     COMMAND             CREATED         STATUS         PORTS                                       NAMES
e2770f6be6dc   tomcat    "catalina.sh run"   7 seconds ago   Up 6 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   tomcat1
[root@localhost tmp]# 
#访问tomcat首页
http://192.168.153.128:8080/
可能会报错 404未找到
原因是tomcat新版本,对于首页的访问发生了些许的改变。属于正常。有以下原因
1、可能没有映射端口,或者没有关防火墙,我们刚才也映射了,防火墙也是关着的
2、把webapps.dist目录换成webapps,进入容器
[root@localhost tmp]# docker ps
CONTAINER ID   IMAGE     COMMAND             CREATED         STATUS         PORTS                                       NAMES
e2770f6be6dc   tomcat    "catalina.sh run"   5 minutes ago   Up 5 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   tomcat1
[root@localhost tmp]# 
[root@localhost tmp]# docker exec -it e2770f6be6dc /bin/bash
root@e2770f6be6dc:/usr/local/tomcat# root@e2770f6be6dc:/usr/local/tomcat# pwd
/usr/local/tomcatroot@e2770f6be6dc:/usr/local/tomcat# ls -l
total 132
-rw-r--r--. 1 root root 18994 Dec  2  2021 BUILDING.txt
-rw-r--r--. 1 root root  6210 Dec  2  2021 CONTRIBUTING.md
-rw-r--r--. 1 root root 60269 Dec  2  2021 LICENSE
-rw-r--r--. 1 root root  2333 Dec  2  2021 NOTICE
-rw-r--r--. 1 root root  3378 Dec  2  2021 README.md
-rw-r--r--. 1 root root  6905 Dec  2  2021 RELEASE-NOTES
-rw-r--r--. 1 root root 16517 Dec  2  2021 RUNNING.txt
drwxr-xr-x. 2 root root  4096 Dec 22  2021 bin
drwxr-xr-x. 1 root root    22 Jun 22 12:10 conf
drwxr-xr-x. 2 root root  4096 Dec 22  2021 lib
drwxrwxrwx. 1 root root    80 Jun 22 12:10 logs
drwxr-xr-x. 2 root root   159 Dec 22  2021 native-jni-lib
drwxrwxrwx. 2 root root    30 Dec 22  2021 temp
drwxr-xr-x. 2 root root     6 Dec 22  2021 webapps
drwxr-xr-x. 7 root root    81 Dec  2  2021 webapps.dist
drwxrwxrwx. 2 root root     6 Dec  2  2021 work
root@e2770f6be6dc:/usr/local/tomcat# 
root@e2770f6be6dc:/usr/local/tomcat# rm -r webappsroot@e2770f6be6dc:/usr/local/tomcat# mv webapps.dist webapps
root@e2770f6be6dc:/usr/local/tomcat# 
然后就可以访问了。
#tomcat10比较麻烦 还需要改配置,我们把它干掉,拉一个tomcat8就行
[root@localhost tmp]# docker run -d -p 8080:8080 --name tomcat8 billygoo/tomcat8-jdk8
就可以了。

三、安装MySQL

1、查看MySQL镜像

[root@localhost tmp]# docker search mysql

2、拉取MySQL镜像到本地,本次拉取MySQL5.7

[root@localhost tmp]# docker pull mysql:5.7
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
[root@localhost tmp]# [root@localhost tmp]# docker images mysql:5.7
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
mysql        5.7       c20987f18b13   2 years ago   448MB
[root@localhost tmp]# 
[root@localhost tmp]#

3、使用MySQL镜像创建容器

[root@localhost tmp]# docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
166c10ed2b7414f791042a20a0018ba4a955d30583e54f7c316623cb2546e0d2
docker: Error response from daemon: driver failed programming external connectivity on endpoint infallible_einstein (590077e55eca8279f5c4162f540bcd44499fe3c4a80a5f5091af66b322964ebd): Error starting userland proxy: listen tcp4 0.0.0.0:3306: bind: address already in use.
#有个报错,原因是我Linux 服务器上安装了MySQL8.0,提示3306端口被占用。所以创建不了容器,
修改一下映射端口
[root@localhost tmp]# docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
505ed9996b3c74c0f0791454ad6352639d04990960bfc94283bb57a38a256d51
[root@localhost tmp]# 
[root@localhost tmp]# docker ps
[root@localhost tmp]# docker exec -it 505ed9996b3c /bin/bash
root@505ed9996b3c:/# 
#进入MySQL
root@505ed9996b3c:/# mysql -uroot -p123456
#成功通过MySQL镜像运行了一个实例
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)mysql> 
mysql> create database test;
Query OK, 1 row affected (0.00 sec)mysql> use test;
Database changed
mysql> 
mysql> create table t1(id int,name varchar(20));
Query OK, 0 rows affected (0.01 sec)mysql> insert into t1 values(1,'z3');
Query OK, 1 row affected (0.01 sec)mysql> select * from  t1;
+------+------+
| id   | name |
+------+------+
|    1 | z3   |
+------+------+
1 row in set (0.00 sec)mysql>
没问题哈。

4、使用Windows数据库工具,连接MySQL实例

5、常见问题

(1)、插入中文报错
因为docker 上默认字符集编码没有修正
在docker 里边的MySQL容器实例查看
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.00 sec)mysql>

有个疑问,就是如果哪天把容器实例删除了,怎么办?跑路?

所以,我们在创建MySQL实例时候,挂载数据卷,来解决数据丢失的问题。

把这个容器干掉,我们重新创建容器实例

6、创建MySQL容器实例

[root@localhost ~]# docker run -d -p 3307:3307 --privileged=true 
-v /usr/mysql/log:/var/log/mysql 
-v /usr/mysql/data:/var/lib/mysql 
-v /usr/mysql/conf:/etc/mysql/conf.d 
-e MYSQL_ROOT_PASSWORD=123456 
--name=mysql 
mysql:5.7
18a1e538c92be54d8192a992d43f4a1d4339e7d62403985a0fe7fb9d0c106511
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS                                                            NAMES
18a1e538c92b   mysql:5.7   "docker-entrypoint.s…"   6 seconds ago   Up 3 seconds   3306/tcp, 33060/tcp, 0.0.0.0:3307->3307/tcp, :::3307->3307/tcp   mysql

7、新建my.cnf通过容器卷同步给MySQL容器实例

[root@localhost conf]# vim my.cnf
[root@localhost conf]# 
[root@localhost conf]# cat my.cnf 
[client]
user=root
password=xxxxxx
default-character-set=utf8[mysql]
prompt=(\\u@\\h) [\\d]>\\_[mysqld]
port = 3307
collation_server = utf8_general_ci
character-set-server=utf8

8、重启下MySQL容器实例

[root@localhost ~]# docker restart mysql
mysql
[root@localhost ~]# 
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS        PORTS                                                            NAMES
18a1e538c92b   mysql:5.7   "docker-entrypoint.s…"   11 minutes ago   Up 1 second   3306/tcp, 33060/tcp, 0.0.0.0:3307->3307/tcp, :::3307->3307/tcp   mysql

9、进入MySQL

[root@localhost ~]# docker exec -it 18a1e538c92b /bin/bash
root@18a1e538c92b:/# 
root@18a1e538c92b:/# 
root@18a1e538c92b:/# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
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.(root@localhost) [(none)]>
查看字符集
(root@localhost) [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
然后建库,建表,添加数据
(root@localhost) [(none)]> create database test;
Query OK, 1 row affected (0.00 sec)(root@localhost) [(none)]> use test;
Database changed
(root@localhost) [test]> 
(root@localhost) [test]> create table test1(a int,b varchar(20));
Query OK, 0 rows affected (0.01 sec)(root@localhost) [test]> insert into test1 values(1,'wu');
Query OK, 1 row affected (0.00 sec)(root@localhost) [test]> select * from test1;
+------+------+
| a    | b    |
+------+------+
|    1 | wu   |
+------+------+
1 row in set (0.00 sec)
#客户端插入中文演示
insert INTO test1 VALUES (2,'武');
(root@localhost) [test]> select * from test1;
+------+------+
| a    | b    |
+------+------+
|    1 | wu   |
|    2 | 武   |
+------+------+
2 rows in set (0.01 sec)总结:docker 安装MySQL并run之后,建议先修改字符集编码后,在新建库表,和插入数据。
还有一定要挂载容器数据卷,以免那个坑货,把mysql容器删了,数据丢失。

四、安装redis

1、拉取镜像

[root@localhost ~]# docker pull redis:6.0.8
6.0.8: Pulling from library/redis
bb79b6b2107f: Pull complete 
1ed3521a5dcb: Pull complete 
5999b99cee8f: Pull complete 
3f806f5245c9: Pull complete 
f8a4497572b2: Pull complete 
eafe3b6b8d06: Pull complete 
Digest: sha256:21db12e5ab3cc343e9376d655e8eabbdbe5516801373e95a8a9e66010c5b8819
Status: Downloaded newer image for redis:6.0.8
docker.io/library/redis:6.0.8
[root@localhost ~]# 
[root@localhost ~]# docker images redis
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
redis        6.0.8     16ecd2772934   3 years ago   104MB
[root@localhost ~]# 
[root@localhost ~]# 

2、启动镜像创建容器实例

#因为我宿主机有redis,6379端口被占用,所以我映射成6380端口
[root@localhost ~]# docker run -d -p 6380:6380 redis:6.0.8
5c4d11ca385f31015b86bb9985a7533261c359718ec390b2104e5258042bd09b
[root@localhost ~]# 
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS          PORTS                                                            NAMES
5c4d11ca385f   redis:6.0.8   "docker-entrypoint.s…"   4 seconds ago    Up 3 seconds    6379/tcp, 0.0.0.0:6380->6380/tcp, :::6380->6380/tcp              charming_dirac
18a1e538c92b   mysql:5.7     "docker-entrypoint.s…"   43 minutes ago   Up 24 minutes   3306/tcp, 33060/tcp, 0.0.0.0:3307->3307/tcp, :::3307->3307/tcp   mysql
[root@localhost ~]# [root@localhost ~]# docker exec -it 5c4d11ca385f /bin/bash
root@5c4d11ca385f:/data# 
root@5c4d11ca385f:/data# redis-cli
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379>

是不是很简单,当你觉得简单时候,那就大错特错了

当你容器删除时候,数据怎么办。是不是还得考虑数据丢失的问题。那么就需要挂载数据卷

我们先把这个容器删除

[root@localhost ~]# docker rm -f 5c4d11ca385f

3、在宿主机新建redis目录,/usr/redis 作为docker容器的宿主机目录

[root@localhost usr]# mkdir redis
[root@localhost redis]# pwd
/usr/redis
把redis配置文件拷贝到这个目录。redis配置文件,找之前的
[root@localhost redis-6.2.6]# cp redis.conf /usr/redis/
[root@localhost redis-6.2.6]# 
[root@localhost redis-6.2.6]# cd /usr/redis/
[root@localhost redis]# 
[root@localhost redis]# ll
total 92
-rw-r--r--. 1 root root 93975 Jun 23 15:59 redis.conf
[root@localhost redis]# 
修改配置文件,
daemonize no 改为no,默认是yes
port 6380端口改为6380
bind 0.0.0.0 注释掉 运行外部访问

4、启动redis镜像创建redis实例

[root@localhost ~]# docker run -p 6380:6380 --name=redis 
--privileged=true 
-v /usr/redis/redis.conf:/etc/redis/redis.conf 
-v /usr/redis/data:/data 
-d redis:6.0.8 
redis-server /etc/redis/redis.conf
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE         COMMAND                  CREATED         STATUS         PORTS                                                            NAMES
e23744ebb4f4   redis:6.0.8   "docker-entrypoint.s…"   6 minutes ago   Up 6 seconds   6379/tcp, 0.0.0.0:6380->6380/tcp, :::6380->6380/tcp              redis
18a1e538c92b   mysql:5.7     "docker-entrypoint.s…"   2 hours ago     Up 2 hours     3306/tcp, 33060/tcp, 0.0.0.0:3307->3307/tcp, :::3307->3307/tcp   mysql
[root@localhost ~]# 

终于起来了,搞了半个小时呀,因为我是直接拷贝的原来的redis配置文件,之前版本是6.2多。

现在版本是6.0,可能好多参数都不兼容。导致容器起不来,通过观察日志。看到报错,一个一个处理了。

心累

5、测试redis连接

[root@localhost ~]# docker exec -it e23744ebb4f4 /bin/bash
root@e23744ebb4f4:/data#
#因为偶我映射的端口是6380,配置文件有指定密码,所以连接时候要制定端口和密码
root@e23744ebb4f4:/data# redis-cli -p 6380 -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6380> 
127.0.0.1:6380> 
127.0.0.1:6380> ping
PONG
127.0.0.1:6380> 安装完成!

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

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

相关文章

lspci

【原】Linux之PCIE三种空间解析 PCIe学习笔记——2.PCIe配置空间 PCIE学习(2)PCIE配置空间详解 开发者分享 | 使用 lspci 和 setpci 调试 PCIe 问题 b : 字节 w:word L: 4byte

OpenCV 笔记(35):频域低通滤波——高斯低通滤波器、巴特沃斯低通滤波器

1. 高斯低通滤波器 高斯低通滤波器(GLPF)是一种具有平滑频域特性、较慢衰减速度和良好截止频率附近衰减效果的滤波器。在图像处理中有着广泛的应用。 高斯低通滤波器的传播函数有如下的形式: 其中,D(u,v) 表示中心点到频域中心的…

如何监控 PostgreSQL 中表空间的使用情况并进行合理的管理?

文章目录 如何监控 PostgreSQL 中表空间的使用情况并进行合理的管理 一、引言 在 PostgreSQL 数据库中,表空间(Tablespace)是用于管理数据库对象存储位置的逻辑存储区域。有效地监控和管理表空间的使用情况对于确保数据库的性能、优化存储资…

(一)、python程序--模拟电脑鼠走迷宫

一、绪论 1、简介 电脑鼠走迷宫是一种比赛,制作实物电脑鼠小车在迷宫找目标点,用时最短者获胜。考验参赛选手软硬件结合的能力。 2、走迷宫模拟软件中已实现功能 1、点击迷宫墙壁可编辑迷宫,并且可保存和加载迷宫形状文件; 2、…

聚观早报 | 蚁天鉴2.0发布;理想汽车推送无图NOA

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 7月8日消息 蚁天鉴2.0发布 理想汽车推送无图NOA 特斯拉推送FSD v12.4.3 iQOO Neo9s Pro配色公布 百川智能AI健康…

#数据结构 链表

单向链表 1. 概念 单向链表 单向循环链表 双向链表 双向循环链表 解决:长度固定的问题,插入和删除麻烦的问题 1、逻辑结构: 线性结构 2、存储结构: 链式存储 链表就是将 结点 用链串起来的线性表,链就是 结点 中的…

Banana Pi BPI-M5 Pro 低调 SBC 采用 Rockchip RK3576 八核 Cortex-A72/A53 AIoT SoC

Banana Pi BPI-M5 Pro,也称为 Armsom Sige5,是一款面向 AIoT 市场的低调单板计算机 (SBC),由 Rockchip RK3576 八核 Cortex-A72/A53 SoC 驱动,提供Rockchip RK3588和RK3399 SoC 之间的中档产品。 该主板默认配备 16GB LPDDR4X 和…

力扣-双指针1

何为双指针 双指针指向同一数组,然后配合着进行搜索等活动。 滑动窗口的时候很好使用。 167.两数之和Ⅱ-输入有序数组 167. 两数之和 II - 输入有序数组 题目 给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从…

【力扣: 15题: 三数之和】

15题: 三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意: 答案中不可以包含重复的三元组。 …

AI集成工具平台一站式体验,零门槛使用国内外主流大模型

目录 0 写在前面1 AI艺术大师1.1 绘画制图1.2 智能作曲 2 AI科研助理2.1 学术搜索2.2 自动代码 3 AI智能对话3.1 聊天机器人3.2 模型竞技场 4 特别福利 0 写在前面 人工智能大模型浪潮滚滚,正推动着千行百业的数智化进程。随着技术演进,2024年被视为是大…

C++11中新特性介绍-之(二)

11.自动类型推导 (1) auto类型自动推导 auto自动推导变量的类型 auto并不代表某个实际的类型,只是一个类型声明的占位符 auto并不是万能的在任意场景下都能推导,使用auto声明的变量必须进行初始化,以让编译器推导出它的实际类型,…

深入探索 Python 中的数据维数:高维数据处理方法与应用

Python 数据维数 在数据科学和机器学习领域,理解数据的维度是至关重要的。Python作为一种强大而灵活的编程语言,提供了丰富的工具和库来处理各种维度的数据。本文将介绍Python中数据维数的概念,以及如何使用Python库来处理不同维度的数据。 什…

算法思想总结:优先级队列

一、最后一块石头的重量 . - 力扣(LeetCode) 我们每次都要快速找到前两个最大的石头进行抵消,这个时候用优先级队列(建大堆),不断取堆顶元素是最好的!每次删除堆顶元素后,可以自动调整&#xf…

爬虫怎么实现抓取的

1.4爬虫工程师常用的库通过图1-3我们了解到,爬虫程序的完整链条包括整理需求、分析目标、发出网络请求、文本解析、数据入库和数据出库。其中与代码紧密相关的有:发出网络请求、文本解析、数据入库和数据出库,接下来我们将学习不同阶段中爬虫…

SOAMANAGER 弹不出浏览器

SOAMANAGER 弹不出浏览器 一、打开SOAMANAGER的其他方法 使用事务码SICF打开SOAMANAGER,执行路径default_host/sap/bc/webdynpro/sap/appl_soap_management 使用SE24对类CL_GUI_HTML_VIEWER中的方法DETACH_URL_IN_BROWSER 打断点 在前台创建一个URL的链接。

数组算法(二):交替子数组计数

1. 官方描述 给你一个二进制数组nums 。如果一个子数组中 不存在 两个 相邻 元素的值 相同 的情况,我们称这样的子数组为 交替子数组 。 返回数组 nums 中交替子数组的数量。 示例 1: 输入: nums [0,1,1,1] 输出: 5 解释&#…

Spring IOC基于XML和注解管理Bean

IoC 是 Inversion of Control 的简写,译为“ 控制反转 ”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出 松耦合、更优良的程序。 Spring 通过 IoC 容器来管理所有 Java 对象…

【Unity】在Unity中制作一个小车游戏

目录 第一步:设置Unity项目 第二步:设置场景 第三步:添加车辆控制脚本 第四步:将脚本附加到车辆上 第五步:运行和测试 第六步:添加更多功能(可选) 在Unity中制作一个小车游戏…

webGL可用的14种3D文件格式,但要具体问题具体分析。

hello,我威斯数据,你在网上看到的各种炫酷的3d交互效果,背后都必须有三维文件支撑,就好比你网页的时候,得有设计稿源文件一样。WebGL是一种基于OpenGL ES 2.0标准的3D图形库,可以在网页上实现硬件加速的3D图…

MySQL之备份与恢复和MySQL用户工具(一)

备份与恢复 备份脚本化 为备份写一些脚本是标准做法。展示一个示例程序,其中必定有很多辅助内容,这只会增加篇幅,在这里我们更愿意列举一些典型的备份脚本功能,展示一些Perl脚本的代码片段。你可以把这些当作可重用的代码块&…