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的誤區 講得挺好的:
bind <ip>
是綁定本機的IP地址,(准確的是:本機的網卡對應的IP地址,每一個網卡都有一個IP地址)- 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
注意,文件名為 Dockerfile:D 要大寫,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" ]
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鏡像並用此鏡像運行了一個進程。