Docker安装常见组件
主要演示Tomcat, Mysql, Redisx在Docker下的安装,其他组件基本和这些类似.
总体步骤:
- 搜索镜像
- 拉取镜像
- 查看镜像
- 启动镜像(服务端口映射)
- 停止容器
- 移除容器
前置条件
之前的学习中,我这把做了阿里云的加速器(也就是会从阿里云上下载)否则会很慢的. 具体操作可以参看我前面的帖子<<Docker基础>>, 当然你也可以从官网下载. 下面附上链接
Tomcat安装
查找镜像
# 一般选择official的,即官方的
docker search tomcat
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xHhtuju3-1653231673536)(E:\学习笔记\Docker安装常见组件.assets\1652597748231.png)]
拉取镜像
# 下载可能需要等一会
docker pull tomcat
查看镜像
docker images tomcat
启动镜像
# 取一种即可
docker run -it -p 8080:8080 tomcat # 交互式启动
docker run -d -p 8080:8080 tomcat # 后台启动
问题:
使用外网访问报错
容器内访问报404
原因:
新版Tomcat的目录结构发生了变化, webapps下是没有内容的
真正有内容的是下面的webapps.dist
方案:
删除webapps, 将webapps.dist重命名为webapps即可
尝试外网访问–成功!
停止容器:
由于我是-it的方式启动的, 我使用ctrl + c快捷键就会停止tomcat了;如果是使用-d的方式可以使用以下命令来停止
docker stop tomcat
删除容器:
docker rm -f 容器id
使用Tomcat8
docker pull billygoo/tomcat8-jdk8
docker run -d -p 8080:8080 --name=tomcat8 billygoo/tomcat8-jdk8
可以直接运行第二个名称,会自动的帮你下载,这个版本的tomcat就不需要修改webapps文件夹了
Mysql安装
简单版:
安装的过程基本和Tomcat差不多,就直接上命令了(本次以MySQL5.7为例)
# 1. 搜索镜像
docker search mysql
# 2. 拉取镜像
docker pull myslq:5.7
# 3. 查看镜像
docker images mysql:5.7
# 4. 启动镜像(服务端口映射)
docker run -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
# 进入容器内部,查看数据库能否访问
# 4.1 进入容器内部
docker exec -it 容器Id bash
# 4.2 登录MySQL
mysql -u root -p
# 4.3 查看MySQL默认表
show databases;
# 5. 停止容器
docker stop 容器Id
# 6. 移除容器
docker rm -f 容器id
下图为我通过图形化界面工具连接docker上的数据库创建的表,并在图形化工具里面插入了带中文的数据
实际数据是如下:
docker安装简单版Mysql会有中文数据乱码问题, 而且这里面还会存在一个最大的问题就是数据备份的问题, 万一容器停止了,那么数据也就没有了, 这时候我们就要想到前面学到的容器卷;
实战版:
# 以下为一条命令, 宿主机之间的日志,数据和配置文件同步.
docker run -d -p 3307:3306 --privileged=true -v /kiwi/mysql/log:/var/log/mysql -v /kiwi/mysql/data:/var/lib/mysql -v /kiwi/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name=mysql mysql:5.7
# 切换到主机/kiwi/mysql/conf目录下并创建my.cnf文件,并在文件中输入以下内容(用于解决中文乱码的问题)
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
启动(带容器卷的Mysql):
创建my.cof文件:
配置好配置文件后建议重启以下镜像:
docker restart mysql
建库间表插入中文数据:
进入容器内部执行以下命令:
# 进入容器命令:
docker exec -it mysql bash
删除mysql镜像:
重新启动mysql镜像:
docker run -d -p 3307:3306 --privileged=true -v /kiwi/mysql/log:/var/log/mysql -v /kiwi/mysql/data:/var/lib/mysql -v /kiwi/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name=mysql mysql:5.7
查看删除之前的数据是否还在:
这样实际上就实现了容器的数据备份工作;
Redis安装
简单版的就直接跳过了,没什么实际使用价值.
# 搜索镜像
docker search redis
# 拉取镜像
docker pull redis:6.0.8
宿主机上准备redis配置文件:
不同版本的redis配置文件下载地址
https://redis.io/docs/manual/config/
修改宿主机配置文件:
# 找到对应的配置项,依次修改
bind 0.0.0.0 #也可以将这一行直接注释掉 表示任意IP均可连接
protected-mode no #默认为 yes 表示关闭保护模式
daemonize no #默认为 yes 表示允许后台运行
requirepass yourpassword # 开启密码
运行redis镜像:
docker run -p 6479:6379 --name myredis --privileged=true -v /app/redis/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis:6.2.6 redis-server /etc/redis/redis.conf
剩下的就是连接redis,可参考我的另一篇redis安装帖子
Linux下redis6.2.6安装及RedisDesktopManager远程连接redis
注意:我在docker中使用的是6379端口, 宿主机上映射为6479. 我宿主机的6379端口为我宿主机redis端口;