什么是Dockerfile?
之前,我们使用docker安装过tomcat服务,也部署过javaweb项目。但是,整个过程是比较繁琐的,那么怎样简化这个过程?答案是使用Dockerfile。
Dockerfile是自动构建docker镜像的配置文件,Dockerfile中的命令非常类似linux shell下的命令。Dockerfile可以让用户自定义构建docker镜像,支持以 # 开头的注释行。
一般,Dockerfile分为4部分:
- 基础镜像(父镜像)信息
- 维护者信息
- 镜像操作命令
- 容器启动命令
学习准备
以安装centos7的tomcat环境为例。
1、克隆学习资料git clone https://github.com/voidking/dockerfile.git
2、下载centos7镜像docker pull centos:7
3、进入dockerfile目录cd dockerfile/centos7
常规方法
启动容器
假设我们的所有安装程序都放在了宿主机的/download目录下,现在需要将其挂载到容器的/mnt/software目录下。service docker start
docker run -i -t -v /download/:/mnt/software/ centos:7 /bin/bash
安装jdk
1、进入容器环境。
2、可选操作,安装vim增强版。yum install vim-enhanced
3、解压jdk到/usr/lib/jvm目录。cd /mnt/software
mkdir -p /usr/lib/jvm
tar zxvf jdk-8u131-linux-x64.tar.gz -C /usr/lib/jvm/
4、配置JAVA_HOME和JRE_HOME,vi /etc/profile
,在最后添加:
1 | export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_131 |
然后使配置文件生效,source /etc/profile
。
5、测试jdk是否配置成功。java
,javac
安装tomcat
1、进入容器环境。
2、解压tomcat到/opt目录。cd /mnt/software
tar zxvf apache-tomcat-8.0.44.tar.gz -C /opt
3、启动tomcat。cd /opt/apache-tomcat-8.0.44/bin/
./startup.sh
4、测试访问。yum install curl
curl localhost:8080
编写启动脚本
1、进入根目录,新建run.sh文件。cd /
vi run.sh
2、编辑run.sh内容为:
1 |
|
3、更改run.sh权限chmod 777 run.sh
保存容器
1、退出容器exit
2、查看dockeriddocker ps -l
3、保存容器为centos/tomcat。docker commit 206f centos/tomcat
测试使用
1、启动镜像docker run -d -p 18080:8080 centos/tomcat /run.sh
2、测试访问curl localhost:18080
使用Dockerfile
1、下载dockerfile项目
在宿主机中,git clone https://github.com/voidking/dockerfile.git
。
2、进入tomcat文件夹cd dockerfile/tomcat
3、拷贝/download目录到tomcat目录cp -r /download download
4、查看Dockerfileless Dockerfile
5、使用当前目录下的Dockerfile,构建一个名为centos/tomcat8.0的镜像docker build -t centos/tomcat8.0 .
docker镜像的命名规则 registry_url/namespace/image_name:tag
默认tag是latest。
Dockerfile详解
Dockerfile内容为:
1 | # |
FROM centos:7
,基于父镜像centos:7构建其他docker镜像。
MAINTAINER VoidKing <voidking@qq.com>
,Dockerfile维护者为VoidKing。
ENV TZ "Asia/Shanghai"
,ENV(environment)设置环境变量,设置docker容器的时区为Shanghai。
ADD download/jdk-8u131-linux-x64.tar.gz /usr/lib/jvm/
,解压tar.gz文件到容器/usr/lib/jvm目录。
ADD run.sh /run.sh
,拷贝run.sh到容器根目录下。
ADD命令格式:ADD 源路径 目标路径
1、如果源路径是个文件,且目标路径是以 / 结尾,则docker会把目标路径当作一个目录,会把源文件拷贝到该目录下。如果目标路径不存在,则会自动创建目标路径。
2、如果源路径是个文件,且目标路径不是以 / 结尾,则docker会把目标路径当作一个文件。如果目标路径不存在,会以目标路径为名创建一个文件,内容同源文件;如果目标文件是个存在的文件,会用源文件覆盖它,当然只是内容覆盖,文件名还是目标文件名。
3、如果源路径是个目录,且目标路径不存在,则docker会自动以目标路径创建一个目录,把源路径目录下的文件拷贝进来。如果目标路径是个已经存在的目录,则docker会把源路径目录下的文件拷贝到该目录下。
4、如果源文件是个压缩文件(gzip、bzip2、gz等),则docker会自动帮解压。
COPY指令和ADD指令功能和使用方式类似,只是COPY指令不会做自动解压工作。
EXPOSE 8080
,暴露8080端口。
ENTRYPOINT ["/run.sh"]
,每次启动docker容器,都会执行ENTRYPOINT。
测试使用
1、启动镜像docker run -d -p 28080:8080 centos/tomcat8.0 /run.sh
2、测试访问curl localhost:28080
源码分享
https://github.com/voidking/dockerfile.git