当前位置: 首页 > news >正文

DockerFile制作镜像(Dockerfile Creates an Image)

DockerFile制作镜像

hub.docker.com 搜索到的 Redis官方镜像,提示我们可以创建自己的 DockerFile 来添加 redis.conf 文件:

于是,我准备进行首次 DockerFile 的制作尝试。

一、准备工作

1.1 下载 redis.conf

我的方案是从 GitHub 上下载 redis.conf。我选择了 5.0.14 版本,各位可以选择自己需要的版本。

1.2 修改配置

1.2.1 注释掉bind 127.0.0.1

# bind 127.0.0.1

关于 bind 127.0.0.1,Redis的bind的误区 讲得挺好的:

  1. bind <ip> 是绑定本机的IP地址,(准确的是:本机的网卡对应的IP地址,每一个网卡都有一个IP地址)

  2. 127.0.0.1 是一个回环地址(Local Loopback),也就是只有本地才能访问到这个回环地址,而其他的计算机也只能访问他们自己的回环地址。

如果配置 bind 127.0.0.1,那就只有本机可以访问,而其他计算机不能访问。因此,我们在 redis.conf 中注释掉这一行

1.2.2 修改daemonize no

daemonize no

daemonize 表示是否以守护进程运行,在构建 Docker 镜像中如果设置为 daemonize yes,会导致启动后立即自动关闭,用 docker ps 命令查询不到进程,
且用 docker logs 容器id/容器名称 查询日志时,也没有报错,而是以下内容:

1:C 17 Jan 2022 11:29:12.523 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 17 Jan 2022 11:29:12.524 # Redis version=5.0.14, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 17 Jan 2022 11:29:12.524 # Configuration loaded

1.2.3 增加密码验证

打开 requirepass 和 masterauth 的注释:

requirepass abc123
masterauth abc123

开启 requirepass 要求客户端在处理任何其他命令之前发出 AUTH ;
开启 masterauth ,如果主机受密码保护(开启了 requirepass 配置指令),则可以在启动复制同步过程之前通知复制副本进行身份验证,否则主机将拒绝复制副本请求。

二、构建Dockerfile

2.1 文件结构

geekziyu-redis
├── Dockerfile
└── redis.conf

geekziyu-redis 是我 Windows 电脑的文件夹: D:\DockerContainer\geekziyu-redis

2.2 Dockerfile

注意,文件名为 DockerfileD 要大写,f 要小写,且不带文件后缀。

FROM redis:5.0.14
MAINTAINER geekziyu@163.com
COPY redis.conf /usr/local/etc/redis/redis.conf
EXPOSE 6379
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]

DockerFile Reference

2.3 build

docker build -t geekziyu/redis:latest .

注意末尾这个 . ,省略它会报错。

之后,用

docker images

检查镜像,发现多出 geekziyu/redis

2.4 run

运行镜像,启动进程:

docker run -it --name ziyuredis -p 6379:6379 -d geekziyu/redis:latest

如果不加上 -p 6379:6379 ,那么宿主机是访问不了的。

三、验证

打开 Bash :

docker exec -it ziyuredis /bin/bash

接着运行 redis-cli,并验证密码:

root@ae284054ebc8:/# redis-cli
127.0.0.1:6379> auth abc123

至此,我们就使用 Dockerfile 简单的构建了一个Redis镜像并用此镜像运行了一个进程。

相关文章:

  • 在Spring Boot中,可以通过实现一些特定的接口来拓展Starter
  • 心法利器[132] | 大模型系统性能优化trick
  • 5.2 位运算专题:LeetCode 268. 丢失的数字
  • Ubuntu 系统部署 Ollama + DeepSeek + Docker + Ragflow
  • 企业微信实现“关联外部选项“、“审批控件中的外部选项“
  • Four.meme是什么,一篇文章读懂
  • 信息的度量
  • 安宝特方案丨安宝特AR远程医疗方案如何重塑智慧医疗服务体系?
  • Jetson Orin NX使用 Ollama 本地部署 deepseek
  • 2025年上软考——【系统架构设计师】考前60天冲刺学习指南!!!
  • 内网渗透-端口映射
  • ngrep :网络嗅探的利器
  • 【RAG综述系列】之 RAG 相关背景和基本原理
  • 乐道突围特斯拉
  • 六十天前端强化训练之第三十天之深入解析Vue3电商项目:TechStore全栈实践(文结尾附有源代码)
  • VRRP协议介绍及一些常见问题
  • C语言实现的冰墩墩
  • 搭建简易的rtsp服务器
  • Android Studio编译问题
  • HO与OH差异之Navigation
  • 买新房可申领学位,广州南沙出台购房入学政策
  • 王毅出席金砖国家外长会晤
  • 王星昊再胜连笑,夺得中国围棋天元赛冠军
  • 国家发改委回应美加征关税:典型的单边主义霸凌做法
  • 视频丨伊朗阿巴斯港一处油罐发生高强度爆炸:造成大面积破坏,伤亡不明
  • 中宣部版权管理局:微短剧出海面临版权交易不畅、海外维权较难等难题