
# 编写Dockerfile文件
镜像是容器的基础，容器基于镜像定义的内容来运行。镜像是多层存储，每一层是前一层基础上进行的修改。
定制镜像时，一般使用Dockerfile来完成。Dockerfile是一个文本文件，其内包含了一条条的指令，每一条指令构建镜像的其中一层，因此每一条指令的内容，就是描述该层应该如何构建。
本章节指导您如何编写dockerfile文件。
![](https://support.huaweicloud.com/bestpractice-cce/public_sys-resources/note_3.0-zh-cn.png)
Dockerfile文件编写与应用实际需求直接相关，每个应用所写的Dockerfile会有所区别，请根据业务实际需求来写Dockerfile文件。
如何写出可读性更好的Dockerfile，请参见[编写高效的Dockerfile](https://support.huaweicloud.com/bestpractice-swr/swr_bestpractice_0002.html)。
由于运营商网络原因，拉取Docker Hub镜像可能需要很长时间，甚至可能因超时而下载失败，建议参考[设置镜像加速器](https://support.huaweicloud.com/usermanual-swr/swr_01_0045.html)解决。
#### 操作步骤
1. 以root用户登录到安装有Docker的服务器上。
2. 编写Dockerfile文件。 
   **vi Dockerfile**
   Dockerfile内容如下：
   ```
   # 表示以centos7.1.1503为基础镜像
   FROM centos:7.1.1503   
   # 创建文件夹，存放数据和依赖文件，建议多个命令写成一条，可减少镜像大小
   RUN mkdir -p /usr/local/mongodb/data \   
    && mkdir -p /usr/local/mongodb/bin \ 
    && mkdir -p /root/apache-tomcat-7.0.82 \ 
    && mkdir -p /root/jdk1.8.0_151
   # 将apache-tomcat-7.0.82目录下的文件复制到容器目录下
   COPY ./apache-tomcat-7.0.82 /root/apache-tomcat-7.0.82
   # 将jdk1.8.0_151目录下的文件复制到容器目录下
   COPY ./jdk1.8.0_151 /root/jdk1.8.0_151                 
   # 将mongodb-linux-x86_64-rhel70-3.2.9目录下的文件复制到容器目录下
   COPY ./mongodb-linux-x86_64-rhel70-3.2.9/bin /usr/local/mongodb/bin 
   # 将start_tomcat_and_mongo.sh复制到容器/root/目录下
   COPY ./start_tomcat_and_mongo.sh /root/                
   # 注入JAVA环境变量
   RUN chown root:root -R /root \                    
    && echo "JAVA_HOME=/root/jdk1.8.0_151 " >> /etc/profile  \     
    && echo "PATH=\$JAVA_HOME/bin:$PATH " >> /etc/profile  \ 
    && echo "CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar" >> /etc/profile  \ 
    && chmod +x /root \ 
    && chmod +x /root/start_tomcat_and_mongo.sh
   # 容器启动的时候会自动运行start_tomcat_and_mongo.sh里面的命令，可以一条可以多条，也可以是一个脚本
   ENTRYPOINT ["/root/start_tomcat_and_mongo.sh"]
   ```
   其中：
   - FROM语句：表示使用centos:7.1.1503镜像作为基础。
   
   - RUN语句：表示在容器中执行某个shell命令。
   
   - COPY语句：把本机中的文件复制到容器中。
   
   - ENTRYPOINT语句：容器启动的命令。
   
   
   
   
 
