从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 新闻合订本
    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 新闻合订本
    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • 计算机简史

  • 数字电路

  • 计算机组成原理

  • 操作系统

  • Linux

    • Linux 命令学习

    • 文本处理三剑客

    • Linux安全

    • Docker

      • 尚硅谷Docker实战教程

        • 教程简介
        • Docker 简介
        • Docker 安装
        • Docker 配置国内镜像源
        • Docker 常用命令
        • 镜像的分层概念
        • 发布镜像
        • Docker 私有库
        • 容器数据卷
        • Docker 常用软件安装
          • 总体步骤
          • 安装 Tomcat
          • 安装 MySQL
          • 安装 Redis
        • MySQL 主从复制
        • 分布式存储之哈希取余算法
        • 3 主 3 从Redis集群搭建与扩缩容
        • Dockerfile
        • 虚悬镜像
        • Docker 微服务实战
        • Docker 网络
        • Docker-compose 容器编排
        • Portainer
        • Docker 重量级监控
        • Docker 系列完结
        • 记一次启动容器失败
  • 计算机网络

  • 数据库

  • 编程工具

  • 装机

  • 计算机基础
  • Linux
  • Docker
  • 尚硅谷Docker实战教程
2023-09-18
目录

Docker 常用软件安装

# 80.Docker 常用软件安装

演示下如何使用 Docker 来完成 Redis,Tomcat 和 MySQL 等常用软件的安装。介绍了这几个常见的软件安装之后,以后想要安装其他软件,也是依样画葫芦即可。

‍‍

# 总体步骤

一般来说,按照如下步骤来完成安装:

  • 搜索镜像
  • 拉取镜像
  • 查看镜像
  • 启动镜像(可能需要配置端口映射)
  • 容器的操作(例如启停) ‍

# 安装 Tomcat

(在命令行)搜索镜像,一般选官方的(OFFICAL 中是 OK 的):

$ docker search tomcat
NAME                          DESCRIPTION                         STARS  OFFICIAL   AUTOMATED
tomcat                        Apache Tomcat is an open source...  3578   [OK]   
tomee                         Apache TomEE is an all-Apache...    110    [OK]   
bitnami/tomcat                Bitnami Tomcat Docker Image         49     [OK]
.............
1
2
3
4
5
6

ps:也可以在 Docker Hub (opens new window) 或国内的镜像仓库上面查找,同时在网站上查找的话也会有丰富的说明文档

下载镜像到本地:

$ docker pull tomcat

$ docker images tomcat
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
tomcat       latest    fb5657adc892   20 months ago   680MB
1
2
3
4
5

启动 Tomcat:

docker run -d -p 8080:8080 --name t1 tomcat

docker ps
CONTAINER ID   IMAGE    COMMAND            CREATED         STATUS         PORT          NAMES
3f7e8349307d   tomcat   "catalina.sh run"  9 seconds ago   Up 8 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   t1
1
2
3
4
5

注意,最新版的 Tomcat 默认是没有配置首页的,因此访问后会是 404:

​​

这是出于安全的考虑,所以删掉了 webapp 目录下的内容:

$ docker exec -it 3f /bin/bash

$ pwd
/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 Sep  4 10:23 conf
drwxr-xr-x 2 root root  4096 Dec 22  2021 lib
drwxrwxrwx 1 root root    80 Sep  4 10:23 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


$ ls -l webapps
total 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

‍ 原本的 webapps 目录改为了 webapps.dist 目录。如果想要恢复首页的话,可以这样:

$ rmdir webapps
$ mv webapps.dist webapps
1
2

‍ 重启,访问 Tomcat(如果是云服务器,主要关闭防火墙):

​​

免修改版:有时候我们就想用默认的 Tomcat,没有修改首页的;并且也不需要用到 Tomcat10,Tomcat8 即可,此时就可以用 billygoo/tomcat8-jdk8​ ​镜像:

docker pull billygoo/tomcat8-jdk8
docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8
1
2

# 安装 MySQL

‍

# 搜索镜像

$ docker search mysql
NAME              DESCRIPTION                                      STARS     OFFICIAL   AUTOMATED
mysql             MySQL is a widely used, open-source relation…   14424     [OK]   
mariadb           MariaDB Server is a high performing open sou…   5507      [OK]  
................
1
2
3
4
5

‍

# 拉取 MySQL

注意:这里指定了 5.7 版本

$ docker pull mysql:5.7

$ docker images mysql 
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
mysql        5.7       c20987f18b13   20 months ago   448MB
1
2
3
4
5

‍

# 运行 MySQL

$ docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
1

-e:设置一些环境变量(environment)。

该命令可以看官方的文档说明 (opens new window):

# How to use this image

# Start a mysql​​​ server instance

Starting a MySQL instance is simple:

$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
1

... where some-mysql​ is the name you want to assign to your container, my-secret-pw​ is the password to be set for the MySQL root user and tag​ is the tag specifying the MySQL version you want. See the list above for relevant tags.

注意,如果服务器本身装了 MySQL 并且已经启动了,那么再次启动容器监听 3306 端口会报错的:

$ docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
1d76384435fba9c7196315d739991574c0b8dddf3de1ee0465ccd86ac3f30ac8
docker: Error response from daemon: driver failed programming external connectivity on endpoint stupefied_jemison (66e92403fc3a39187fa8ee86716ff5d5250f8c5cd567592fb789e991130f9d3d): Error starting userland proxy: listen tcp4 0.0.0.0:3306: bind: address already in use.
1
2
3

‍ 因此需要停止:

$ systemctl stop mysqld
1

‍

# 增删改查测试

接下来测试下操作 MySQL,新建数据库和表,插入和查询数据:

$ mysql -uroot -p

$ mysql> create database db01;
Query OK, 1 row affected (0.00 sec)

mysql> use db01

$ mysql> create table aa(id int, name varchar(20));
Query OK, 0 rows affected (0.03 sec)

$ mysql> insert into aa values(1,'z3');
Query OK, 1 row affected (0.02 sec)


mysql> select * from aa;
+------+------+
| id   | name |
+------+------+
|    1 | z3   |
+------+------+
1 row in set (0.00 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

使用 Navicat 等连接工具也能正常连接:

​​ ‍

# 字符集和容器数据卷

如果我们要 insert 的数据有中文,会报错:

insert into aa VALUES(2,'王五');

1366 - Incorrect string value: '\xE7\x8E\x8B\xE4\xBA\x94' for column 'name' at row 1
1
2
3

‍ 这是因为字符编码的问题(更多参考数据库与编码 (opens new window)),可以去容器内的 MySQL 执行 SQL 查看编码:

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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14

所以如果涉及到中文,需要修改编码。

如果删除了 MySQL 容器,那么里面的数据也是会丢失的;如果想保存,得用数据共享的方式来将数据存储到宿主机。我们可以使用这样的命令:

docker run -d -p 3306:3306 \
--privileged=true \
-v /zzyyuse/mysql/log:/var/log/mysql \
-v /zzyyuse/mysql/data:/var/lib/mysql \
-v /zzyyuse/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql \
mysql:5.7
1
2
3
4
5
6
7
8

新建 /zzyyuse/mysql/conf/my.cnf​,配置字符编码,通过容器卷同步给 MySQL 容器实例:

[client]
default_character_set=utf8
[mysqld]
collation_server=utf8_general_ci
character_set_server=utf8
1
2
3
4
5

‍ 由于改了配置,因此得重启 MySQL 并进入:

docker restart mysql
docker exec -it mysql bash
mysql -uroot -p123456
1
2
3

‍ 然后我们再测试字符编码(注意,得用 Navicat 等连接工具执行,因为在 Docker 输入不了中文):

create database db01;
use db01;
create table bb(id int, name varchar(20));dele
insert into bb values(1,'张三');
1
2
3
4

‍ 可以看到是成功的:

select * from bb;
+------+--------+
| id   | name   |
+------+--------+
|    1 | 张三   |
+------+--------+
1 row in set (0.00 sec)
1
2
3
4
5
6
7

‍ 除此之外,即使删除了容器,再次创建 MySQL,数据也是恢复的:

$ docker rm -f mysql

$ docker run -d -p 3306:3306 \
--privileged=true \
-v /zzyyuse/mysql/log:/var/log/mysql \
-v /zzyyuse/mysql/data:/var/lib/mysql \
-v /zzyyuse/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql \
mysql:5.7

$ docker exec -it mysql bash
$ mysql -uroot -p123456
$ use db01;
$ select * from bb;
+------+--------+
| id   | name   |
+------+--------+
|    1 | 张三   |
+------+--------+
1 row in set (0.00 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 安装 Redis

‍ Redis 的安装和运行也很简单:

$ docker pull redis:6.0.8

$ docker run -d -p 6379:6379 --privileged=true --name redis redis:6.0.8

$ docker exec -it redis bash

$  redis-cli

$ 127.0.0.1:6379> ping
PONG
1
2
3
4
5
6
7
8
9
10

‍ 但和 MySQL 类似,如果一旦删除了该容器,那么 Redis 的数据就会丢失。同理,也要用容器数据卷。

在宿主机上新建目录:/app/redis

新增配置文件:vim /app/redis/redis.conf​,内容如下:

requirepass 123
daemonize no
1
2

‍

注意:要允许 Redis 后台运行,也就得设置 daemonize no,否则 Redis 就会前台运行,和和 docker run 中-d 参数冲突,会导致容器一直启动失败

配置数据卷,运行 Redis:

$ docker run -p 6379:6379 \
--name myr3 \
--privileged=true \
-v /app/redis/redis.conf:/etc/redis/redis.conf \
-v /app/redis/data:/data \
-d redis:6.0.8 \
redis-server /etc/redis/redis.conf


$ docker ps 
CONTAINER ID   IMAGE         COMMAND                   CREATED          STATUS          PORTS                                                  NAMES
c1793c020cea   redis:6.0.8   "docker-entrypoint.s…"   7 seconds ago    Up 6 seconds    0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              myr3
1
2
3
4
5
6
7
8
9
10
11
12

在最后一行,我们运行的是 redis-server(而不是 bash),并指定了配置文件,也就是容器内的 Redis 会用 /etc/redis/redis.conf​ 作为配置文件 ‍ 然后连接 Redis,就会用我们自己的配置文件了(得要密码)

$ docker exec -it myr3 bash

$  redis-cli

$ 127.0.0.1:6379> ping
(error) NOAUTH Authentication required.

$ 127.0.0.1:6379> auth 123
OK
1
2
3
4
5
6
7
8
9

‍ 在见高级篇 Portainer,还会讲解关于 Nginx 的安装。

(完)

上次更新: 2025/6/3 17:50:46
容器数据卷
MySQL 主从复制

← 容器数据卷 MySQL 主从复制→

最近更新
01
新闻合订本 2025-10
10-31
02
2025 年 10 月记
10-30
03
用 AI 批量优化思源笔记排版
10-15
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式