引言
前面介紹的都是使用官方鏡像文件部署應用,現在我們來定製自己的鏡像,本文選的是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包,導致博主一直以爲是路徑出了問題,反覆排查。