参考
Docker镜像
获取镜像
查询:
docker search redis
root@racknerd-720736:~# docker search redis
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
redis Redis is an open source key-value store that… 12043 [OK]
redislabs/redisearch Redis With the RedisSearch module pre-loaded… 56
redislabs/redisinsight RedisInsight - The GUI for Redis 87
redislabs/rebloom A probablistic datatypes module for Redis 22 [OK]
redislabs/redis Clustered in-memory database engine compatib… 36
redislabs/rejson RedisJSON - Enhanced JSON data type processi… 53
redis/redis-stack-server redis-stack-server installs a Redis server w… 36
redis/redis-stack redis-stack installs a Redis server with add… 47
redislabs/redisgraph A graph database module for Redis 26 [OK]
redislabs/redismod An automated build of redismod - latest Redi… 35 [OK]
redislabs/redistimeseries A time series database module for Redis 12
redislabs/operator 7
redislabs/operator-internal This repository contains pre-released versio… 1
redislabs/redis-py 5
redislabs/redis-webcli A tiny Flask app to provide access to Redis … 3 [OK]
redislabs/redisgears An automated build of RedisGears 4
redislabs/memtier_benchmark Docker image to run memtier_benchmark 0
redislabs/k8s-controller-internal 0
redislabs/ng-redis-raft Redis with redis raft module 0
redislabs/k8s-controller 2
redislabs/redisai 4
redislabs/olmtest Test artefact for OLM CSV 0
bitnami/redis Bitnami Redis Docker Image 252 [OK]
redislabs/olm-bundle 0
redislabs/redisml A Redis module that implements several machi… 3 [OK]
拉取:
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
比如:
docker pull redis
root@racknerd-720736:~# docker pull redis
Using default tag: latest
latest: Pulling from library/redis
26c5c85e47da: Pull complete
39f79586dcf2: Pull complete
79c71d0520e5: Pull complete
60e988668ca1: Pull complete
873c3fc9fdc6: Pull complete
50ce7f9bf183: Pull complete
Digest: sha256:f50031a49f41e493087fb95f96fdb3523bb25dcf6a3f0b07c588ad3cdbe1d0aa
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest
启动
docker run -it -p 6379:6379 redis
root@racknerd-720736:~# docker run -it -p 6379:6379 redis
1:C 29 Apr 2023 08:04:12.413 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 29 Apr 2023 08:04:12.413 # Redis version=7.0.11, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 29 Apr 2023 08:04:12.413 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
1:M 29 Apr 2023 08:04:12.415 * monotonic clock: POSIX clock_gettime
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 7.0.11 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 1
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | https://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
1:M 29 Apr 2023 08:04:12.419 # Server initialized
1:M 29 Apr 2023 08:04:12.420 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
1:M 29 Apr 2023 08:04:12.421 * Ready to accept connections
需要改两个地方
- 改成后台运行 - 发现在配置中改的话无法启动,因此不做这个修改,这个可以放在启动参数中加一个
-d
即可 - bind 端口调整,让外网可访问
- protected-mode 模式改为关闭,否则外网无法访问
所以需要修改配置文件,但是该镜像中的启动默认是没有配置文件的,因此
- 搞一个配置文件放到 docker 容器中
- 启动时候指定配置文件
新容器软件包可能不好用,可以先更新仓库随后安装 vim (一般不会这样搞)
apt-get update
apt-get install vim
下载官方配置文件: 官方redis安装包
修改上面两处之后的文件:修改后配置
修改后的配置文件放在:/root/dockers/redis-data/redis.conf
再次启动
docker run -p 6379:6379 -d -v /root/dockers/redis-data/redis.conf:/etc/redis.conf redis redis-server /etc/redis.conf
9cf8d046b821cef15f2c577f90c502371a483ea68d17f8480083907d26dc352a
可以通过命令查看:
docker ps
本地镜像
列出镜像:
docker image ls
删除镜像:
docker image rm im1 im2
tips: 可同时删除多个
Dockerfile
Dockerfile 是一个文本文件,其内包含了一条条的 指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建
以 redis
为例,开始构建
找一个测试目录,新建一个名叫 Dockerfile 的文件
mkdir myredis
cd myredis/
touch Dockerfile
内容如下:
FROM redis
RUN apt-get update \
&& apt-get install -y vim
FROM :基于哪个镜像做的修改,必填
RUN:执行后面跟的命令,一次相关操作放到同一个 RUN 命令下面
如:上面 apt-get update 和 apt-get install -y vim 中间通过 &&
连接统一放到 RUN 后面,避免写两个 RUN
区分:完成一个功能的相关命令都放在一个 RUN 中完成
Tips:在撰写 Dockerfile 的时候,要经常提醒自己,这并不是在写 Shell 脚本,而是在定义每一层该如何构建。在撰写 Dockerfile 的时候,要经常提醒自己,这并不是在写 Shell 脚本,而是在定义每一层该如何构建。
构建
docker build -t redis:v2 .
root@racknerd-720736:~/dockers/myredis# docker build -t redis:v2 .
[+] Building 8.6s (6/6) FINISHED
=> [internal] load .dockerignore 0.1s
=> => transferring context: 2B 0.0s
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 100B 0.0s
=> [internal] load metadata for docker.io/library/redis:latest 0.0s
=> [1/2] FROM docker.io/library/redis 0.0s
=> [2/2] RUN apt-get update && apt-get install -y vim 7.8s
=> exporting to image 0.7s
=> => exporting layers 0.7s
=> => writing image sha256:06d3856d2108f328140b40ddf039c67bf1c3b8e9f7968496d6d5e667f3deb056 0.0s
=> => naming to docker.io/library/redis:v2
构建完成之后再去查看本地镜像结果:
Docker Compose
Compose
定位是 「定义和运行多个 Docker 容器的应用(Defining and running multi-container Docker applications)」,其前身是开源项目 Fig
定义 docker-compose.yml
version: '3'
services:
redis:
image: "redis:v2"
运行:
docker-compose up
[+] Running 2/2
✔ Network myredis_default Created 0.1s
✔ Container myredis-redis-1 Created 0.1s
Attaching to myredis-redis-1
myredis-redis-1 | 1:C 29 Apr 2023 14:18:41.298 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
myredis-redis-1 | 1:C 29 Apr 2023 14:18:41.298 # Redis version=7.0.11, bits=64, commit=00000000, modified=0, pid=1, just started
myredis-redis-1 | 1:C 29 Apr 2023 14:18:41.298 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
myredis-redis-1 | 1:M 29 Apr 2023 14:18:41.300 * monotonic clock: POSIX clock_gettime
myredis-redis-1 | 1:M 29 Apr 2023 14:18:41.301 * Running mode=standalone, port=6379.
myredis-redis-1 | 1:M 29 Apr 2023 14:18:41.301 # Server initialized
myredis-redis-1 | 1:M 29 Apr 2023 14:18:41.301 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
myredis-redis-1 | 1:M 29 Apr 2023 14:18:41.302 * Ready to accept connections
但是这样的话,之前配置的就没有效果了,因此,需要优化一下上面 docker-compose.yml
的配置
version: '3'
services:
redis:
image: "redis:v2"
container_name: "my_redis"
ports:
- "6379:6379"
volumes:
- /root/dockers/redis-data/redis.conf:/etc/redis.conf
restart: always
启动时候同样加上 -d,以保证后台启动
docker-compose up -d
root@racknerd-720736:~/dockers/myredis# docker-compose up -d
[+] Running 1/1
✔ Container my_redis Started
再看 docker ps
已经运行了
关闭
docker-compose down
查看日志
docker-compose logse <service名称>
其中 service名称指的是 docker-compose.yml 中的 services 下的节点名称,如上面的就是:redis
docker-compose logse redis
这样会打印所有的,一般用这个:
docker-compose logs redis -f -t --tail=30
等同于:
tail -30f xxx.log
其中 -t 指的是显示时间戳,如果日志本身已经打印了(比如Java应用),可以不加 -t
结语
不全,只是一些基础中的基础命令
目前没打算写这个的详细功能使用
仅仅是因为要部署轻量 CI 工具:drone
需要用到这个,现在再去尝试 drone
Bye ~