以 Redis 为例,先安装好 Docker 环境并编译安装 Redis;使用 ldd 命令查看 Redis 服务依赖的库,把依赖的库收集起来。

1
2
3
mkdir /opt/redis
whereis redis-server
ldd /usr/local/bin/redis-server

根据依赖的库所在目录,创建相应的目录:lib64,然后把相应的库文件拷贝该目录中;找到 redis-server 所在目录,在新建的 lib64 的同级目录下,创建出 Redis-Server 启动命令的目录。
1
2
3
cd /opt/redis
mkdir -p usr/local/bin/
cp /usr/local/bin/redis-server usr/local/bin/

打包
1
tar -zcvf rootfs.tar.gz usr/* lib64/*

找到 redis 配置文件,放到 lib64 同级目录下,配置文件名称:redis.conf ,本地 redis 如果时源码编译安装的可以在源码包中找到配置文件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@localhost redis]# tree
.
├── Dockerfile
├── lib64
│ ├── ld-linux-x86-64.so.2
│ ├── libc.so.6
│ ├── libdl.so.2
│ ├── libm.so.6
│ ├── libpthread.so.0
│ └── librt.so.1
├── redis.conf
├── rootfs.tar.gz
└── usr
└── local
└── bin
└── redis-server

4 directories, 10 files

Dockerfile
1
2
3
4
5
FROM scratch
ADD rootfs.tar.gz /
COPY redis.conf /etc/redis/redis.conf
EXPOSE 6379
CMD ["redis-server"]

开始构建镜像
1
docker build -t redis:v1 -f Dockerfile .