docker|redis的面试题——七道
目录
1、redis的作用和使用场景
redis的作用:
redis的使用场景:
2、redis支持的数据类型有哪些?
3、redis针对key常见的通用命令有哪些?
4、描述docker搭建nginx的基本步骤
5、描述docker搭建mysql的基本步骤
6、描述docker搭建redis的基本步骤
7、docker针对容器、镜像常见的各种命令有哪些? 比如创建容器、查看日志、进入容器内部、删除容器、停止容器、查看容器等 比如拉取镜像,删除镜像等
一、容器管理命令
1. 容器生命周期
2. 容器状态查看
3. 容器交互
二、镜像管理命令
1. 镜像操作
2. 镜像导出与导入
三、容器和镜像命令对比速查表
1、redis的作用和使用场景
redis 属于NOSQL的一种
-
Redis:Remote Dictionary Server(远程字典服务器)
-
是完全开源免费的,用C语言编写的,遵守BSD协议,key-value数据库,内存数据库,NoSql数据库,缓存数据库。
-
是一个高性能的(key/value)分布式内存数据库,基于内存运行,(高性能:官方提供测试数据,50个并发执行100000 个请求,读的速度是110000次/s,写的速度是81000次/s)。
-
实际工作中用redis进行缓存数据实现
-
并支持持久化NoSQL数据到磁盘,是当前最热门的NoSql数据库之一,一般用来处理并发高的数据操作。
redis的作用:
-
内存存储和持久化:redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务
-
模拟类似于HttpSession这种需要设定过期时间的功能
-
发布、订阅消息系统
-
定时器、计数器
-
分布式锁(分布式系统调节)
redis的使用场景:
-
在内存空间中存储数据(存取效率极高)
-
适合小批量数据的存储(运行内存)
-
适合频繁访问的,不经常更新的数据存储
2、redis支持的数据类型有哪些?
-
Redis现在支持十种数据类型:string(字符串),hash(哈希),list(列表),set(集合),zset(有序集合),stream(流),geospatial(地理),bitmap(位图),bitfield(位域),hyperloglog(基数统计)
-
Redis常用五种数据类型:string(字符串),hash(哈希),list(列表),set(集合),zset(有序集合)(掌握)
3、redis针对key常见的通用命令有哪些?
-
keys * 把当前库中的所有的key 列出来
-
set k1 v1 保存key-value形式的数据,如果k1已经存在 新值覆盖旧值
-
del k1 删除键值是 k1的
-
EXISTS k1 判断键值为k1是否存在, 存在返回1, 不存在返回0
-
ttl k1 返回k1的过期时间, -1代表永久有效, -2代表已经过期了 ,如果过期,那么就自动清除
-
expire k2 20 给已经存在的k2设定有效期是20秒,单位秒
-
MOVE k1 1 把k1移到第2个数据库中
-
PERSIST k1 把已经存在设置了过期时间的k1设置为永久有效
4、描述docker搭建nginx的基本步骤
基本步骤
步骤 | 操作 |
---|---|
1. 拉取镜像 | docker pull nginx:版本号 |
2. 创建目录 | mkdir -p ~/nginx/{conf,html,logs} |
3. 挂载运行 | docker run -d -p 80:80 -v 挂载目录 --name my-nginx nginx:版本号 |
4. 测试访问 | curl http://localhost或 或在浏览器访问 http://服务器IP |
5. 管理容器 | docker stop/start/rm my-nginx |
解释说明:
2、创建目录
-
conf/
:存放自定义 Nginx 配置文件(如nginx.conf
) -
html/
:存放网站静态文件(如index.html
) -
logs/
:存放 Nginx 日志文件
3、挂载运行
-
-p 80:80
:将主机的 80 端口映射到容器的 80 端口。主机端口可能会被占用可以换主机端口。 -
-v ~/nginx/html:/usr/share/nginx/html
挂载网站文件目录。 -
-v ~/nginx/conf:/etc/nginx
挂载自定义 Nginx 配置。 -
-v ~/nginx/logs:/var/log/nginx
挂载日志目录。
5、管理容器
-
docker stop my-nginx # 停止容器
-
docker start my-nginx # 启动容器
-
docker restart my-nginx # 重启容器
-
docker rm -f my-nginx # 删除容器
5、描述docker搭建mysql的基本步骤
此处以mysql8为例。mysql版本与本地mysql的版本号一致。
基本步骤:
步骤 | 关键操作 |
---|---|
1. 拉取镜像 | docker pull mysql:8.0/5.0 |
2. 创建目录 | mkdir -p ~/mysql/{data,conf,logs} |
3. 运行容器 | docker run -id -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456qwe --name mysql8 mysql:8.0 |
4. 挂载数据 | -v ~/mysql/data:/var/lib/mysql |
5. 连接测试 | docker exec -it mysql8 mysql -uroot -p |
解释说明:
3、运行容器
-
-e MYSQL_ROOT_PASSWORD
:必填,设置 root 用户密码。 -
-p 3306:3306
:将主机的 3306 端口映射到容器的 3306 端口。 -
--restart=unless-stopped
:容器意外退出时自动重启。
4、挂载数据
-
-v ~/mysql/data:/var/lib/mysql \ # 挂载数据目录
-
-v ~/mysql/conf:/etc/mysql/conf.d \ # 挂载配置
-
-v ~/mysql/logs:/var/log/mysql \ # 挂载日志
5、连接测试
-
docker ps # 查看容器状态
-
docker logs mysql8 # 检查日志
-
docker run
:创建并启动新容器。 -
docker exec
:对已存在的容器执行操作。 -
-it
-
-i
(--interactive
):保持标准输入(STDIN)打开,允许交互。 -
-t
(--tty
):分配一个伪终端(TTY),使命令行界面可交互。 -
组合效果:让你可以像在本地终端一样与容器内的 MySQL 客户端交互。
6、常用管理命令
操作 | 命令 |
---|---|
停止容器 | docker stop mysql8 |
启动容器 | docker start mysql8 |
重启容器 | docker restart mysql8 |
删除容器 | docker rm -f mysql8 |
进入容器 | docker exec -it mysql8 bash |
7、为什么要挂载数据?
挂载数据(Volume Mounting)是 Docker 中持久化存储的核心机制,对 MySQL 这类数据库尤为重要。
1) 避免数据丢失(核心原因)
-
Docker 容器的默认存储是临时的:
如果容器被删除(如docker rm
),容器内所有数据(包括 MySQL 的数据文件)会永久丢失。docker rm -f mysql8 # 删除容器后,未挂载的数据全部消失
-
挂载后:数据存储在主机磁盘上,即使容器删除,数据依然保留在主机目录中(如
~/mysql/data
)。
2)方便备份与迁移
-
直接操作主机文件:
挂载后,MySQL 的数据文件(如ibdata1
、*.ibd
)存储在主机目录中,可直接通过cp
、rsync
或压缩打包备份。tar -czvf mysql_backup.tar.gz ~/mysql/data # 备份数据目录
-
跨容器共享数据:
新容器只需挂载同一目录即可恢复数据,适合迁移或升级 MySQL 版本。
3)提升性能
-
绕过容器存储驱动:
Docker 的默认存储驱动(如overlay2
)会引入额外性能开销,直接挂载主机目录可减少这一层损耗,尤其对 I/O 密集型的数据库操作有利。
4)灵活配置与管理
-
修改配置无需重建容器:
挂载 MySQL 配置文件(如my.cnf
)后,可直接在主机上编辑配置,重启容器即可生效。vim ~/mysql/conf/my.cnf # 修改配置 docker restart mysql8 # 重启生效
-
查看日志更便捷:
挂载日志目录后,可直接在主机上用tail
、cat
等工具分析日志。
6、描述docker搭建redis的基本步骤
基本步骤:
步骤 | 命令/操作 |
---|---|
1. 拉取镜像 | docker pull redis:7.0(最新版) |
2. 创建目录(持久化存储) | mkdir -p ~/redis/{data,conf} |
3. 配置持久化 | 修改 redis.conf 中的 save 或 appendonly |
4. 创建并运行容器(容器取名叫my-redis ) | docker run -id \ |
5. 验证 | docker exec -it my-redis redis-cli ping |
进入到redis中,了解redis配置信息
设置共享目录和配置文件后启动容器
[root@hcss-ecs-b839 data]# ls /opt/redis/
redis.conf
[root@hcss-ecs-b839 data]# cat /opt/redis/redis.conf
requirepass 123456
[root@hcss-ecs-b839 data]# pwd
/usr/local/docker/data
[root@hcss-ecs-b839 data]# ls
docker run -id -p 6379:6379 --name redis7.2 -v /opt/redis/redis.conf:/usr/local/bin/redis.conf -v /usr/local/docker/data:/data redis:7.0.2 redis-server /usr/local/bin/redis.conf
修改配置文件在redis.conf里面加上masterauth 123456后,重启容器
配置项 | 用途 | 注意事项 |
---|---|---|
masterauth | 从节点认证主节点的密码 | 必须与主节点 requirepass 一致 |
requirepass | 主节点设置访问密码 | 从节点和客户端均需使用此密码 |
docker restart redis7.2
客户端远程连接
cmd窗口中,切到redis-cli所在目录
redis-cli -h ip -p 端口号
keys * 提醒你,需要认证
auth 123456 输入密码认证
解释说明:
2、创建目录
-
data/
:存放 Redis 持久化数据(RDB/AOF 文件) -
conf/
:存放自定义配置文件(如redis.conf
)
3、配置持久化
- # 启用持久化(二选一)
- save 60 1000 # 60秒内至少1000次修改则触发RDB
- appendonly yes # 启用AOF持久化
- # 安全设置
- requirepass yourpassword # 设置访问密码
- bind 0.0.0.0 # 允许远程连接
4、运行容器
命令的解释
1. docker run -d
-
docker run
:创建并启动新容器。 -
-d
(--detach
):后台运行容器(不阻塞终端)。
2. -p 6379:6379
-
端口映射,格式为
-p <主机端口>:<容器端口>
。 -
将主机的 6379 端口映射到容器的 6379 端口,允许通过主机访问 Redis。
3. 数据卷挂载(-v
)实现宿主机和容器数据共享
冒号前是宿主机文件目录,冒号后是redis容器的文件目录
挂载参数 | 作用 |
---|---|
-v ~/redis/data:/data | 将主机的 ~/redis/data 挂载到容器的 /data ,用于持久化 Redis 数据(RDB/AOF 文件)。 |
-v ~/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf | 将主机的自定义配置文件挂载到容器内,覆盖默认配置。 |
4. redis:latest
-
指定使用的镜像(此处为最新版 Redis)。
5. redis-server /usr/local/etc/redis/redis.conf
-
容器启动后执行的命令:加载挂载的自定义配置文件启动 Redis 服务。
7、docker针对容器、镜像常见的各种命令有哪些? 比如创建容器、查看日志、进入容器内部、删除容器、停止容器、查看容器等 比如拉取镜像,删除镜像等
一、容器管理命令
1. 容器生命周期
命令 | 作用 | 示例 |
---|---|---|
创建并启动容器 | 从镜像创建新容器 | docker run -d --name my-nginx nginx:latest |
启动已停止的容器 | 启动已有的容器 | docker start my-nginx |
停止容器 | 优雅停止运行中的容器 | docker stop my-nginx |
强制停止容器 | 立即终止容器进程 | docker kill my-nginx |
重启容器 | 重启容器 | docker restart my-nginx |
删除容器 | 删除已停止的容器 | docker rm my-nginx |
强制删除容器 | 删除运行中的容器 | docker rm -f my-nginx |
2. 容器状态查看
命令 | 作用 | 示例 |
---|---|---|
查看运行中的容器 | 列出活跃容器 | docker ps |
查看所有容器 | 包括已停止的容器 | docker ps -a |
查看容器详情 | 显示容器配置信息 | docker inspect my-nginx |
查看容器日志 | 输出容器日志 | docker logs my-nginx |
实时查看日志 | 跟踪日志输出 | docker logs -f my-nginx |
查看资源占用 | 显示CPU/内存等 | docker stats my-nginx |
3. 容器交互
命令 | 作用 | 示例 |
---|---|---|
进入容器终端 | 交互式访问容器 | docker exec -it my-nginx /bin/bash |
在容器内执行命令 | 不进入容器直接执行命令 | docker exec my-nginx ls /app |
二、镜像管理命令
1. 镜像操作
命令 | 作用 | 示例 |
---|---|---|
拉取镜像 | 从仓库下载镜像 | docker pull nginx:latest |
删除镜像 | 删除本地镜像 | docker rmi nginx:latest |
强制删除镜像 | 删除被容器使用的镜像 | docker rmi -f nginx:latest |
查看镜像列表 | 查看本地镜像 | docker images |
查看镜像详情 | 显示镜像元数据 | docker inspect nginx:latest |
构建镜像 | 通过Dockerfile构建 | docker build -t my-app:1.0 . |
2. 镜像导出与导入
命令 | 作用 | 示例 |
---|---|---|
导出镜像为文件 | 保存镜像到tar包 | docker save -o nginx.tar nginx:latest |
从文件导入镜像 | 加载tar包为镜像 | docker load -i nginx.tar |
三、容器和镜像命令对比速查表
场景 | 容器命令 | 镜像命令 |
---|---|---|
查看列表 | docker ps | docker images |
删除资源 | docker rm | docker rmi |
查看详细信息 | docker inspect | docker inspect |
运行/停止 | docker start/stop | 无 |
8、创建并运行容器的命令解释docker run -id --name my-nginx nginx:latest
常见组合选项
选项 | 全称 | 用途 | 常用场景 |
---|---|---|---|
-i | --interactive | 保持 STDIN 打开 | 交互式程序(如 /bin/bash ) |
-d | --detach | 后台运行容器 | 服务类容器(Nginx/MySQL) |
-t | --tty | 分配伪终端 | 需交互式 Shell 时 |
-it | -i + -t | 交互式终端(常用组合) | 调试容器(如 docker exec -it ) |
-
-id
是-i
(交互)和-d
(后台)的合并写法。 -
对于 Nginx 这类服务:只需
-d
,-i
是多余的。 -
对于需要交互的容器(如调试):用
-it
(如docker exec -it
)。