引言
前面介绍的都是使用官方镜像文件部署应用,现在我们来定制自己的镜像,本文选的是Zookeeper为例,介绍怎么写 Dockerfile 文件。
1、Dockerfile介绍
Dockerfile文件就是一个工艺流程,里面包含一道道的工序(如果是机械专业的肯定懂我在说什么)。
通俗的讲:你要制造一辆汽车,首先需要准备四个轮子、一个车头、一个车身,然后将三部分组装成汽车,加满油,奔跑吧,我的车!Dockerfile就是上面组装的过程。
2、实例
下面会涵盖一些常用的命令,更多的请参考Docker教程
- 新建zoo.cfg配置文件
[root@localhost zookeeper]# pwd
/home/zookeeper
[root@localhost zookeeper]# ll
total 4
-rw-r--r--. 1 root root 140 Jun 2 12:35 zoo.cfg
- 配置文件内容:
tickTime=2000
initLimit=10
syncLimit=5
#指定目录
dataDir=/data/zookeeper
#指定端口
clientPort=2181
autopurge.snapRetainCount=10
autopurge.purgeInterval=1
- 解压jdk到指定文件夹并指定包名:jdk(jar包链接地址 提取码:3b6s)
[root@localhost jdk]# pwd
/home/zookeeper/jdk
[root@localhost jdk]# ll
total 25996
drwxr-xr-x. 2 root root 4096 Jun 2 13:51 bin
-r--r--r--. 1 root root 3244 Jun 2 13:51 COPYRIGHT
drwxr-xr-x. 3 root root 4096 Jun 2 13:51 include
-rw-r--r--. 1 root root 5213825 Jun 2 13:51 javafx-src.zip
drwxr-xr-x. 5 root root 4096 Jun 2 13:51 jre
drwxr-xr-x. 5 root root 4096 Jun 2 13:51 lib
-r--r--r--. 1 root root 44 Jun 2 13:51 LICENSE
drwxr-xr-x. 4 root root 44 Jun 2 13:51 man
-r--r--r--. 1 root root 159 Jun 2 13:51 README.html
-rw-r--r--. 1 root root 424 Jun 2 13:51 release
-rw-r--r--. 1 root root 21104792 Jun 2 13:51 src.zip
-rw-r--r--. 1 root root 112748 Jun 2 13:51 THIRDPARTYLICENSEREADME-JAVAFX.txt
-r--r--r--. 1 root root 149725 Jun 2 13:51 THIRDPARTYLICENSEREADME.txt
- 解压zookeeper到指定文件夹并命名为:zk
[root@localhost zk]# pwd
/home/zookeeper/zk
- 编写启动配置文件zookeeper.sh
[root@localhost zookeeper]# ll
total 193768
-rw-r--r--. 1 root root 140 Jun 2 12:35 zoo.cfg
drwxr-xr-x. 7 root root 4096 Jun 2 13:52 jdk
drwxr-xr-x. 14 root root 4096 Jun 2 13:52 zk
-rw-r--r--. 1 root root 183 Jun 2 13:12 zookeeper.sh
zookeeper.sh文件内容:
#!/bin/sh
export ZOOKEEPER_HOME=/zk
mkdir -p /data/zookeeper
${ZOOKEEPER_HOME}/bin/zkServer.sh start-foreground
- 将zoo.cfg移动到zk/conf/下,并将文件打包
[root@localhost zookeeper]# mv zoo.cfg zk/conf/
[root@localhost zookeeper]# tar -zcvf zookeeper_cool.tar.gz .
- 编写Dockerfile
[root@localhost zookeeper]# ll
total 193696
-rw-r--r--. 1 root root 425 Jun 2 14:05 Dockerfile
drwxr-xr-x. 7 root root 4096 Jun 2 13:52 jdk
drwxr-xr-x. 14 root root 4096 Jun 2 13:52 zk
-rw-r--r--. 1 root root 198326063 Jun 2 14:13 zookeeper_cool.tar.gz
-rw-r--r--. 1 root root 183 Jun 2 13:12 zookeeper.sh
配置文件内容:
# FROM命令 定义基础包
FROM centos:latest
# ADD命令 将打包文件上传到镜像的根目录/ ,会自动解压
ADD zookeeper_cool.tar.gz /
# WORKDIR命令 定义工作目录
WORKDIR /
# ENV命令 设置环境
ENV JAVA_HOME /jdk
ENV CLASSPATH .:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $JAVA_HOME/bin:$PATH
# RUN命令 执行制作镜像过程,一个RUN对应一层
RUN yum clean all \
&& rm -vf /etc/localtime \
&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime\
&& rm -rfv /usr/share/backgrounds/* \
&& rm -rfv /usr/share/doc/* \
&& rm -rfv /usr/share/man/* \
&& cd /usr/share/zoneinfo/ && ls |grep -v "Asia"|xargs rm -rfv \
&& rm -rfv /var/cache/yum/* \
&& rpm --rebuilddb \
&& chmod 755 /zookeeper.sh
ENTRYPOINT /zookeeper.sh
- 创建镜像(注意最后一个 . 不要忘记了)
[root@localhost zookeeper]# docker image build -t zookeeper_cool:v1.0 .
- 查看制作的镜像是否成功
3、启动自定义zookeeper
- 启动自定义镜像
[root@localhost zookeeper]# docker run --rm --name coolsummer -p 2181:2181 -d zookeeper_cool:v1.0
- 查看是否启动
结束语
制作镜像一定要理解本机环境和镜像环境,否则路径会分不清楚。
说一个自己踩的坑,zookeeper官网上面最新的包,解压后没有src和jar包,导致博主一直以为是路径出了问题,反复排查。