部署准备
- ubuntu 或其他主流发行版本
- 部署docker
部署步骤
安装docker,报错的话,一般是发行版不支持(脚本没有你的发行版名字),可到官网查看使用其他方法(比如说rocky,可自己在脚本内加个 rocky 判断,或者把红帽系改成 rocky)
1
| sh <(curl -fsSL https://get.docker.com)
|
拉取镜像,这里我就用 alpine 了.
1
| docker pull alpine:latest
|
编写 dockerfile 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| mkdir /images/alpine/redis -p && cd /images/alpine/redis cat << EOF > dockerfile FROM alpine:latest
LABEL autor="lee"
ENV redis_version=redis-7.0.11 install_path=/usr/local/redis/
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/' /etc/apk/repositories \ && export DEBIAN_FRONTEND=noninteractive \ #配置不交互 && apk add --no-cache --virtual .build-redis coreutils wget dpkg-dev dpkg gcc tzdata\ linux-headers make musl-dev openssl-dev \ #创建一个build-redis的虚拟软件包,方便删除,其他的都是编译相关 && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone \ #修改时区 && wget https://download.redis.io/releases/${redis_version}.tar.gz \ && tar xf ${redis_version}.tar.gz && cd ${redis_version} \ && make -j $(nproc -all) && make install \ #拉满编译安装 && mkdir -p ${install_path}etc ${install_path}log ${install_path}run ${install_path}data \ # 不支持花括号创建 && addgroup -S redis && adduser -Gredis -S -D -s /sbin/nologin redis \ && cp /${redis_version}/redis.conf ${install_path}etc && chown redis.redis ${install_path} \ && sed -i -e 's/bind 127.0.0.1/bind 0.0.0.0/' \ -e '/# requirepass/a requirepass 123456' \ -e "s#pidfile \/var\/run\/redis_6379.pid#pidfile ${install_path}pid\/redis_6379.pid#" \ -e "s#logfile \"\"#logfile \"${install_path}log\/redis_6379.log\"#" \ -e "s#dir ./#dir ${install_path}data/#" \ ${install_path}etc/redis.conf && \ #修改部分配置文件,也可以-v挂到主机上 apk del --no-network .build-redis && rm -rf /redis* #删除之前安装的软件和下载解压的redis
CMD ["redis-server"," /usr/local/redis/etc/redis.conf"] #简单运行的命令
EXPOSE 6379 #容器默认暴漏端口 EOF
|
构建镜像
1
| docker build -t alpine:redis-v1.0 .
|
可以看到编译很吃cpu
编译成功
查看镜像大小
1 2 3 4
| docker images REPOSITORY TAG IMAGE ID CREATED SIZE alpine redis-v1.0 0c2bbc93bd59 8 minutes ago 28.9MB alpine latest c1aabb73d233 2 weeks ago 7.33MB
|
启动看看
1 2
| docker run -d -P --name redis --restart=always alpine:redis-v1.0
|
查看下映射端口
1 2 3
| docker port redis 6379/tcp -> 0.0.0.0:49162 6379/tcp -> :::49162
|
查看端口是否监听,可以看到我主机已经安装了redis了,49162端口也被监听
1 2 3 4 5 6 7 8 9 10 11
| netstat -ntpl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:39867 0.0.0.0:* LISTEN 31145/containerd tcp 0 0 0.0.0.0:49162 0.0.0.0:* LISTEN 54412/docker-proxy tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 30940/sshd: /usr/sb tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 28950/redis-server tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 30928/systemd-resol tcp 0 0 0.0.0.0:16379 0.0.0.0:* LISTEN 28950/redis-server tcp6 0 0 :::49162 :::* LISTEN 54418/docker-proxy tcp6 0 0 :::22 :::* LISTEN 30940/sshd: /usr/sb
|
访问测试
1
| redis-cli -a 123456 -h localhost -p 49162
|
如下图,简单构建完成(ps 忘了起别名…)
部署问题
- sh 和 bash 有所不同,可以apk add bash,然后再删除…
- alpine 的 busybox 命令都是精简版的,要注意。
- 本次构建没有做到高度定制化。
- 后来发现我创建用户好像是多余,还是用root执行,没有指定 redis 用户运行,如果要 service 运行需要安装 openrc。我就暂时不折腾了